diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index d30e7647..ffe26a75 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -69,28 +69,30 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - - name: Use Node.js 14.x - uses: actions/setup-node@v2.1.4 - with: - node-version: 14.x + - uses: actions/checkout@v2 + with: + fetch-depth: 2 - - name: Cache Node Modules - uses: actions/cache@v2.1.4 - with: - path: '**/node_modules' - key: ${{ runner.os }}-${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }} + - name: Use Node.js 14.x + uses: actions/setup-node@v2 + with: + node-version: 14.x - - name: Coverage - run: | - cd web-app/ - yarn install - yarn coverage + - name: Cache Node Modules + uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }} - - name: CodeCov GitHub Action - uses: codecov/codecov-action@v1 - with: - file: web-app/coverage/lcov.info - name: react-frontend-unit-test-${{ matrix.node-version }} - fail_ci_if_error: true + - name: Coverage + run: | + cd web-app/ + yarn install + yarn coverage + + - name: CodeCov GitHub Action + uses: codecov/codecov-action@v1 + with: + file: web-app/coverage/lcov.info + name: react-frontend-unit-test-${{ matrix.node-version }} + fail_ci_if_error: true diff --git a/web-app/.eslintrc.json b/web-app/.eslintrc.json index 8bde2c2b..2ebee1cb 100644 --- a/web-app/.eslintrc.json +++ b/web-app/.eslintrc.json @@ -11,21 +11,42 @@ "plugin:react/recommended", "plugin:react-hooks/recommended", "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript", "plugin:jest/recommended", - "plugin:jest/style" + "plugin:jest/style", + "plugin:@typescript-eslint/recommended" ], "parserOptions": { + "project": [ + "tsconfig.json" + ], + "ecmaVersion": 2020, + "sourceType": "module", "ecmaFeatures": { "jsx": true - }, - "ecmaVersion": 11, - "sourceType": "module" + } }, "plugins": [ + "@typescript-eslint", "react", + "react-hooks", + "eslint-plugin-import", "jest" ], "rules": { + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-unused-vars": "off", + "react/jsx-filename-extension": [ + "warn", + { + "extensions": [ + ".jsx", + ".tsx" + ] + } + ], "react/prefer-es6-class": "error", "react/react-in-jsx-scope": "off", "react/default-props-match-prop-types": "error", diff --git a/web-app/LICENSE b/web-app/LICENSE deleted file mode 100644 index 64b1cda6..00000000 --- a/web-app/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2017 Esau Silva - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/web-app/babel.config.js b/web-app/babel.config.js index 07387c01..b4d2b8a9 100644 --- a/web-app/babel.config.js +++ b/web-app/babel.config.js @@ -1,4 +1,4 @@ -const presets = ["@babel/preset-react"]; +const presets = ["@babel/preset-react", "@babel/preset-typescript"]; const plugins = [ "react-hot-loader/babel", "@babel/plugin-syntax-dynamic-import", diff --git a/web-app/build-utils/common-paths.js b/web-app/build-utils/common-paths.js deleted file mode 100644 index f738e619..00000000 --- a/web-app/build-utils/common-paths.js +++ /dev/null @@ -1,8 +0,0 @@ -const path = require('path'); -const PROJECT_ROOT = path.resolve(__dirname, '../'); - -module.exports = { - projectRoot: PROJECT_ROOT, - outputPath: path.join(PROJECT_ROOT, 'dist'), - appEntry: path.join(PROJECT_ROOT, 'src') -}; diff --git a/web-app/build-utils/webpack.common.js b/web-app/build-utils/webpack.common.js deleted file mode 100644 index 3b3b5930..00000000 --- a/web-app/build-utils/webpack.common.js +++ /dev/null @@ -1,37 +0,0 @@ -const commonPaths = require('./common-paths'); - -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const MomentTimezoneDataPlugin = require('moment-timezone-data-webpack-plugin'); - -const config = { - output: { - path: commonPaths.outputPath, - publicPath: '/' - }, - module: { - rules: [ - { - test: /\.(js)$/, - exclude: /node_modules/, - loader: 'babel-loader', - options: { - presets: ["@babel/preset-env"], - }, - } - ] - }, - plugins: [ - new HtmlWebpackPlugin({ - template: `public/index.html`, - }), - new MomentLocalesPlugin(), - new MomentTimezoneDataPlugin({ - matchZones: ['Etc/UTC'], - startYear: 2020, - endYear: 2025, - }), - ] -}; - -module.exports = config; diff --git a/web-app/build-utils/webpack.dev.js b/web-app/build-utils/webpack.dev.js deleted file mode 100644 index 670ec992..00000000 --- a/web-app/build-utils/webpack.dev.js +++ /dev/null @@ -1,62 +0,0 @@ -const commonPaths = require('./common-paths'); -const webpack = require('webpack'); - -const port = process.env.PORT || 3000; - -const config = { - mode: 'development', - entry: { - app: `${commonPaths.appEntry}/index.js`, - }, - output: { - filename: '[name].[fullhash].js', - }, - devtool: 'eval', - module: { - rules: [ - { - test: /\.css$/, - use: [ - { - loader: 'style-loader', - options: { - esModule: true, - modules: { - namedExport: true, - }, - }, - }, - { - loader: 'css-loader', - options: { - esModule: true, - modules: { - namedExport: true, - }, - }, - }, - ], - }, - ], - }, - plugins: [ - new webpack.HotModuleReplacementPlugin(), - new webpack.ProvidePlugin({ - 'PropTypes': 'prop-types', - }), - ], - resolve: { - alias: { - 'react-dom': '@hot-loader/react-dom' - } - }, - devServer: { - host: 'localhost', - port: port, - historyApiFallback: true, - hot: true, - open: true, - }, -}; - -module.exports = config; diff --git a/web-app/build-utils/webpack.prod.js b/web-app/build-utils/webpack.prod.js deleted file mode 100644 index 23930b65..00000000 --- a/web-app/build-utils/webpack.prod.js +++ /dev/null @@ -1,63 +0,0 @@ -const commonPaths = require('./common-paths'); - -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); - -const config = { - mode: 'production', - entry: { - app: [`${commonPaths.appEntry}/index.js`], - }, - output: { - filename: 'static/[name].[fullhash].js', - }, - module: { - rules: [ - { - test: /\.css$/, - use: [ - { - loader: MiniCssExtractPlugin.loader, - options: { - esModule: true, - modules: { - namedExport: true, - }, - }, - }, - { - loader: 'css-loader', - options: { - esModule: true, - modules: { - namedExport: true, - }, - importLoaders: 1 - } - }, - { - loader: 'postcss-loader', - options: { - postcssOptions: { - plugins: [ - [ - "postcss-preset-env", - { - // Options - }, - ], - ], - }, - }, - }, - ], - }, - ], - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: 'styles/[name].[fullhash].css', - }), - ], -}; - -module.exports = config; diff --git a/web-app/jest.setup.js b/web-app/jest.setup.js index c040f1f1..0e407c31 100644 --- a/web-app/jest.setup.js +++ b/web-app/jest.setup.js @@ -1,5 +1,6 @@ window.React = require('react') window.PropTypes = require('prop-types') +import '@testing-library/jest-dom/extend-expect' /** * This is just a little hack to silence a warning that we'll get until react fixes this diff --git a/web-app/package.json b/web-app/package.json index 0f7d8eb8..1619aaae 100644 --- a/web-app/package.json +++ b/web-app/package.json @@ -21,49 +21,62 @@ "coverage": "yarn test --coverage" }, "dependencies": { - "react": "^17.0.0", + "react": "^17.0.1", "react-async": "^10.0.1", - "react-dom": "^17.0.0", + "react-dom": "^17.0.1", "react-live-clock": "^5.0.16", "semantic-ui-react": "^2.0.3" }, "devDependencies": { - "@babel/core": "^7.12.13", - "@babel/eslint-parser": "^7.12.13", + "@babel/core": "^7.12.17", + "@babel/eslint-parser": "^7.12.17", "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-transform-runtime": "^7.12.13", - "@babel/preset-env": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.17", + "@babel/preset-env": "^7.12.17", "@babel/preset-react": "^7.12.13", + "@babel/preset-typescript": "^7.12.17", "@hot-loader/react-dom": "^17.0.0", "@rooks/use-input": "^4.9.1", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^7.29.6", "@testing-library/jest-dom": "^5.11.9", "@testing-library/react": "^11.2.3", "@testing-library/user-event": "^12.7.1", + "@types/jest": "^26.0.20", + "@types/node": "^14.14.31", + "@types/react": "^17.0.2", + "@types/react-dom": "^17.0.1", + "@types/webpack": "^4.41.26", + "@types/webpack-dev-server": "^3.11.1", + "@types/webpack-env": "^1.16.0", + "@typescript-eslint/eslint-plugin": "^4.15.1", + "@typescript-eslint/parser": "^4.15.1", "babel-jest": "^26.6.0", "babel-loader": "^8.2.2", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "base64-js": "^1.5.1", "chalk": "^4.1.0", - "core-js": "^3.8.3", + "core-js": "^3.9.0", "cross-env": "^7.0.2", "css-loader": "^5.0.1", - "eslint": "^7.19.0", + "eslint": "^7.20.0", + "eslint-config-prettier": "^7.2.0", "eslint-config-standard": "^16.0.2", "eslint-plugin-import": "^2.22.1", "eslint-plugin-jest": "^24.1.5", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-react": "^7.22.0", "eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-standard": "^5.0.0", - "html-webpack-plugin": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.1.0", + "html-webpack-plugin": "^5.2.0", "http-terminator": "^3.0.0", "identity-obj-proxy": "^3.0.0", "jest": "^26.6.3", "jest-fetch-mock": "^3.0.3", "js-sha256": "^0.9.0", - "mini-css-extract-plugin": "^1.3.5", + "mini-css-extract-plugin": "^1.3.8", "moment": "^2.29.1", "moment-locales-webpack-plugin": "^1.2.0", "moment-timezone": "^0.5.32", @@ -76,9 +89,15 @@ "react-hot-loader": "^4.13.0", "react-moment": "^1.1.1", "rimraf": "^3.0.2", + "sass": "^1.32.8", + "sass-loader": "^11.0.1", "style-loader": "^2.0.0", + "ts-loader": "^8.0.17", + "ts-node": "^9.1.1", + "tsconfig-paths-webpack-plugin": "^3.3.0", + "typescript": "^4.1.5", "wait-for-expect": "^3.0.2", - "webpack": "^5.21.2", + "webpack": "^5.23.0", "webpack-bundle-analyzer": "^4.4.0", "webpack-cli": "^4.5.0", "webpack-dev-server": "^3.11.2", @@ -90,12 +109,12 @@ "/jest.setup.js" ], "collectCoverageFrom": [ - "src/**/*.js", - "!src/index.js", + "src/**/*", + "!src/index.tsx", "!/node_modules/" ], "moduleNameMapper": { - "\\.(css|less)$": "identity-obj-proxy" + "\\.(css|scss|sass|less)$": "identity-obj-proxy" } } } diff --git a/web-app/src/components/App.js b/web-app/src/components/App.tsx similarity index 94% rename from web-app/src/components/App.js rename to web-app/src/components/App.tsx index db15a541..819ba636 100644 --- a/web-app/src/components/App.js +++ b/web-app/src/components/App.tsx @@ -1,9 +1,9 @@ import { useAsync } from 'react-async' -import Layout from './Layout' import { LoadUsers } from '../core/services/List' import { Placeholders } from './decks/Placeholders' import MakeCards from './decks/Individuals' +import Layout from '../containers/layout/Layout' import ErrorMessage from '../containers/messages/Error' import PendingMessage from '../containers/messages/Pending' diff --git a/web-app/src/components/cards/Add.js b/web-app/src/components/cards/Add.tsx similarity index 94% rename from web-app/src/components/cards/Add.js rename to web-app/src/components/cards/Add.tsx index 5fce2e2e..b38e0399 100644 --- a/web-app/src/components/cards/Add.js +++ b/web-app/src/components/cards/Add.tsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import { Card, Button } from 'semantic-ui-react' import CreateUser from '../operations/Add' diff --git a/web-app/src/components/cards/Display.js b/web-app/src/components/cards/Display.tsx similarity index 96% rename from web-app/src/components/cards/Display.js rename to web-app/src/components/cards/Display.tsx index 31c6ede6..9545537b 100644 --- a/web-app/src/components/cards/Display.js +++ b/web-app/src/components/cards/Display.tsx @@ -1,4 +1,5 @@ import { useState, useEffect } from 'react' +import PropTypes from 'prop-types' import { Card, Button } from 'semantic-ui-react' import ModifyUser from '../operations/Edit' diff --git a/web-app/src/components/cards/Loading.js b/web-app/src/components/cards/Loading.tsx similarity index 100% rename from web-app/src/components/cards/Loading.js rename to web-app/src/components/cards/Loading.tsx diff --git a/web-app/src/components/cards/add.test.js b/web-app/src/components/cards/add.test.tsx similarity index 88% rename from web-app/src/components/cards/add.test.js rename to web-app/src/components/cards/add.test.tsx index 3333a3be..55081ddb 100644 --- a/web-app/src/components/cards/add.test.js +++ b/web-app/src/components/cards/add.test.tsx @@ -1,5 +1,4 @@ import { render, fireEvent, waitFor } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import userEvent from '@testing-library/user-event' @@ -8,14 +7,16 @@ import AddCard from './Add' jest.mock('../../core/services/List') test('renders', () => { - const { getByText, getByRole } = render( {}} />) + const mockCallback = jest.fn() + const { getByText, getByRole } = render() expect(getByText('Create New User')).toBeInTheDocument() expect(getByText('Someone New', { exact: false })).toBeInTheDocument() expect(getByRole('button', { name: 'Add' })).toHaveTextContent('Add') + expect(mockCallback).not.toHaveBeenCalled() }) test('updates on add', async () => { - const mockCallback = jest.fn((name, email) => { }) + const mockCallback = jest.fn() const { container, getByPlaceholderText, getByRole, getByText } = render( ) diff --git a/web-app/src/components/cards/display.test.js b/web-app/src/components/cards/display.test.tsx similarity index 94% rename from web-app/src/components/cards/display.test.js rename to web-app/src/components/cards/display.test.tsx index bd6a4b72..e754d89c 100644 --- a/web-app/src/components/cards/display.test.js +++ b/web-app/src/components/cards/display.test.tsx @@ -1,5 +1,4 @@ import { render, fireEvent, waitFor, screen } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import userEvent from '@testing-library/user-event' @@ -19,7 +18,7 @@ test('renders', () => { test('updates on edit', async () => { const user = { id: 37, name: 'Jenny Doe', email: 'jenny@example.com' } - const mockCallback = jest.fn((id) => { }) + const mockCallback = jest.fn() const { container, getByPlaceholderText, getByRole, getByText } = render( ) @@ -51,7 +50,7 @@ test('updates on edit', async () => { test('notifies id on delete', async () => { const user = { id: 27, name: 'James Doe', email: 'james@example.com' } - const mockCallback = jest.fn((id) => { }) + const mockCallback = jest.fn() const { getByRole } = render( ) diff --git a/web-app/src/components/cards/loading.test.js b/web-app/src/components/cards/loading.test.tsx similarity index 97% rename from web-app/src/components/cards/loading.test.js rename to web-app/src/components/cards/loading.test.tsx index 197c9ca0..11082f7a 100644 --- a/web-app/src/components/cards/loading.test.js +++ b/web-app/src/components/cards/loading.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import UserPlaceholder from './Loading' diff --git a/web-app/src/components/decks/Individuals.js b/web-app/src/components/decks/Individuals.tsx similarity index 96% rename from web-app/src/components/decks/Individuals.js rename to web-app/src/components/decks/Individuals.tsx index e9ae90cd..e9a60c36 100644 --- a/web-app/src/components/decks/Individuals.js +++ b/web-app/src/components/decks/Individuals.tsx @@ -1,4 +1,5 @@ import { useState, useEffect } from 'react' +import PropTypes from 'prop-types' import { Card } from 'semantic-ui-react' import User from '../cards/Display' diff --git a/web-app/src/components/decks/Placeholders.js b/web-app/src/components/decks/Placeholders.tsx similarity index 100% rename from web-app/src/components/decks/Placeholders.js rename to web-app/src/components/decks/Placeholders.tsx diff --git a/web-app/src/components/decks/individuals.test.js b/web-app/src/components/decks/individuals.test.tsx similarity index 99% rename from web-app/src/components/decks/individuals.test.js rename to web-app/src/components/decks/individuals.test.tsx index caf76282..68fd1809 100644 --- a/web-app/src/components/decks/individuals.test.js +++ b/web-app/src/components/decks/individuals.test.tsx @@ -1,5 +1,4 @@ import { render, fireEvent, waitFor } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import userEvent from '@testing-library/user-event' diff --git a/web-app/src/components/decks/placeholders.test.js b/web-app/src/components/decks/placeholders.test.tsx similarity index 99% rename from web-app/src/components/decks/placeholders.test.js rename to web-app/src/components/decks/placeholders.test.tsx index b06e7376..01c590d2 100644 --- a/web-app/src/components/decks/placeholders.test.js +++ b/web-app/src/components/decks/placeholders.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import { Placeholders } from './Placeholders' diff --git a/web-app/src/components/forms/Confirm.js b/web-app/src/components/forms/Confirm.tsx similarity index 91% rename from web-app/src/components/forms/Confirm.js rename to web-app/src/components/forms/Confirm.tsx index e225fd40..5246737d 100644 --- a/web-app/src/components/forms/Confirm.js +++ b/web-app/src/components/forms/Confirm.tsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import { Form } from 'semantic-ui-react' const ConfirmForm = ({ handleSubmit, disabled }) => ( diff --git a/web-app/src/components/forms/User.js b/web-app/src/components/forms/User.tsx similarity index 96% rename from web-app/src/components/forms/User.js rename to web-app/src/components/forms/User.tsx index 13c218be..ad982784 100644 --- a/web-app/src/components/forms/User.js +++ b/web-app/src/components/forms/User.tsx @@ -1,5 +1,6 @@ -import { Form } from 'semantic-ui-react' +import PropTypes from 'prop-types' import useInput from '@rooks/use-input' +import { Form } from 'semantic-ui-react' const UserForm = ({ user, handleSubmit, disabled }) => { const name = useInput(user.name) diff --git a/web-app/src/components/forms/confirm.test.js b/web-app/src/components/forms/confirm.test.tsx similarity index 95% rename from web-app/src/components/forms/confirm.test.js rename to web-app/src/components/forms/confirm.test.tsx index e28f8823..ca9b82b8 100644 --- a/web-app/src/components/forms/confirm.test.js +++ b/web-app/src/components/forms/confirm.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import userEvent from '@testing-library/user-event' diff --git a/web-app/src/components/forms/user.test.js b/web-app/src/components/forms/user.test.tsx similarity index 97% rename from web-app/src/components/forms/user.test.js rename to web-app/src/components/forms/user.test.tsx index a2354b8e..bd11fc5a 100644 --- a/web-app/src/components/forms/user.test.js +++ b/web-app/src/components/forms/user.test.tsx @@ -1,5 +1,4 @@ import { render, fireEvent } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import userEvent from '@testing-library/user-event' diff --git a/web-app/src/components/operations/Add.js b/web-app/src/components/operations/Add.tsx similarity index 98% rename from web-app/src/components/operations/Add.js rename to web-app/src/components/operations/Add.tsx index f3b4e536..090822d8 100644 --- a/web-app/src/components/operations/Add.js +++ b/web-app/src/components/operations/Add.tsx @@ -1,5 +1,6 @@ import { useState } from 'react' import { useAsync } from 'react-async' +import PropTypes from 'prop-types' import { Button } from 'semantic-ui-react' import PopupModal from '../../containers/PopupModal' diff --git a/web-app/src/components/operations/Delete.js b/web-app/src/components/operations/Delete.tsx similarity index 98% rename from web-app/src/components/operations/Delete.js rename to web-app/src/components/operations/Delete.tsx index 1e25fecd..b25fe3bc 100644 --- a/web-app/src/components/operations/Delete.js +++ b/web-app/src/components/operations/Delete.tsx @@ -1,5 +1,6 @@ import { useState } from 'react' import { useAsync } from 'react-async' +import PropTypes from 'prop-types' import { Button } from 'semantic-ui-react' import PopupModal from '../../containers/PopupModal' diff --git a/web-app/src/components/operations/Edit.js b/web-app/src/components/operations/Edit.tsx similarity index 98% rename from web-app/src/components/operations/Edit.js rename to web-app/src/components/operations/Edit.tsx index d394403c..6de2a1b8 100644 --- a/web-app/src/components/operations/Edit.js +++ b/web-app/src/components/operations/Edit.tsx @@ -1,5 +1,6 @@ import { useState, useEffect } from 'react' import { useAsync } from 'react-async' +import PropTypes from 'prop-types' import { Button } from 'semantic-ui-react' import PopupModal from '../../containers/PopupModal' diff --git a/web-app/src/components/operations/add.error.test.js b/web-app/src/components/operations/add.error.test.tsx similarity index 94% rename from web-app/src/components/operations/add.error.test.js rename to web-app/src/components/operations/add.error.test.tsx index 3a716225..e89e86a3 100644 --- a/web-app/src/components/operations/add.error.test.js +++ b/web-app/src/components/operations/add.error.test.tsx @@ -1,6 +1,5 @@ import { render, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import CreateUser from './Add' diff --git a/web-app/src/components/operations/add.test.js b/web-app/src/components/operations/add.test.tsx similarity index 98% rename from web-app/src/components/operations/add.test.js rename to web-app/src/components/operations/add.test.tsx index 0d62cec9..958f58a4 100644 --- a/web-app/src/components/operations/add.test.js +++ b/web-app/src/components/operations/add.test.tsx @@ -1,6 +1,5 @@ import { render, waitFor, screen, fireEvent } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import CreateUser from './Add' diff --git a/web-app/src/components/operations/delete.error.test.js b/web-app/src/components/operations/delete.error.test.tsx similarity index 95% rename from web-app/src/components/operations/delete.error.test.js rename to web-app/src/components/operations/delete.error.test.tsx index fbab9652..0d3ffc1c 100644 --- a/web-app/src/components/operations/delete.error.test.js +++ b/web-app/src/components/operations/delete.error.test.tsx @@ -1,6 +1,5 @@ import { render, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import RemoveUser from './Delete' diff --git a/web-app/src/components/operations/delete.test.js b/web-app/src/components/operations/delete.test.tsx similarity index 93% rename from web-app/src/components/operations/delete.test.js rename to web-app/src/components/operations/delete.test.tsx index 443a4db3..0317bc60 100644 --- a/web-app/src/components/operations/delete.test.js +++ b/web-app/src/components/operations/delete.test.tsx @@ -1,6 +1,5 @@ import { render, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import RemoveUser from './Delete' @@ -11,7 +10,7 @@ jest.mock('../../core/services/User') test('renders', async () => { const user = { id: 0, name: 'Jenny Doe', email: 'jenny@example.com' } const mockCallback = jest.fn() - const { getByRole, queryByRole, queryByText } = render() + const { getByRole, queryByRole, queryByText } = render() userEvent.click(getByRole('button', { name: 'Delete' })) await waitFor(() => getByRole('button', { name: 'Confirm' })) diff --git a/web-app/src/components/operations/edit.error.test.js b/web-app/src/components/operations/edit.error.test.tsx similarity index 95% rename from web-app/src/components/operations/edit.error.test.js rename to web-app/src/components/operations/edit.error.test.tsx index 524c7a2e..0babde2a 100644 --- a/web-app/src/components/operations/edit.error.test.js +++ b/web-app/src/components/operations/edit.error.test.tsx @@ -1,6 +1,5 @@ import { render, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import ModifyUser from './Edit' diff --git a/web-app/src/components/operations/edit.test.js b/web-app/src/components/operations/edit.test.tsx similarity index 98% rename from web-app/src/components/operations/edit.test.js rename to web-app/src/components/operations/edit.test.tsx index d8c8859b..bf4c10d7 100644 --- a/web-app/src/components/operations/edit.test.js +++ b/web-app/src/components/operations/edit.test.tsx @@ -1,5 +1,4 @@ import { render, fireEvent, waitFor, screen } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import waitForExpect from 'wait-for-expect' import userEvent from '@testing-library/user-event' diff --git a/web-app/src/containers/PopupModal.js b/web-app/src/containers/PopupModal.tsx similarity index 95% rename from web-app/src/containers/PopupModal.js rename to web-app/src/containers/PopupModal.tsx index 398f76d6..50246ed6 100644 --- a/web-app/src/containers/PopupModal.js +++ b/web-app/src/containers/PopupModal.tsx @@ -1,4 +1,5 @@ import { useState } from 'react' +import PropTypes from 'prop-types' import { Modal } from 'semantic-ui-react' const PopupModal = ({ button, header, children, onClose }) => { diff --git a/web-app/src/components/Layout.js b/web-app/src/containers/layout/Layout.tsx similarity index 91% rename from web-app/src/components/Layout.js rename to web-app/src/containers/layout/Layout.tsx index e5233a21..7c7420e4 100644 --- a/web-app/src/components/Layout.js +++ b/web-app/src/containers/layout/Layout.tsx @@ -1,7 +1,8 @@ +import PropTypes from 'prop-types' import Clock from 'react-live-clock' import { Header, Container, Divider, Icon, Grid } from 'semantic-ui-react' -import { pullRight, h1 } from './layout.css' +import { pullRight, h1 } from './layout.scss' const Layout = ({ children }) => { return ( diff --git a/web-app/src/components/layout.css b/web-app/src/containers/layout/layout.scss similarity index 100% rename from web-app/src/components/layout.css rename to web-app/src/containers/layout/layout.scss diff --git a/web-app/src/containers/layout/layout.scss.d.ts b/web-app/src/containers/layout/layout.scss.d.ts new file mode 100644 index 00000000..1b21139f --- /dev/null +++ b/web-app/src/containers/layout/layout.scss.d.ts @@ -0,0 +1,2 @@ +export const pullRight: string +export const h1: string diff --git a/web-app/src/components/layout.test.js b/web-app/src/containers/layout/layout.test.tsx similarity index 96% rename from web-app/src/components/layout.test.js rename to web-app/src/containers/layout/layout.test.tsx index bdc48277..35c073ab 100644 --- a/web-app/src/components/layout.test.js +++ b/web-app/src/containers/layout/layout.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import Layout from './Layout' diff --git a/web-app/src/containers/messages/Error.js b/web-app/src/containers/messages/Error.tsx similarity index 92% rename from web-app/src/containers/messages/Error.js rename to web-app/src/containers/messages/Error.tsx index dc37a76c..0290f56c 100644 --- a/web-app/src/containers/messages/Error.js +++ b/web-app/src/containers/messages/Error.tsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import { Message, Icon } from 'semantic-ui-react' const ErrorMessage = ({ message }) => ( diff --git a/web-app/src/containers/messages/Pending.js b/web-app/src/containers/messages/Pending.tsx similarity index 92% rename from web-app/src/containers/messages/Pending.js rename to web-app/src/containers/messages/Pending.tsx index 0343fc40..0b39d720 100644 --- a/web-app/src/containers/messages/Pending.js +++ b/web-app/src/containers/messages/Pending.tsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import { Message, Icon } from 'semantic-ui-react' const PendingMessage = ({ message }) => ( diff --git a/web-app/src/containers/messages/Select.js b/web-app/src/containers/messages/Select.js deleted file mode 100644 index 30475a6c..00000000 --- a/web-app/src/containers/messages/Select.js +++ /dev/null @@ -1,27 +0,0 @@ -import PendingMessage from './Pending' -import SuccessMessage from './Success' -import ErrorMessage from './Error' - -const SelectMessage = ({ success, loading, error }) => { - return ( - <> - { loading && } - { error && } - { success && } - - ) -} - -SelectMessage.propTypes = { - success: PropTypes.shape({ - message: PropTypes.string.isRequired - }), - loading: PropTypes.shape({ - message: PropTypes.string.isRequired - }), - error: PropTypes.shape({ - message: PropTypes.string.isRequired - }) -} - -export default SelectMessage diff --git a/web-app/src/containers/messages/Select.tsx b/web-app/src/containers/messages/Select.tsx new file mode 100644 index 00000000..c9ff2a2e --- /dev/null +++ b/web-app/src/containers/messages/Select.tsx @@ -0,0 +1,37 @@ +import { FunctionComponent } from 'react' +// import PropTypes from 'prop-types' + +import { Message } from '../../core/models/Message' +import PendingMessage from './Pending' +import SuccessMessage from './Success' +import ErrorMessage from './Error' + +interface SelectMessageProps { + success?: Message, + loading?: Message, + error?: Message, +} + +const SelectMessage: FunctionComponent = ({ success, loading, error }) => { + return ( + <> + { loading && } + { error && } + { success && } + + ) +} + +// SelectMessage.propTypes = { +// success: PropTypes.shape({ +// message: PropTypes.string.isRequired +// }), +// loading: PropTypes.shape({ +// message: PropTypes.string.isRequired +// }), +// error: PropTypes.shape({ +// message: PropTypes.string.isRequired +// }) +// } + +export default SelectMessage diff --git a/web-app/src/containers/messages/Success.js b/web-app/src/containers/messages/Success.tsx similarity index 92% rename from web-app/src/containers/messages/Success.js rename to web-app/src/containers/messages/Success.tsx index a9e8e74c..02c17f2b 100644 --- a/web-app/src/containers/messages/Success.js +++ b/web-app/src/containers/messages/Success.tsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import { Message, Icon } from 'semantic-ui-react' const SuccessMessage = ({ message }) => ( diff --git a/web-app/src/containers/messages/Warning.js b/web-app/src/containers/messages/Warning.tsx similarity index 92% rename from web-app/src/containers/messages/Warning.js rename to web-app/src/containers/messages/Warning.tsx index 3db2379d..91a7d207 100644 --- a/web-app/src/containers/messages/Warning.js +++ b/web-app/src/containers/messages/Warning.tsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import { Message, Icon } from 'semantic-ui-react' const WarningMessage = ({ message }) => ( diff --git a/web-app/src/containers/messages/error.test.js b/web-app/src/containers/messages/error.test.tsx similarity index 92% rename from web-app/src/containers/messages/error.test.js rename to web-app/src/containers/messages/error.test.tsx index ea087059..f1b77348 100644 --- a/web-app/src/containers/messages/error.test.js +++ b/web-app/src/containers/messages/error.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import ErrorMessage from './Error' diff --git a/web-app/src/containers/messages/pending.test.js b/web-app/src/containers/messages/pending.test.tsx similarity index 92% rename from web-app/src/containers/messages/pending.test.js rename to web-app/src/containers/messages/pending.test.tsx index 55d9d72f..f0c7c6b2 100644 --- a/web-app/src/containers/messages/pending.test.js +++ b/web-app/src/containers/messages/pending.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import PendingMessage from './Pending' diff --git a/web-app/src/containers/messages/select.test.js b/web-app/src/containers/messages/select.test.tsx similarity index 97% rename from web-app/src/containers/messages/select.test.js rename to web-app/src/containers/messages/select.test.tsx index 007b1313..de2dd814 100644 --- a/web-app/src/containers/messages/select.test.js +++ b/web-app/src/containers/messages/select.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import SelectMessage from './Select' diff --git a/web-app/src/containers/messages/success.test.js b/web-app/src/containers/messages/success.test.tsx similarity index 92% rename from web-app/src/containers/messages/success.test.js rename to web-app/src/containers/messages/success.test.tsx index 7738962f..6f13f4ed 100644 --- a/web-app/src/containers/messages/success.test.js +++ b/web-app/src/containers/messages/success.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import SuccessMessage from './Success' diff --git a/web-app/src/containers/messages/warning.test.js b/web-app/src/containers/messages/warning.test.tsx similarity index 92% rename from web-app/src/containers/messages/warning.test.js rename to web-app/src/containers/messages/warning.test.tsx index cbe38f63..5ead39b1 100644 --- a/web-app/src/containers/messages/warning.test.js +++ b/web-app/src/containers/messages/warning.test.tsx @@ -1,5 +1,4 @@ import { render } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import WarningMessage from './Warning' diff --git a/web-app/src/containers/popupmodal.test.js b/web-app/src/containers/popupmodal.test.tsx similarity index 90% rename from web-app/src/containers/popupmodal.test.js rename to web-app/src/containers/popupmodal.test.tsx index 59f4c354..d7c15aaf 100644 --- a/web-app/src/containers/popupmodal.test.js +++ b/web-app/src/containers/popupmodal.test.tsx @@ -1,11 +1,10 @@ import { render, waitFor } from '@testing-library/react' -import '@testing-library/jest-dom/extend-expect' import userEvent from '@testing-library/user-event' import PopupModal from './PopupModal' test('renders a PopupModal', async () => { - const mockCallback = jest.fn(() => {}) + const mockCallback = jest.fn() const { container, getByTestId, getByText } = render( Click Me!} diff --git a/web-app/src/core/models/Message.ts b/web-app/src/core/models/Message.ts new file mode 100644 index 00000000..74913aa2 --- /dev/null +++ b/web-app/src/core/models/Message.ts @@ -0,0 +1,3 @@ +export interface Message { + message: string, +} diff --git a/web-app/src/core/services/List.js b/web-app/src/core/services/List.ts similarity index 100% rename from web-app/src/core/services/List.js rename to web-app/src/core/services/List.ts diff --git a/web-app/src/core/services/User.js b/web-app/src/core/services/User.ts similarity index 100% rename from web-app/src/core/services/User.js rename to web-app/src/core/services/User.ts diff --git a/web-app/src/core/services/__mocks__/List.js b/web-app/src/core/services/__mocks__/List.ts similarity index 100% rename from web-app/src/core/services/__mocks__/List.js rename to web-app/src/core/services/__mocks__/List.ts diff --git a/web-app/src/core/services/__mocks__/User.js b/web-app/src/core/services/__mocks__/User.ts similarity index 83% rename from web-app/src/core/services/__mocks__/User.js rename to web-app/src/core/services/__mocks__/User.ts index 5603dbbd..5ebce8fd 100644 --- a/web-app/src/core/services/__mocks__/User.js +++ b/web-app/src/core/services/__mocks__/User.ts @@ -3,5 +3,5 @@ export const EditUser = async ([id, name, email, etag], props, { signal }) => { } export const DeleteUser = async ([id, etag], props, { signal }) => { - return new Promise(resolve => resolve()) + return new Promise(resolve => resolve(null)) } diff --git a/web-app/src/core/services/services.test.js b/web-app/src/core/services/services.test.ts similarity index 96% rename from web-app/src/core/services/services.test.js rename to web-app/src/core/services/services.test.ts index 1388c998..0f06fbd2 100644 --- a/web-app/src/core/services/services.test.js +++ b/web-app/src/core/services/services.test.ts @@ -1,5 +1,4 @@ -// eslint-disable-next-line -import { enableFetchMocks } from 'jest-fetch-mock' // mock fetch within list endpoints +import 'cross-fetch/polyfill' import { LoadUsers, AddUser } from './List' import { EditUser, DeleteUser } from './User' diff --git a/web-app/src/core/tools/Etag.js b/web-app/src/core/tools/Etag.ts similarity index 71% rename from web-app/src/core/tools/Etag.js rename to web-app/src/core/tools/Etag.ts index 36962235..6d120156 100644 --- a/web-app/src/core/tools/Etag.js +++ b/web-app/src/core/tools/Etag.ts @@ -2,10 +2,10 @@ import { fromByteArray } from 'base64-js' import { sha256 } from 'js-sha256' export const Etag = (id, name, email) => { - return fromByteArray(sha256.array(JSON.stringify({ + return fromByteArray(Uint8Array.from(sha256.array(JSON.stringify({ // Order is important email: email, id: id, name: name - }))) + })))) } diff --git a/web-app/src/core/tools/etag.test.js b/web-app/src/core/tools/etag.test.ts similarity index 100% rename from web-app/src/core/tools/etag.test.js rename to web-app/src/core/tools/etag.test.ts diff --git a/web-app/src/index.css b/web-app/src/index.css deleted file mode 100644 index e69de29b..00000000 diff --git a/web-app/src/index.js b/web-app/src/index.tsx similarity index 90% rename from web-app/src/index.js rename to web-app/src/index.tsx index 7e4840f3..36efbbd0 100644 --- a/web-app/src/index.js +++ b/web-app/src/index.tsx @@ -1,7 +1,7 @@ +import ReactDOM from 'react-dom' import { AppContainer } from 'react-hot-loader' -import App from './components/App' -import './index.css' +import App from './components/App' const render = Component => { ReactDOM.render( diff --git a/web-app/tsconfig.json b/web-app/tsconfig.json new file mode 100644 index 00000000..ce5b6e51 --- /dev/null +++ b/web-app/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "sourceMap": true, + "module": "es2020", + "target": "es6", + "jsx": "react-jsx", + "allowJs": true, + "noImplicitAny": false, + "allowSyntheticDefaultImports": true, // https://www.typescriptlang.org/tsconfig#allowSyntheticDefaultImports + "esModuleInterop": true, // https://www.typescriptlang.org/tsconfig#esModuleInterop + "moduleResolution": "node", // https://www.typescriptlang.org/docs/handbook/module-resolution.html + "removeComments": true, + }, + "include": [ + "./src/**/*" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/web-app/webpack.config.js b/web-app/webpack.config.js index 854dac35..42b621f1 100644 --- a/web-app/webpack.config.js +++ b/web-app/webpack.config.js @@ -1,5 +1,5 @@ const chalk = require('chalk'); -const commonConfig = require('./build-utils/webpack.common.js'); +const commonConfig = require('./webpack/webpack.common.js'); const webpack = require('webpack'); const { merge } = require('webpack-merge') @@ -8,19 +8,19 @@ const addons = (/* string | string[] */ addonsArg) => { let addons = [...[addonsArg]] // Normalize array of addons (flatten) .filter(Boolean); // If addons is undefined, filter it out - return addons.map(addonName => require(`./build-utils/addons/webpack.${addonName}.js`)); + return addons.map(addonName => require(`./webpack/addons/webpack.${addonName}.js`)); }; module.exports = env => { if (!env['env']) { throw new Error(`You must pass an '--env env=dev|prod' flag into your build for webpack to work!`); } - + if (!env['API_URL']) { console.log(`${chalk.yellow('Warning! API_URL is undefined')}`); } - const envConfig = require(`./build-utils/webpack.${env.env}.js`); + const envConfig = require(`./webpack/webpack.${env.env}.js`); const mergedConfig = merge( commonConfig, envConfig, @@ -28,7 +28,9 @@ module.exports = env => { { plugins: [ new webpack.DefinePlugin({ - 'process.env.API_URL': JSON.stringify(`${env.API_URL}`) + 'process.env.API_URL': JSON.stringify(`${env.API_URL}`), + "process.env.NAME": JSON.stringify(require("./package.json").name), + "process.env.VERSION": JSON.stringify(require("./package.json").version), }), new webpack.ProvidePlugin({ 'React': 'react', diff --git a/web-app/build-utils/addons/webpack.bundleanalyzer.js b/web-app/webpack/addons/webpack.bundleanalyzer.js similarity index 85% rename from web-app/build-utils/addons/webpack.bundleanalyzer.js rename to web-app/webpack/addons/webpack.bundleanalyzer.js index c0063b1a..277ed00c 100644 --- a/web-app/build-utils/addons/webpack.bundleanalyzer.js +++ b/web-app/webpack/addons/webpack.bundleanalyzer.js @@ -1,5 +1,5 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') - .BundleAnalyzerPlugin; + .BundleAnalyzerPlugin module.exports = { plugins: [ @@ -7,4 +7,4 @@ module.exports = { analyzerMode: 'server' }) ] -}; +} diff --git a/web-app/webpack/rules/styles.js b/web-app/webpack/rules/styles.js new file mode 100644 index 00000000..26aed321 --- /dev/null +++ b/web-app/webpack/rules/styles.js @@ -0,0 +1,17 @@ +module.exports = { + cssLoader: { + loader: 'css-loader', + options: { + esModule: true, + modules: { + namedExport: true + } + } + }, + sassLoader: { + loader: 'sass-loader', + options: { + implementation: require('sass') // Prefer `dart-sass` + } + } +} diff --git a/web-app/webpack/webpack.common.js b/web-app/webpack/webpack.common.js new file mode 100644 index 00000000..358683c6 --- /dev/null +++ b/web-app/webpack/webpack.common.js @@ -0,0 +1,57 @@ +const path = require('path') +const PROJECT_ROOT = path.resolve(__dirname, '../') + +const commonPaths = { + projectRoot: PROJECT_ROOT, + outputPath: path.join(PROJECT_ROOT, 'dist'), + appEntry: path.join(PROJECT_ROOT, 'src') +} + +const HtmlWebpackPlugin = require('html-webpack-plugin') +const MomentLocalesPlugin = require('moment-locales-webpack-plugin') +const MomentTimezoneDataPlugin = require('moment-timezone-data-webpack-plugin') +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin') + +const config = { + entry: { + app: [`${commonPaths.appEntry}/index.tsx`] + }, + output: { + path: commonPaths.outputPath, + publicPath: '/' + }, + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'] + }, + module: { + rules: [ + { + test: /\.[tj]sx?$/, + exclude: /node_modules/, + loader: 'babel-loader' + } + ] + }, + plugins: [ + new HtmlWebpackPlugin({ + template: 'public/index.html' + }), + new MomentLocalesPlugin(), + new MomentTimezoneDataPlugin({ + matchZones: ['Etc/UTC'], + startYear: 2021, + endYear: 2024 + }), + new ForkTsCheckerWebpackPlugin({ + typescript: { + diagnosticOptions: { + semantic: true, + syntactic: true, + }, + mode: "write-references", + }, + }), + ] +} + +module.exports = config diff --git a/web-app/webpack/webpack.dev.js b/web-app/webpack/webpack.dev.js new file mode 100644 index 00000000..83063540 --- /dev/null +++ b/web-app/webpack/webpack.dev.js @@ -0,0 +1,49 @@ +const webpack = require('webpack') +const styles = require('./rules/styles') + +const port = process.env.PORT || 3000 + +const config = { + mode: 'development', + output: { + filename: '[name].[fullhash].js' + }, + devtool: 'eval', + module: { + rules: [ + { + test: /\.s[ac]ss$/, + use: [ + { + loader: 'style-loader', + options: { + esModule: true, + modules: { + namedExport: true + } + } + }, + styles.cssLoader, + styles.sassLoader + ] + } + ] + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + ], + resolve: { + alias: { + 'react-dom': '@hot-loader/react-dom' + } + }, + devServer: { + host: 'localhost', + port: port, + historyApiFallback: true, + hot: true, + open: true + } +} + +module.exports = config diff --git a/web-app/webpack/webpack.prod.js b/web-app/webpack/webpack.prod.js new file mode 100644 index 00000000..df4c1993 --- /dev/null +++ b/web-app/webpack/webpack.prod.js @@ -0,0 +1,51 @@ +const MiniCssExtractPlugin = require('mini-css-extract-plugin') +const styles = require('./rules/styles') + +const config = { + mode: 'production', + output: { + filename: 'static/[name].[fullhash].js' + }, + module: { + rules: [ + { + test: /\.s[ac]ss$/, + use: [ + { + loader: MiniCssExtractPlugin.loader, + options: { + esModule: true, + modules: { + namedExport: true + } + } + }, + styles.cssLoader, + { + loader: 'postcss-loader', + options: { + postcssOptions: { + plugins: [ + [ + 'postcss-preset-env', + { + // Options + } + ] + ] + } + } + }, + styles.sassLoader + ] + } + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: 'styles/[name].[fullhash].css' + }) + ] +} + +module.exports = config diff --git a/web-app/yarn.lock b/web-app/yarn.lock index 9dbafbb1..099ecdcb 100644 --- a/web-app/yarn.lock +++ b/web-app/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== @@ -21,19 +21,19 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.13.tgz#27e19e0ed3726ccf54067ced4109501765e7e2e8" integrity sha512-U/hshG5R+SIoW7HVWIdmy1cB7s3ki+r3FpyEZiCgpi4tFgPnX/vynY80ZGSASOIrUM6O7VxOgCZgdt7h97bUGg== -"@babel/core@^7.1.0", "@babel/core@^7.12.13", "@babel/core@^7.7.5": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.16.tgz#8c6ba456b23b680a6493ddcfcd9d3c3ad51cab7c" - integrity sha512-t/hHIB504wWceOeaOoONOhu+gX+hpjfeN6YRBT209X/4sibZQfSF1I0HFRRlBe97UZZosGx5XwUg1ZgNbelmNw== +"@babel/core@^7.1.0", "@babel/core@^7.12.17", "@babel/core@^7.7.5": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.17.tgz#993c5e893333107a2815d8e0d73a2c3755e280b2" + integrity sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.15" - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helpers" "^7.12.13" - "@babel/parser" "^7.12.16" + "@babel/generator" "^7.12.17" + "@babel/helper-module-transforms" "^7.12.17" + "@babel/helpers" "^7.12.17" + "@babel/parser" "^7.12.17" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.12.17" + "@babel/types" "^7.12.17" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -42,21 +42,21 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/eslint-parser@^7.12.13": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.12.16.tgz#e23d5a39869ef7a0d151e11502ab36bc8639e20b" - integrity sha512-NZHtJr2pLRYcQjvo/GVU3kFxIGEHveswoWfY5Wm2tJ7pb3AoqoQ+PP17rRTDh+POFWM15VvH+23x2/9Od0CYxQ== +"@babel/eslint-parser@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.12.17.tgz#6cb57929c5614654ee7d6d27fa85ed0b6a8d4470" + integrity sha512-CoetDyQRwtkUlOtbkCmYFpneXD78oANblFGUMX4DKLYj/mHzuS3rPt7zWzaDf0lB4uEB3C7C+hQAS/QgxqjdXQ== dependencies: eslint-scope "5.1.0" eslint-visitor-keys "^1.3.0" semver "^6.3.0" -"@babel/generator@^7.12.13", "@babel/generator@^7.12.15": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" - integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== +"@babel/generator@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.17.tgz#9ef1dd792d778b32284411df63f4f668a9957287" + integrity sha512-DSA7ruZrY4WI8VxuS1jWSRezFnghEoYEFrZcw9BizQRmOZiUsiHl59+qEARGPqPikwA/GPTyRCi7isuCK/oyqg== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.12.17" jsesc "^2.5.1" source-map "^0.5.0" @@ -75,31 +75,31 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.16.tgz#6905238b4a5e02ba2d032c1a49dd1820fe8ce61b" - integrity sha512-dBHNEEaZx7F3KoUYqagIhRIeqyyuI65xMndMZ3WwGwEBI609I4TleYQHcrS627vbKyNTXqShoN+fvYD9HuQxAg== +"@babel/helper-compilation-targets@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.17.tgz#91d83fae61ef390d39c3f0507cb83979bab837c7" + integrity sha512-5EkibqLVYOuZ89BSg2lv+GG8feywLuvMXNYgf0Im4MssE0mFWPztSpJbildNnUgw0bLI2EsIN4MpSHC2iUJkQA== dependencies: "@babel/compat-data" "^7.12.13" - "@babel/helper-validator-option" "^7.12.16" + "@babel/helper-validator-option" "^7.12.17" browserslist "^4.14.5" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.12.13": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.16.tgz#955d5099fd093e5afb05542190f8022105082c61" - integrity sha512-KbSEj8l9zYkMVHpQqM3wJNxS1d9h3U9vm/uE5tpjMbaj3lTp+0noe3KPsV5dSD9jxKnf9jO9Ip9FX5PKNZCKow== +"@babel/helper-create-class-features-plugin@^7.12.13", "@babel/helper-create-class-features-plugin@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.17.tgz#704b69c8a78d03fb1c5fcc2e7b593f8a65628944" + integrity sha512-I/nurmTxIxHV0M+rIpfQBF1oN342+yvl2kwZUrQuOClMamHF1w5tknfZubgNOLRoA73SzBFAdFcpb4M9HwOeWQ== dependencies: "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.12.16" + "@babel/helper-member-expression-to-functions" "^7.12.17" "@babel/helper-optimise-call-expression" "^7.12.13" "@babel/helper-replace-supers" "^7.12.13" "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.16.tgz#3b31d13f39f930fad975e151163b7df7d4ffe9d3" - integrity sha512-jAcQ1biDYZBdaAxB4yg46/XirgX7jBDiMHDbwYQOgtViLBXGxJpZQ24jutmBqAIB/q+AwB6j+NbBXjKxEY8vqg== + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" + integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" regexpu-core "^4.7.1" @@ -134,12 +134,12 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-member-expression-to-functions@^7.12.13", "@babel/helper-member-expression-to-functions@^7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.16.tgz#41e0916b99f8d5f43da4f05d85f4930fa3d62b22" - integrity sha512-zYoZC1uvebBFmj1wFAlXwt35JLEgecefATtKp20xalwEK8vHAixLBXTGxNrVGEmTT+gzOThUgr8UEdgtalc1BQ== +"@babel/helper-member-expression-to-functions@^7.12.13", "@babel/helper-member-expression-to-functions@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.17.tgz#f82838eb06e1235307b6d71457b6670ff71ee5ac" + integrity sha512-Bzv4p3ODgS/qpBE0DiJ9qf5WxSmrQ8gVTe8ClMfwwsY2x/rhykxxy3bXzG7AGTnPB2ij37zGJ/Q/6FruxHxsxg== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.12.17" "@babel/helper-module-imports@^7.12.13": version "7.12.13" @@ -148,10 +148,10 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-module-transforms@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz#01afb052dcad2044289b7b20beb3fa8bd0265bea" - integrity sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA== +"@babel/helper-module-transforms@^7.12.13", "@babel/helper-module-transforms@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.17.tgz#7c75b987d6dfd5b48e575648f81eaac891539509" + integrity sha512-sFL+p6zOCQMm9vilo06M4VHuTxUAwa6IxgL56Tq1DVtA0ziAGTH1ThmJq7xwPqdQlgAbKX3fb0oZNbtRIyA5KQ== dependencies: "@babel/helper-module-imports" "^7.12.13" "@babel/helper-replace-supers" "^7.12.13" @@ -159,8 +159,8 @@ "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-validator-identifier" "^7.12.11" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.12.17" + "@babel/types" "^7.12.17" lodash "^4.17.19" "@babel/helper-optimise-call-expression@^7.12.13": @@ -220,10 +220,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-option@^7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.16.tgz#f73cbd3bbba51915216c5dea908e9b206bb10051" - integrity sha512-uCgsDBPUQDvzr11ePPo4TVEocxj8RXjUVSC/Y8N1YpVAI/XDdUwGJu78xmlGhTxj2ntaWM7n9LQdRtyhOzT2YQ== +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== "@babel/helper-wrap-function@^7.12.13": version "7.12.13" @@ -235,14 +235,14 @@ "@babel/traverse" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helpers@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" - integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== +"@babel/helpers@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.17.tgz#71e03d2981a6b5ee16899964f4101dc8471d60bc" + integrity sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg== dependencies: "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.12.17" + "@babel/types" "^7.12.17" "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.12.13" @@ -253,10 +253,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" - integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.17.tgz#bc85d2d47db38094e5bb268fc761716e7d693848" + integrity sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg== "@babel/plugin-proposal-async-generator-functions@^7.12.13": version "7.12.13" @@ -275,10 +275,10 @@ "@babel/helper-create-class-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-proposal-dynamic-import@^7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.16.tgz#b9f33b252e3406d492a15a799c9d45a9a9613473" - integrity sha512-yiDkYFapVxNOCcBfLnsb/qdsliroM+vc3LHiZwS4gh7pFjo5Xq3BDhYBNn3H3ao+hWPvqeeTdU+s+FIvokov+w== +"@babel/plugin-proposal-dynamic-import@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.17.tgz#e0ebd8db65acc37eac518fa17bead2174e224512" + integrity sha512-ZNGoFZqrnuy9H2izB2jLlnNDAfVPlGl5NhFEiFe4D84ix9GQGygF+CWMGHKuE+bpyS/AOuDQCnkiRNqW2IzS1Q== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-dynamic-import" "^7.8.0" @@ -340,10 +340,10 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.16.tgz#600c7531f754186b0f2096e495a92da7d88aa139" - integrity sha512-O3ohPwOhkwji5Mckb7F/PJpJVJY3DpPsrt/F0Bk40+QMk9QpAIqeGusHWqu/mYqsM8oBa6TziL/2mbERWsUZjg== +"@babel/plugin-proposal-optional-chaining@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.17.tgz#e382becadc2cb16b7913b6c672d92e4b33385b5c" + integrity sha512-TvxwI80pWftrGPKHNfkvX/HnoeSTR7gC4ezWnAL39PuktYUe6r8kEpOLTYnkBTsaoeazXm2jHJ22EQ81sdgfcA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" @@ -470,6 +470,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-typescript@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" + integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-arrow-functions@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.13.tgz#eda5670b282952100c229f8a3bd49e0f6a72e9fe" @@ -661,22 +668,22 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-react-jsx-development@^7.12.12": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.16.tgz#af187e749d123b54ae49bc7e034057a0c1d4d568" - integrity sha512-GOp5SkMC4zhHwLbOSYhF+WpIZSf5bGzaKQTT9jWkemJRDM/CE6FtPydXjEYO3pHcna2Zjvg4mQ1lfjOR/4jsaQ== + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" + integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.16" + "@babel/plugin-transform-react-jsx" "^7.12.17" -"@babel/plugin-transform-react-jsx@^7.12.13", "@babel/plugin-transform-react-jsx@^7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.16.tgz#07c341e02a3e4066b00413534f30c42519923230" - integrity sha512-dNu0vAbIk8OkqJfGtYF6ADk6jagoyAl+Ks5aoltbAlfoKv8d6yooi3j+kObeSQaCj9PgN6KMZPB90wWyek5TmQ== +"@babel/plugin-transform-react-jsx@^7.12.13", "@babel/plugin-transform-react-jsx@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.17.tgz#dd2c1299f5e26de584939892de3cfc1807a38f24" + integrity sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" "@babel/helper-module-imports" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/types" "^7.12.17" "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" @@ -700,10 +707,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-runtime@^7.12.13": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.15.tgz#4337b2507288007c2b197059301aa0af8d90c085" - integrity sha512-OwptMSRnRWJo+tJ9v9wgAf72ydXWfYSXWhnQjZing8nGZSDFqU1MBleKM3+DriKkcbv7RagA8gVeB0A1PNlNow== +"@babel/plugin-transform-runtime@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.17.tgz#329cb61d293b7e60a7685b91dda7c300668cee18" + integrity sha512-s+kIJxnaTj+E9Q3XxQZ5jOo+xcogSe3V78/iFQ5RmoT0jROdpcdxhfGdq/VLqW1hFSzw6VjqN8aQqTaAMixWsw== dependencies: "@babel/helper-module-imports" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" @@ -745,6 +752,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-transform-typescript@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.17.tgz#4aa6a5041888dd2e5d316ec39212b0cf855211bb" + integrity sha512-1bIYwnhRoetxkFonuZRtDZPFEjl1l5r+3ITkxLC3mlMaFja+GQFo94b/WHEPjqWLU9Bc+W4oFZbvCGe9eYMu1g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.17" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-typescript" "^7.12.13" + "@babel/plugin-transform-unicode-escapes@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" @@ -760,19 +776,19 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/preset-env@^7.12.13": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.16.tgz#16710e3490e37764b2f41886de0a33bc4ae91082" - integrity sha512-BXCAXy8RE/TzX416pD2hsVdkWo0G+tYd16pwnRV4Sc0fRwTLRS/Ssv8G5RLXUGQv7g4FG7TXkdDJxCjQ5I+Zjg== +"@babel/preset-env@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.17.tgz#94a3793ff089c32ee74d76a3c03a7597693ebaaa" + integrity sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg== dependencies: "@babel/compat-data" "^7.12.13" - "@babel/helper-compilation-targets" "^7.12.16" + "@babel/helper-compilation-targets" "^7.12.17" "@babel/helper-module-imports" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.16" + "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-proposal-async-generator-functions" "^7.12.13" "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-dynamic-import" "^7.12.16" + "@babel/plugin-proposal-dynamic-import" "^7.12.17" "@babel/plugin-proposal-export-namespace-from" "^7.12.13" "@babel/plugin-proposal-json-strings" "^7.12.13" "@babel/plugin-proposal-logical-assignment-operators" "^7.12.13" @@ -780,7 +796,7 @@ "@babel/plugin-proposal-numeric-separator" "^7.12.13" "@babel/plugin-proposal-object-rest-spread" "^7.12.13" "@babel/plugin-proposal-optional-catch-binding" "^7.12.13" - "@babel/plugin-proposal-optional-chaining" "^7.12.16" + "@babel/plugin-proposal-optional-chaining" "^7.12.17" "@babel/plugin-proposal-private-methods" "^7.12.13" "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" "@babel/plugin-syntax-async-generators" "^7.8.0" @@ -828,7 +844,7 @@ "@babel/plugin-transform-unicode-escapes" "^7.12.13" "@babel/plugin-transform-unicode-regex" "^7.12.13" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.13" + "@babel/types" "^7.12.17" core-js-compat "^3.8.0" semver "^5.5.0" @@ -854,18 +870,27 @@ "@babel/plugin-transform-react-jsx-development" "^7.12.12" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" +"@babel/preset-typescript@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.17.tgz#8ecf04618956c268359dd9feab775dc14a666eb5" + integrity sha512-T513uT4VSThRcmWeqcLkITKJ1oGQho9wfWuhQm10paClQkp1qyd0Wf8mvC8Se7UYssMyRSj4tZYpVTkCmAK/mA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-transform-typescript" "^7.12.17" + "@babel/runtime-corejs3@^7.10.2": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.13.tgz#53d09813b7c20d616caf258e9325550ff701c039" - integrity sha512-8fSpqYRETHATtNitsCXq8QQbKJP31/KnDl2Wz2Vtui9nKzjss2ysuZtyVsWjBtvkeEFo346gkwjYPab1hvrXkQ== + version "7.12.18" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.18.tgz#e5663237e5658e4c09586995d2dd6d2c8cfd6fc0" + integrity sha512-ngR7yhNTjDxxe1VYmhqQqqXZWujGb6g0IoA4qeG6MxNGRnIw2Zo8ImY8HfaQ7l3T6GklWhdNfyhWk0C0iocdVA== dependencies: core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" - integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== + version "7.12.18" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.18.tgz#af137bd7e7d9705a412b3caaf991fe6aaa97831b" + integrity sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg== dependencies: regenerator-runtime "^0.13.4" @@ -878,25 +903,25 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" - integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13", "@babel/traverse@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.17.tgz#40ec8c7ffb502c4e54c7f95492dc11b88d718619" + integrity sha512-LGkTqDqdiwC6Q7fWSwQoas/oyiEYw6Hqjve5KOSykXkmFJFqzvGMb9niaUEag3Rlve492Mkye3gLw9FTv94fdQ== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" + "@babel/generator" "^7.12.17" "@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" + "@babel/parser" "^7.12.17" + "@babel/types" "^7.12.17" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" - integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.17.tgz#9d711eb807e0934c90b8b1ca0eb1f7230d150963" + integrity sha512-tNMDjcv/4DIcHxErTgwB9q2ZcYyN0sUfgGKUK/mm1FJK7Wz+KstoEekxrl/tBiNDgLK1HGi+sppj1An/1DR4fQ== dependencies: "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" @@ -1179,9 +1204,9 @@ integrity sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== "@popperjs/core@^2.6.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.7.0.tgz#5f7760965170f7f1e2910d2498c5be88b47a2a8c" - integrity sha512-V3WyEc8ZyAuOQ2fpFuTuYYOd2tV4NePeSdxaHYgYAOs7ERLxlcFi2XsmgI5LJFdAUmJKXsg8jaIiVTkTHQygQw== + version "2.7.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.7.2.tgz#00644825ce478065101954bdb2f7f2d062365b7f" + integrity sha512-3LC1/M2ZFcmDrSkD1byT/hZzoPehZkDucbDShLnZ+/Gwkr6CAxiQ2kWy1UtJeLGADe58hTWkx22YEHqjPGUKzw== "@rooks/use-input@^4.9.1": version "4.9.1" @@ -1210,10 +1235,10 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@testing-library/dom@^7.28.1", "@testing-library/dom@^7.29.4": - version "7.29.4" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.4.tgz#1647c2b478789621ead7a50614ad81ab5ae5b86c" - integrity sha512-CtrJRiSYEfbtNGtEsd78mk1n1v2TUbeABlNIcOCJdDfkN5/JTOwQEbbQpoSRxGqzcWPgStMvJ4mNolSuBRv1NA== +"@testing-library/dom@^7.28.1", "@testing-library/dom@^7.29.6": + version "7.29.6" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.6.tgz#eb37844fb431186db7960a7ff6749ea65a19617c" + integrity sha512-vzTsAXa439ptdvav/4lsKRcGpAQX7b6wBIqia7+iNzqGJ5zjswApxA6jDAsexrc6ue9krWcbh8o+LYkBXW+GCQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -1253,6 +1278,11 @@ dependencies: "@babel/runtime" "^7.12.5" +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + "@types/aria-query@^4.2.0": version "4.2.1" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" @@ -1291,6 +1321,29 @@ dependencies: "@babel/types" "^7.3.0" +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect-history-api-fallback@*": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz#4772b79b8b53185f0f4c9deab09236baf76ee3b4" + integrity sha512-7SxFCd+FLlxCfwVwbyPxbR4khL9aNikJhrorw8nUIOqeuooc9gifBuDQOJw5kzN7i6i3vLn9G8Wde/4QDihpYw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + "@types/eslint-scope@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" @@ -1312,6 +1365,25 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.18" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" + integrity sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.11" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" + integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -1332,6 +1404,22 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== +"@types/http-proxy-middleware@*": + version "0.19.3" + resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" + integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== + dependencies: + "@types/connect" "*" + "@types/http-proxy" "*" + "@types/node" "*" + +"@types/http-proxy@*": + version "1.17.5" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.5.tgz#c203c5e6e9dc6820d27a40eb1e511c70a220423d" + integrity sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -1351,7 +1439,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*": +"@types/jest@*", "@types/jest@^26.0.20": version "26.0.20" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== @@ -1359,7 +1447,7 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== @@ -1369,15 +1457,20 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*": - version "14.14.28" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.28.tgz#cade4b64f8438f588951a6b35843ce536853f25b" - integrity sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g== +"@types/node@*", "@types/node@^14.14.31": + version "14.14.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" + integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1394,11 +1487,59 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.1.tgz#374e31645d58cb18a07b3ecd8e9dede4deb2cccd" integrity sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/qs@*": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/react-dom@^17.0.1": + version "17.0.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.1.tgz#d92d77d020bfb083e07cc8e0ac9f933599a4d56a" + integrity sha512-yIVyopxQb8IDZ7SOHeTovurFq+fXiPICa+GV3gp0Xedsl+MwQlMLKmvrnEjFbQxjliH5YVAEWFh975eVNmKj7Q== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^17.0.2": + version "17.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.2.tgz#3de24c4efef902dd9795a49c75f760cbe4f7a5a8" + integrity sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/serve-static@*": + version "1.13.9" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" + integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== +"@types/tapable@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + "@types/testing-library__jest-dom@^5.9.1": version "5.9.5" resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz#5bf25c91ad2d7b38f264b12275e5c92a66d849b0" @@ -1406,6 +1547,50 @@ dependencies: "@types/jest" "*" +"@types/uglify-js@*": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.12.0.tgz#2bb061c269441620d46b946350c8f16d52ef37c5" + integrity sha512-sYAF+CF9XZ5cvEBkI7RtrG9g2GtMBkviTnBxYYyq+8BWvO4QtXfwwR6a2LFwCi4evMKZfpv6U43ViYvv17Wz3Q== + dependencies: + source-map "^0.6.1" + +"@types/webpack-dev-server@^3.11.1": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#f8f4dac1da226d530bd15a1d5dc34b23ba766ccb" + integrity sha512-rIb+LtUkKnh7+oIJm3WiMJONd71Q0lZuqGLcSqhZ5qjN9gV/CNmZe7Bai+brnBPZ/KVYOsr+4bFLiNZwjBicLw== + dependencies: + "@types/connect-history-api-fallback" "*" + "@types/express" "*" + "@types/http-proxy-middleware" "*" + "@types/serve-static" "*" + "@types/webpack" "*" + +"@types/webpack-env@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.0.tgz#8c0a9435dfa7b3b1be76562f3070efb3f92637b4" + integrity sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw== + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@*", "@types/webpack@^4.41.26": + version "4.41.26" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.26.tgz#27a30d7d531e16489f9c7607c747be6bc1a459ef" + integrity sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + "@types/yargs-parser@*": version "20.2.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" @@ -1418,7 +1603,21 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/experimental-utils@^4.0.1": +"@typescript-eslint/eslint-plugin@^4.15.1": + version "4.15.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.1.tgz#835f64aa0a403e5e9e64c10ceaf8d05c3f015180" + integrity sha512-yW2epMYZSpNJXZy22Biu+fLdTG8Mn6b22kR3TqblVk50HGNV8Zya15WAXuQCr8tKw4Qf1BL4QtI6kv6PCkLoJw== + dependencies: + "@typescript-eslint/experimental-utils" "4.15.1" + "@typescript-eslint/scope-manager" "4.15.1" + 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" + +"@typescript-eslint/experimental-utils@4.15.1", "@typescript-eslint/experimental-utils@^4.0.1": version "4.15.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.1.tgz#d744d1ac40570a84b447f7aa1b526368afd17eec" integrity sha512-9LQRmOzBRI1iOdJorr4jEnQhadxK4c9R2aEAsm7WE/7dq8wkKD1suaV0S/JucTL8QlYUPU1y2yjqg+aGC0IQBQ== @@ -1430,6 +1629,16 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" +"@typescript-eslint/parser@^4.15.1": + version "4.15.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.1.tgz#4c91a0602733db63507e1dbf13187d6c71a153c4" + integrity sha512-V8eXYxNJ9QmXi5ETDguB7O9diAXlIyS+e3xzLoP/oVE4WCAjssxLIa0mqCLsCGXulYJUfT+GV70Jv1vHsdKwtA== + dependencies: + "@typescript-eslint/scope-manager" "4.15.1" + "@typescript-eslint/types" "4.15.1" + "@typescript-eslint/typescript-estree" "4.15.1" + debug "^4.1.1" + "@typescript-eslint/scope-manager@4.15.1": version "4.15.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.1.tgz#f6511eb38def2a8a6be600c530c243bbb56ac135" @@ -1663,12 +1872,12 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.11.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.11.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1747,7 +1956,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3: +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -1755,6 +1964,11 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1891,6 +2105,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2047,6 +2266,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2116,7 +2340,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2128,7 +2352,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.6.4: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.6.4: version "4.16.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== @@ -2213,9 +2437,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001181: - version "1.0.30001187" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001187.tgz#5706942631f83baa5a0218b7dfa6ced29f845438" - integrity sha512-w7/EP1JRZ9552CyrThUnay2RkZ1DXxKe/Q2swTC4+LElLh9RRYrL1Z+27LlakB8kzY0fSmHw9mc7XYDUKAKWMA== + version "1.0.30001189" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001189.tgz#f8547299b9db78d3882b0dea1cae891fed1651e8" + integrity sha512-BSfxClP/UWCD0RX1h1L+vLDexNSJY7SfOtbJtW10bcnatfj3BcoietUFYNwWreOCk+SNvGUaNapGqUNPiGAiSA== capture-exit@^2.0.0: version "2.0.0" @@ -2229,7 +2453,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2259,6 +2483,21 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + 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" + optionalDependencies: + fsevents "~2.3.1" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -2503,28 +2742,39 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.8.0: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" - integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== + version "3.9.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.0.tgz#29da39385f16b71e1915565aa0385c4e0963ad56" + integrity sha512-YK6fwFjCOKWwGnjFUR3c544YsnA/7DoLL0ysncuOJ4pwbriAtOpvM2bygdlcXbvQCQZ7bBU9CL4t7tGl7ETRpQ== dependencies: - browserslist "^4.16.1" + browserslist "^4.16.3" semver "7.0.0" core-js-pure@^3.0.0: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.3.tgz#10e9e3b2592ecaede4283e8f3ad7020811587c02" - integrity sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA== + version "3.9.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.0.tgz#326cc74e1fef8b7443a6a793ddb0adfcd81f9efb" + integrity sha512-3pEcmMZC9Cq0D4ZBh3pe2HLtqxpGNJBLXF/kZ2YzK17RbKp94w0HFbdbSx8H8kAlZG5k76hvLrkPm57Uyef+kg== -core-js@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0" - integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q== +core-js@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.0.tgz#790b1bb11553a2272b36e2625c7179db345492f8" + integrity sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + cosmiconfig@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" @@ -2536,6 +2786,11 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-env@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -2671,6 +2926,11 @@ cssstyle@^2.2.0: dependencies: cssom "~0.3.6" +csstype@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" + integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -2830,6 +3090,11 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2963,9 +3228,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.649: - version "1.3.667" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.667.tgz#18ca4f243ec163c3e354e506ba22ef46d31d925e" - integrity sha512-Ot1pPtAVb5nd7jeVF651zmfLFilRVFomlDzwXmdlWe5jyzOGa6mVsQ06XnAurT7wWfg5VEIY+LopbAdD/bpo5w== + version "1.3.671" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.671.tgz#8feaed6eae42d279fa4611f58c42a5a1eb81b2a0" + integrity sha512-RTD97QkdrJKaKwRv9h/wGAaoR2lGxNXEcBXS31vjitgTPwTWAbLdS7cEsBK68eEQy7p6YyT8D5BxBEYHu2SuwQ== emittery@^0.7.1: version "0.7.2" @@ -2999,6 +3264,15 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enhanced-resolve@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + enhanced-resolve@^5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" @@ -3114,6 +3388,11 @@ escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" + integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== + eslint-config-standard@^16.0.2: version "16.0.2" resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz#71e91727ac7a203782d0a5ca4d1c462d14e234f6" @@ -3181,6 +3460,13 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + eslint-plugin-promise@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" @@ -3246,7 +3532,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.19.0: +eslint@^7.20.0: version "7.20.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== @@ -3522,6 +3808,11 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^3.1.1: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" @@ -3588,9 +3879,9 @@ fb-watchman@^2.0.0: bser "2.1.1" file-entry-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" - integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" @@ -3693,6 +3984,24 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +fork-ts-checker-webpack-plugin@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.1.0.tgz#7581a6ccd7cbbed9ecce3de64fb1f599d7a2990b" + integrity sha512-xLNufWQ1dfQUdZe48TGQlER/0OkcMnUB6lfbN9Tt13wsYyo+2DwcCbnOaPBo1PoFow/WL8pJPktGIdbJaHxAnw== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -3724,6 +4033,21 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.1.tgz#4a82f36944365e619f4454d9fff106553067b781" + integrity sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3737,7 +4061,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2: +fsevents@^2.1.2, fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -3815,7 +4139,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -3889,7 +4213,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -4039,10 +4363,10 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" -html-webpack-plugin@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.1.0.tgz#1c11bbe01ab9d1262c4b601edebcf394364b1f60" - integrity sha512-2axkp+2NHmvHUWrKe1dY4LyM3WatQEdFChr42OY7R/Ad7f0AQzaKscGCcqN/FtQBxo8rdfJP7M3RMFDttqok3g== +html-webpack-plugin@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.2.0.tgz#d675ad0027a89de6b3d9950e0b57656dcfd97fbf" + integrity sha512-0wkVlJKq7edCN793gdLgdAm5m196qI2vb5SGXy4AtGOFB/lYKyS10+3Vkhe6Bo0acddAW3QVw+0ysgWoko/IEQ== dependencies: "@types/html-minifier-terser" "^5.0.0" html-minifier-terser "^5.0.1" @@ -4181,7 +4505,7 @@ ignore@^5.1.1, ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -4313,6 +4637,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -4423,7 +4754,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -5103,6 +5434,15 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -5325,6 +5665,11 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -5363,6 +5708,13 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +memfs@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.0.tgz#f9438e622b5acd1daa8a4ae160c496fdd1325b26" + integrity sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A== + dependencies: + fs-monkey "1.0.1" + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -5371,6 +5723,14 @@ memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -5410,7 +5770,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: +micromatch@^4.0.0, micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== @@ -5457,10 +5817,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.3.5: - version "1.3.7" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.7.tgz#51848320f736bebccbe9875e38c776c364a4a8eb" - integrity sha512-NDyOUqdfKVIfWTludTcZ6JDOMsIdWgyTEECYbfvZszPpkMRyQLvukqtLr92tfukPQxVZNCKb8TkOilFBvS5RIw== +mini-css-extract-plugin@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.8.tgz#639047b78c2ee728704285aa468d2a5a8d91d566" + integrity sha512-u+2kVov/Gcs74iz+x3phEBWMAGw2djjnKfYez+Pl/b5dyXL7aM4Lp5QQtIq16CDwRHT/woUJki49gBNMhfm1eA== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" @@ -5667,7 +6027,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -6498,6 +6858,13 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" @@ -6646,7 +7013,7 @@ react-async@^10.0.1: resolved "https://registry.yarnpkg.com/react-async/-/react-async-10.0.1.tgz#575c083f808303d2f6ca52d11ec7554dbdbd9fcd" integrity sha512-ORUz5ca0B57QgBIzEZM5SuhJ6xFjkvEEs0gylLNlWf06vuVcLZsjIw3wx58jJkZG38p+0nUAxRgFW2b7mnVZzA== -react-dom@^17.0.0: +react-dom@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== @@ -6707,7 +7074,7 @@ react-popper@^2.2.4: react-fast-compare "^3.0.1" warning "^4.0.2" -react@^17.0.0: +react@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== @@ -6782,6 +7149,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + rechoir@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" @@ -7093,6 +7467,21 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sass-loader@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-11.0.1.tgz#8672f896593466573b904f47693e0695368e38c9" + integrity sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sass@^1.32.8: + version "1.32.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.8.tgz#f16a9abd8dc530add8834e506878a2808c037bdc" + integrity sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ== + dependencies: + chokidar ">=2.0.0 <4.0.0" + saxes@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -7108,6 +7497,15 @@ scheduler@^0.20.1: loose-envify "^1.1.0" object-assign "^4.1.1" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -7430,7 +7828,7 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -7738,6 +8136,11 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" @@ -7886,7 +8289,39 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -tsconfig-paths@^3.9.0: +ts-loader@^8.0.17: + version "8.0.17" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.17.tgz#98f2ccff9130074f4079fd89b946b4c637b1f2fc" + integrity sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^4.0.0" + loader-utils "^2.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +ts-node@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsconfig-paths-webpack-plugin@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.3.0.tgz#a7461723c20623ca9148621a5ce36532682ad2ff" + integrity sha512-MpQeZpwPY4gYASCUjY4yt2Zj8yv86O8f++3Ai4o0yI0fUC6G1syvnL9VuY71PBgimRYDQU47f12BEmJq9wRaSw== + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + tsconfig-paths "^3.4.0" + +tsconfig-paths@^3.4.0, tsconfig-paths@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== @@ -7984,6 +8419,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" + integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -8022,6 +8462,11 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -8053,9 +8498,9 @@ urix@^0.1.0: integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3, url-parse@^1.4.7: - version "1.5.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.0.tgz#90aba6c902aeb2d80eac17b91131c27665d5d828" - integrity sha512-9iT6N4s93SMfzunOyDPe4vo4nLcSu1yq0IQK1gURmjm8tQNlM6loiuCRrKG1hHGXfB2EWd6H4cGi7tGdaygMFw== + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -8309,10 +8754,10 @@ webpack-sources@^2.1.1: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.21.2: - version "5.22.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.22.0.tgz#8505158bc52dcbbdb01ac94796a8aed61badf11a" - integrity sha512-xqlb6r9RUXda/d9iA6P7YRTP1ChWeP50TEESKMMNIg0u8/Rb66zN9YJJO7oYgJTRyFyYi43NVC5feG45FSO1vQ== +webpack@^5.23.0: + version "5.23.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.23.0.tgz#9ed57e9a54b267b3549899271ad780cddc6ee316" + integrity sha512-RC6dwDuRxiU75F8XC4H08NtzUrMfufw5LDnO8dTtaKU2+fszEdySCgZhNwSBBn516iNaJbQI7T7OPHIgCwcJmg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.46" @@ -8467,7 +8912,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: +yaml@^1.10.0, yaml@^1.7.2: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== @@ -8521,6 +8966,11 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"