diff --git a/.eslintrc.json b/.eslintrc.json index db5ce09e..130a6079 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,6 +2,7 @@ "extends": ["react-app", "airbnb", "plugin:prettier/recommended"], // unlike .eslintignore, these values will cascade "ignorePatterns": ["node_modules/", "build/", "public/"], + "plugins": ["simple-import-sort"], "rules": { "react/jsx-filename-extension": ["error", { "extensions": [".js"] }], "import/no-extraneous-dependencies": ["error", { "packageDir": "./" }], diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..908dbbcf --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,101 @@ +name: "Build Status" + +on: + - push + - pull_request + +jobs: + lint-public-dashboard: + name: Lint Public Dashboard + runs-on: ubuntu-latest + defaults: + run: + working-directory: public-dashboard-client + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1.1.0 + with: + node-version: "12.x" + - uses: c-hive/gha-yarn-cache@v1 + - run: yarn install --frozen-lockfile + - run: yarn lint + test-public-dashboard: + name: Test Public Dashboard + runs-on: ubuntu-latest + defaults: + run: + working-directory: public-dashboard-client + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1.1.0 + with: + node-version: "12.x" + - uses: c-hive/gha-yarn-cache@v1 + - run: yarn install --frozen-lockfile + - run: yarn test --coverage + - name: Coveralls + uses: coverallsapp/github-action@master + with: + flag-name: public-dashboard-client + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel: true + path-to-lcov: public-dashboard-client/coverage/lcov.info + lint-spotlight-client: + name: Lint Spotlight Client + runs-on: ubuntu-latest + defaults: + run: + working-directory: spotlight-client + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1.1.0 + with: + node-version: "12.x" + - uses: c-hive/gha-yarn-cache@v1 + - run: yarn install --frozen-lockfile + - run: yarn lint + test-spotlight-client: + name: Test Spotlight Client + runs-on: ubuntu-latest + defaults: + run: + working-directory: spotlight-client + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1.1.0 + with: + node-version: "12.x" + - uses: c-hive/gha-yarn-cache@v1 + - run: yarn install --frozen-lockfile + - run: yarn test --coverage + - name: Coveralls + uses: coverallsapp/github-action@master + with: + flag-name: spotlight-client + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel: true + path-to-lcov: spotlight-client/coverage/lcov.info + lint-spotlight-api: + name: Lint Spotlight API + runs-on: ubuntu-latest + defaults: + run: + working-directory: spotlight-api + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1.1.0 + with: + node-version: "12.x" + - uses: c-hive/gha-yarn-cache@v1 + - run: yarn install --frozen-lockfile + - run: yarn lint + finish-coveralls: + name: Finish Coveralls + runs-on: ubuntu-latest + needs: [test-public-dashboard, test-spotlight-client] + steps: + - name: Coveralls Parallel Finished + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel-finished: true diff --git a/.github/workflows/public-dashboard-client-ci.yml b/.github/workflows/public-dashboard-client-ci.yml deleted file mode 100644 index 9374d345..00000000 --- a/.github/workflows/public-dashboard-client-ci.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: "CI: Public Dashboard API" - -on: push - -defaults: - run: - working-directory: public-dashboard-client - -jobs: - lint: - name: lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1.1.0 - with: - node-version: "12.x" - - uses: c-hive/gha-yarn-cache@v1 - - run: yarn install - - run: yarn lint - test: - name: test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1.1.0 - with: - node-version: "12.x" - - uses: c-hive/gha-yarn-cache@v1 - - run: yarn install - - run: yarn test diff --git a/.github/workflows/spotlight-api-ci.yml b/.github/workflows/spotlight-api-ci.yml deleted file mode 100644 index a2b45d6b..00000000 --- a/.github/workflows/spotlight-api-ci.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: "CI: Spotlight API" - -on: push - -defaults: - run: - working-directory: spotlight-api - -jobs: - lint: - name: lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1.1.0 - with: - node-version: "12.x" - - uses: c-hive/gha-yarn-cache@v1 - - run: yarn install - - run: yarn lint diff --git a/.gitignore b/.gitignore index 410ba9ae..ca6694e5 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ yarn-error.log* # Package files package-lock.json + +# Typescript build artifacts +*.tsbuildinfo diff --git a/README.md b/README.md index dc02a120..6d9a4e77 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This repository contains npm packages related to our Spotlight data publishing product, as well as some shared configuration and tooling that involves multiple packages. -![CI: Public Dashboard API](https://github.com/Recidiviz/public-dashboard/workflows/CI:%20Public%20Dashboard%20API/badge.svg) ![CI: Spotlight API](https://github.com/Recidiviz/public-dashboard/workflows/CI:%20Spotlight%20API/badge.svg) +![Build Status](https://github.com/Recidiviz/public-dashboard/workflows/Build%20Status/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/Recidiviz/public-dashboard/badge.svg?branch=master)](https://coveralls.io/github/Recidiviz/public-dashboard?branch=master) ## Packages in this repository @@ -10,12 +10,16 @@ More information about how to use each individual package can be found in their ### [Public Dashboard Client](public-dashboard-client/) -A React application for the Spotlight website +A React application for the original Spotlight website (North Dakota only) ### [Spotlight API](spotlight-api/) A thin Node/Express backend that serves data for the Spotlight website. +### [Spotlight Client](spotlight-client/) + +A React application for the next-generation Spotlight website (not yet launched). + ## Development ### Getting set up @@ -74,5 +78,5 @@ In addition, there are some conventions you should follow when setting up your n - The package name should be the same as the directory name - `yarn dev` should execute the main entry point for development (e.g., starting a development server) -- `yarn lint` should run your lint tests +- `yarn lint` should run your static checks (linting, type-checking) - `yarn test` should run your JS tests, if you have any (which you should!) diff --git a/package.json b/package.json index 7525b752..d347f54d 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,9 @@ "private": true, "repository": "git@github.com:Recidiviz/public-dashboard.git", "workspaces": [ + "public-dashboard-client", "spotlight-api", - "public-dashboard-client" + "spotlight-client" ], "author": "Recidiviz ", "license": "GNU General Public License v3", @@ -14,9 +15,11 @@ "dev:pdclient": "yarn workspace public-dashboard-client run dev" }, "devDependencies": { + "coveralls": "^3.1.0", "eslint-config-airbnb": "^18.2.0", "eslint-config-prettier": "^6.11.0", "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-simple-import-sort": "^5.0.3", "husky": ">=4", "lint-staged": ">=10", "npm-run-all": "^4.1.5", @@ -28,8 +31,10 @@ } }, "lint-staged": { + "*.{ts,tsx}": "bash -c tsc", "*.{js,jsx,ts,tsx,css,scss}": "eslint --fix", "*.json": "prettier --write", + "**/*.{ts,tsx}": "bash -c tsc", "**/*.{js,jsx,ts,tsx,css,scss}": "eslint --fix", "**/*.json": "prettier --write" } diff --git a/public-dashboard-client/README.md b/public-dashboard-client/README.md index c668aaa0..c7578d2d 100644 --- a/public-dashboard-client/README.md +++ b/public-dashboard-client/README.md @@ -1,8 +1,6 @@ # Public Dashboard Client -This package is a React client application for the Spotlight public dashboard website. It was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -![CI: Public Dashboard API](https://github.com/Recidiviz/public-dashboard/workflows/CI:%20Public%20Dashboard%20API/badge.svg) +This package is a React client application for the original Spotlight public dashboard website (North Dakota only). It was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Development diff --git a/spotlight-api/README.md b/spotlight-api/README.md index b4a0f594..1c310c17 100644 --- a/spotlight-api/README.md +++ b/spotlight-api/README.md @@ -2,8 +2,6 @@ This package is a Node/Express server application that provides a thin API backend for clients consuming public metrics from the Recidiviz data pipeline. -![CI: Spotlight API](https://github.com/Recidiviz/public-dashboard/workflows/CI:%20Spotlight%20API/badge.svg) - ## Development ### Getting set up diff --git a/spotlight-client/.eslintrc.json b/spotlight-client/.eslintrc.json new file mode 100644 index 00000000..5fc9ffbe --- /dev/null +++ b/spotlight-client/.eslintrc.json @@ -0,0 +1,53 @@ +{ + "env": { + "browser": true, + "jest": true + }, + "extends": [ + // explicitly extending the base config so we don't override its own "extends" field + "../.eslintrc.json", + // From @typescript-eslint/eslint-plugin + "plugin:@typescript-eslint/recommended", + // From eslint-config-prettier + "prettier/@typescript-eslint" + ], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "rules": { + // This is a living list! If an eslint rule does more harm than good, just + // add it below to override it. Write a comment above each rule explaining + // why the exception is made, so we know whether to keep it in the future. + + // the bare eslint rule breaks in typescript + // https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-use-before-define.md#how-to-use + "no-use-before-define": "off", + "@typescript-eslint/no-use-before-define": ["error"], + + // don't require extensions for typescript modules + "import/extensions": [ + "error", + "always", + { "js": "never", "ts": "never", "tsx": "never" } + ], + + // support typescript as well as javascript file extensions + "react/jsx-filename-extension": [ + "error", + { "extensions": [".tsx", ".js"] } + ], + + // We use TypeScript props interfaces, which is mostly redundant with prop + // types. + "react/prop-types": "off" + }, + "settings": { + "import/resolver": { + // use /tsconfig.json + "typescript": { + // always try to resolve types under `@types` directory + // even it doesn't contain any source code, like `@types/unist` + "alwaysTryTypes": true + } + } + } +} diff --git a/spotlight-client/README.md b/spotlight-client/README.md new file mode 100644 index 00000000..b5450698 --- /dev/null +++ b/spotlight-client/README.md @@ -0,0 +1,54 @@ +# Spotlight Client + +This package is a React client application for the next-generation Spotlight public data publishing website (not yet launched). It was bootstrapped with [Create React App](https://github.com/facebook/create-react-app) and is written in [TypeScript](https://www.typescriptlang.org/docs). + +## Development + +### Getting set up + +If you have followed the [setup instructions](../README.md#getting-set-up) in the root directory, you should be ready to go. You should be able to test your development environment via: + + `yarn test` + `yarn lint` + +We suggest installing a linting package for your preferred code editor that hooks into [eslint](#yarn-lint). We recommend [linter-eslint](https://atom.io/packages/linter-eslint) if you're using Atom. + +### Running the application locally + +`yarn dev` will start a Webpack development server on port `3000` and open the homepage in your browser. + +The development servers will remain active until you either close your terminal or shut it down using `control+c`. + +**Note:** The frontend server does not need to be restarted when frontend source code is modified. The assets will automatically be recompiled and the browser will be refreshed. + +## Deploys + +Not yet implemented! Instructions will be found here once a process is in place. + +## Available Scripts + +Besides the scripts mentioned above for running and deploying the app, you can also run: + +### `yarn test` + +Launches the test runner in the interactive watch mode. + +We use [`@testing-library/react`](https://testing-library.com/docs/react-testing-library/intro) for React component tests. + +See the [Create React App docs](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn lint` + +Runs Typescript and ESLint checks against the package to check for issues in type usage or code style. + +Eslint rules are configurable in `.eslintrc.json`, which inherits from the root `../.eslintrc.json` and extends it with settings specific to this package. Any change to this file should be accompanied with an explanation for the change and why it should be merged. + +Typescript rules are configurable in `./tsconfig.json`; this file was originally created by Create React App but it is safe to edit as needed. + +You can also run either TS or ESLint individually; while there are not predefined scripts for this, you can inspect the definition of `lint` in `package.json` to see the individual commands that are run, and you can pass either of them to `yarn run` as needed. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +This package was bootstrapped with Create React App, which provides the option to `eject` its build tooling and configuration, allowing for full customization. See [the Create React App docs](https://create-react-app.dev/docs/available-scripts#npm-run-eject) for more information. diff --git a/spotlight-client/package.json b/spotlight-client/package.json new file mode 100644 index 00000000..e552fa8f --- /dev/null +++ b/spotlight-client/package.json @@ -0,0 +1,49 @@ +{ + "name": "spotlight-client", + "description": "A public-facing dashboard to help educate citizens and build accountability", + "version": "0.1.0", + "private": true, + "repository": "git@github.com:Recidiviz/public-dashboard.git", + "author": "Recidiviz ", + "license": "GNU General Public License v3", + "scripts": { + "build": "react-scripts build", + "dev": "react-scripts start", + "eject": "react-scripts eject", + "lint": "tsc && eslint '**/*.{js,ts,tsx}'", + "test": "react-scripts test" + }, + "dependencies": { + "@types/react": "^16.9.0", + "@types/react-dom": "^16.9.0", + "react": "^16.13.1", + "react-app-polyfill": "^1.0.6", + "react-dom": "^16.13.1", + "react-scripts": "3.4.3", + "typescript": "^4.0.0" + }, + "devDependencies": { + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.3.2", + "@testing-library/user-event": "^7.1.2", + "@types/jest": "^24.0.0", + "@types/node": "^12.0.0", + "@typescript-eslint/eslint-plugin": "^4.4.0", + "@typescript-eslint/parser": "^4.4.0", + "eslint-import-resolver-typescript": "^2.3.0" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all", + "ie 11" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version", + "ie 11" + ] + } +} diff --git a/spotlight-client/public/android-chrome-192x192.png b/spotlight-client/public/android-chrome-192x192.png new file mode 100755 index 00000000..d89b73f9 Binary files /dev/null and b/spotlight-client/public/android-chrome-192x192.png differ diff --git a/spotlight-client/public/android-chrome-512x512.png b/spotlight-client/public/android-chrome-512x512.png new file mode 100755 index 00000000..70a7f841 Binary files /dev/null and b/spotlight-client/public/android-chrome-512x512.png differ diff --git a/spotlight-client/public/apple-touch-icon.png b/spotlight-client/public/apple-touch-icon.png new file mode 100755 index 00000000..fd552746 Binary files /dev/null and b/spotlight-client/public/apple-touch-icon.png differ diff --git a/spotlight-client/public/favicon-16x16.png b/spotlight-client/public/favicon-16x16.png new file mode 100755 index 00000000..a9a273d6 Binary files /dev/null and b/spotlight-client/public/favicon-16x16.png differ diff --git a/spotlight-client/public/favicon-32x32.png b/spotlight-client/public/favicon-32x32.png new file mode 100755 index 00000000..f3a3f431 Binary files /dev/null and b/spotlight-client/public/favicon-32x32.png differ diff --git a/spotlight-client/public/favicon.ico b/spotlight-client/public/favicon.ico new file mode 100755 index 00000000..7881d9e8 Binary files /dev/null and b/spotlight-client/public/favicon.ico differ diff --git a/spotlight-client/public/index.html b/spotlight-client/public/index.html new file mode 100644 index 00000000..36481534 --- /dev/null +++ b/spotlight-client/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + Spotlight by Recidiviz + + + +
+ + + diff --git a/spotlight-client/public/manifest.json b/spotlight-client/public/manifest.json new file mode 100644 index 00000000..45e94640 --- /dev/null +++ b/spotlight-client/public/manifest.json @@ -0,0 +1,20 @@ +{ + "short_name": "Spotlight", + "name": "Spotlight by Recidiviz", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/spotlight-client/public/robots.txt b/spotlight-client/public/robots.txt new file mode 100644 index 00000000..e9e57dc4 --- /dev/null +++ b/spotlight-client/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/spotlight-client/src/App.test.tsx b/spotlight-client/src/App.test.tsx new file mode 100644 index 00000000..c51484f2 --- /dev/null +++ b/spotlight-client/src/App.test.tsx @@ -0,0 +1,27 @@ +// Recidiviz - a data platform for criminal justice reform +// Copyright (C) 2020 Recidiviz, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// ============================================================================= + +import React from "react"; +import { render } from "@testing-library/react"; +import App from "./App"; + +test("does not explode", () => { + const { getByText } = render(); + // seems like a pretty safe bet this word will always be there somewhere! + const websiteName = getByText(/spotlight/i); + expect(websiteName).toBeInTheDocument(); +}); diff --git a/spotlight-client/src/App.tsx b/spotlight-client/src/App.tsx new file mode 100644 index 00000000..8ff382ac --- /dev/null +++ b/spotlight-client/src/App.tsx @@ -0,0 +1,30 @@ +// Recidiviz - a data platform for criminal justice reform +// Copyright (C) 2020 Recidiviz, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// ============================================================================= + +import React from "react"; + +function App(): JSX.Element { + return ( +
+
+

Spotlight

+
+
+ ); +} + +export default App; diff --git a/spotlight-client/src/index.tsx b/spotlight-client/src/index.tsx new file mode 100644 index 00000000..fab86209 --- /dev/null +++ b/spotlight-client/src/index.tsx @@ -0,0 +1,29 @@ +// Recidiviz - a data platform for criminal justice reform +// Copyright (C) 2020 Recidiviz, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// ============================================================================= + +import "react-app-polyfill/ie11"; +import "react-app-polyfill/stable"; +import React from "react"; +import ReactDOM from "react-dom"; +import App from "./App"; + +ReactDOM.render( + + + , + document.getElementById("root") +); diff --git a/spotlight-client/src/react-app-env.d.ts b/spotlight-client/src/react-app-env.d.ts new file mode 100644 index 00000000..9e3c0dac --- /dev/null +++ b/spotlight-client/src/react-app-env.d.ts @@ -0,0 +1,18 @@ +// Recidiviz - a data platform for criminal justice reform +// Copyright (C) 2020 Recidiviz, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// ============================================================================= + +/// diff --git a/spotlight-client/src/setupTests.ts b/spotlight-client/src/setupTests.ts new file mode 100644 index 00000000..ad75c99b --- /dev/null +++ b/spotlight-client/src/setupTests.ts @@ -0,0 +1,22 @@ +// Recidiviz - a data platform for criminal justice reform +// Copyright (C) 2020 Recidiviz, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// ============================================================================= + +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import "@testing-library/jest-dom/extend-expect"; diff --git a/spotlight-client/tsconfig.json b/spotlight-client/tsconfig.json new file mode 100644 index 00000000..ca3e4c93 --- /dev/null +++ b/spotlight-client/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Target language and language features + "allowJs": true, + "esModuleInterop": true, + "jsx": "react", + "module": "esnext", + "target": "es5", + + // what to typecheck + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + + // where to typecheck + "resolveJsonModule": true, + "skipLibCheck": true, + + // output + "incremental": true, + "isolatedModules": true, + "lib": ["dom", "dom.iterable", "esnext"], + "moduleResolution": "node", + "noEmit": true + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index 9750e4ca..a78f10ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1484,11 +1484,32 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + "@reach/auto-id@0.10.5": version "0.10.5" resolved "https://registry.yarnpkg.com/@reach/auto-id/-/auto-id-0.10.5.tgz#fa78c71ce2f565ebed1ad91a8d9a685176d23c48" @@ -1849,6 +1870,11 @@ "@testing-library/dom" "^6.15.0" "@types/testing-library__react" "^9.1.2" +"@testing-library/user-event@^7.1.2": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-7.2.1.tgz#2ad4e844175a3738cb9e7064be5ea070b8863a1c" + integrity sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA== + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -1937,11 +1963,23 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@^24.0.0": + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" + integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== + dependencies: + jest-diff "^24.3.0" + "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": version "7.0.6" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1952,6 +1990,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== +"@types/node@^12.0.0": + version "12.12.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.66.tgz#5a2650f5c25e9f24d8f65d06f39a4650249bd5fc" + integrity sha512-VwJbrfz53hQo/3uUhan/ZQJD9AQSSbmODtbtFhPmT07KTIp9zw2dVZhoV0TezZv2NZMuFdKHY6z9SosB4Vtj3A== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1967,7 +2010,7 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== -"@types/react-dom@*": +"@types/react-dom@*", "@types/react-dom@^16.9.0": version "16.9.8" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== @@ -1982,6 +2025,14 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@^16.9.0": + version "16.9.51" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.51.tgz#f8aa51ffa9996f1387f63686696d9b59713d2b60" + integrity sha512-lQa12IyO+DMlnSZ3+AGHRUiUcpK47aakMMoBG8f7HGxJT8Yfe+WE128HIXaHOHVPReAW0oDS3KAI0JI2DDe1PQ== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -2044,6 +2095,19 @@ regexpp "^3.0.0" tsutils "^3.17.1" +"@typescript-eslint/eslint-plugin@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.4.0.tgz#0321684dd2b902c89128405cf0385e9fe8561934" + integrity sha512-RVt5wU9H/2H+N/ZrCasTXdGbUTkbf7Hfi9eLiA8vPQkzUJ/bLDCC3CsoZioPrNcnoyN8r0gT153dC++A4hKBQQ== + dependencies: + "@typescript-eslint/experimental-utils" "4.4.0" + "@typescript-eslint/scope-manager" "4.4.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + "@typescript-eslint/experimental-utils@2.34.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" @@ -2054,6 +2118,18 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" +"@typescript-eslint/experimental-utils@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.4.0.tgz#62a05d3f543b8fc5dec4982830618ea4d030e1a9" + integrity sha512-01+OtK/oWeSJTjQcyzDztfLF1YjvKpLFo+JZmurK/qjSRcyObpIecJ4rckDoRCSh5Etw+jKfdSzVEHevh9gJ1w== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.4.0" + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/typescript-estree" "4.4.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + "@typescript-eslint/parser@^2.10.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" @@ -2064,6 +2140,29 @@ "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" +"@typescript-eslint/parser@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.4.0.tgz#65974db9a75f23b036f17b37e959b5f99b659ec0" + integrity sha512-yc14iEItCxoGb7W4Nx30FlTyGpU9r+j+n1LUK/exlq2eJeFxczrz/xFRZUk2f6yzWfK+pr1DOTyQnmDkcC4TnA== + dependencies: + "@typescript-eslint/scope-manager" "4.4.0" + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/typescript-estree" "4.4.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.4.0.tgz#2f3dd27692a12cc9a046a90ba6a9d8cb7731190a" + integrity sha512-r2FIeeU1lmW4K3CxgOAt8djI5c6Q/5ULAgdVo9AF3hPMpu0B14WznBAtxrmB/qFVbVIB6fSx2a+EVXuhSVMEyA== + dependencies: + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/visitor-keys" "4.4.0" + +"@typescript-eslint/types@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.4.0.tgz#63440ef87a54da7399a13bdd4b82060776e9e621" + integrity sha512-nU0VUpzanFw3jjX+50OTQy6MehVvf8pkqFcURPAE06xFNFenMj1GPEI6IESvp7UOHAnq+n/brMirZdR+7rCrlA== + "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" @@ -2077,6 +2176,28 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.0.tgz#16a2df7c16710ddd5406b32b86b9c1124b1ca526" + integrity sha512-Fh85feshKXwki4nZ1uhCJHmqKJqCMba+8ZicQIhNi5d5jSQFteWiGeF96DTjO8br7fn+prTP+t3Cz/a/3yOKqw== + dependencies: + "@typescript-eslint/types" "4.4.0" + "@typescript-eslint/visitor-keys" "4.4.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.4.0.tgz#0a9118344082f14c0f051342a74b42dfdb012640" + integrity sha512-oBWeroUZCVsHLiWRdcTXJB7s1nB3taFY8WGvS23tiAlT6jXVvsdAV4rs581bgdEjOhn43q6ro7NkOiLKu6kFqA== + dependencies: + "@typescript-eslint/types" "4.4.0" + eslint-visitor-keys "^2.0.0" + "@w11r/use-breakpoint@^1.7.0": version "1.7.0" resolved "https://registry.yarnpkg.com/@w11r/use-breakpoint/-/use-breakpoint-1.7.0.tgz#3a03cb912ef71b7cd5e6e7bf2f6c0aec69fd0cba" @@ -2533,6 +2654,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -3885,6 +4011,17 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +coveralls@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" + integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ== + dependencies: + js-yaml "^3.13.1" + lcov-parse "^1.0.0" + log-driver "^1.2.7" + minimist "^1.2.5" + request "^2.88.2" + crc32-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4" @@ -4771,6 +4908,13 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -5230,6 +5374,17 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.13.1" +eslint-import-resolver-typescript@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.3.0.tgz#0870988098bc6c6419c87705e6b42bee89425445" + integrity sha512-MHSXvmj5e0SGOOBhBbt7C+fWj1bJbtSYFAD85Xeg8nvUtuooTod2HQb8bfhE9f5QyyNxEfgzqOYFCvmdDIcCuw== + dependencies: + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + eslint-loader@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-3.0.3.tgz#e018e3d2722381d982b1201adb56819c73b480ca" @@ -5319,6 +5474,11 @@ eslint-plugin-react@7.19.0: string.prototype.matchall "^4.0.2" xregexp "^4.3.0" +eslint-plugin-simple-import-sort@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz#9ae258ddada6efffc55e47a134afbd279eb31fc6" + integrity sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ== + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -5354,6 +5514,11 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "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@^6.6.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" @@ -5667,6 +5832,18 @@ fast-glob@^2.0.2: merge2 "^1.2.3" micromatch "^3.1.10" +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5682,6 +5859,13 @@ fast-text-encoding@^1.0.0: resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== +fastq@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + dependencies: + reusify "^1.0.4" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -6134,7 +6318,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== @@ -6206,6 +6390,18 @@ globby@8.0.2: pify "^3.0.0" slash "^1.0.0" +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -6729,6 +6925,11 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + immer@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" @@ -7367,7 +7568,7 @@ jest-date-mock@^1.0.8: resolved "https://registry.yarnpkg.com/jest-date-mock/-/jest-date-mock-1.0.8.tgz#13468c0352c5a3614c6b356dbc6b88eb37d9e0b3" integrity sha512-0Lyp+z9xvuNmLbK+5N6FOhSiBeux05Lp5bbveFBmYo40Aggl2wwxFoIrZ+rOWC8nDNcLeBoDd2miQdEDSf3iQw== -jest-diff@^24.0.0, jest-diff@^24.9.0: +jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -8014,6 +8215,11 @@ lazystream@^1.0.0: dependencies: readable-stream "^2.0.5" +lcov-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= + left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -8198,6 +8404,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + log-symbols@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" @@ -8374,7 +8585,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3: +merge2@^1.2.3, merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -10927,7 +11138,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0: +request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -11023,7 +11234,7 @@ resolve@1.15.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -11062,6 +11273,11 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rework-visit@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" @@ -11124,6 +11340,11 @@ run-async@^2.2.0, run-async@^2.4.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -12369,6 +12590,16 @@ ts-pnp@^1.1.6: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== +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== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" @@ -12450,6 +12681,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5" + integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg== + ua-parser-js@^0.7.18: version "0.7.22" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3"