diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..aaac325 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.md b/.github/ISSUE_TEMPLATE/BUG_REPORT.md new file mode 100644 index 0000000..1ae2138 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +labels: 'bug: pending triage' +--- + +## Bug description + + +## Reproduction + + +## Environment + +- tasuku version: +- Operating System: +- Node version: +- Package manager (npm/yarn/pnpm) and version: diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md new file mode 100644 index 0000000..1f74613 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md @@ -0,0 +1,33 @@ +--- +name: Feature request +about: Suggest an idea for this project +labels: 'feature request' +--- + +## Is your feature request related to a problem? + + +## Describe the solution you'd like + + +## Describe alternatives you've considered + + +## Additional context + diff --git a/.github/example-1.gif b/.github/example-1.gif new file mode 100644 index 0000000..dbe1c75 Binary files /dev/null and b/.github/example-1.gif differ diff --git a/.github/example-2.gif b/.github/example-2.gif new file mode 100644 index 0000000..ddb9a04 Binary files /dev/null and b/.github/example-2.gif differ diff --git a/.github/example-3.gif b/.github/example-3.gif new file mode 100644 index 0000000..d9b86b0 Binary files /dev/null and b/.github/example-3.gif differ diff --git a/.github/example-4.gif b/.github/example-4.gif new file mode 100644 index 0000000..c03fd68 Binary files /dev/null and b/.github/example-4.gif differ diff --git a/.github/example-5.gif b/.github/example-5.gif new file mode 100644 index 0000000..12da6bd Binary files /dev/null and b/.github/example-5.gif differ diff --git a/.github/example-6.gif b/.github/example-6.gif new file mode 100644 index 0000000..51b5a24 Binary files /dev/null and b/.github/example-6.gif differ diff --git a/.github/task-states.png b/.github/task-states.png new file mode 100644 index 0000000..62987d9 Binary files /dev/null and b/.github/task-states.png differ diff --git a/.github/task-title-status-output.png b/.github/task-title-status-output.png new file mode 100644 index 0000000..34a9732 Binary files /dev/null and b/.github/task-title-status-output.png differ diff --git a/.github/tasuku.png b/.github/tasuku.png new file mode 100644 index 0000000..5586108 Binary files /dev/null and b/.github/tasuku.png differ diff --git a/.github/tasuku.svg b/.github/tasuku.svg new file mode 100644 index 0000000..cf2fc57 --- /dev/null +++ b/.github/tasuku.svg @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..849c7a2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: Release + +on: + push: + branches: master + +jobs: + release: + name: Release + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: 14.x + - name: Install dependencies + run: npx ci + - name: Build + run: npm run build + - name: Lint + run: npm run lint + - name: Test + run: npm run test --if-present + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: npx semantic-release diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..9125a66 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,32 @@ +name: Test + +on: + push: + branches: [develop] + pull_request: + branches: [master, develop] + +jobs: + test: + name: Test + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [12.x, 14.x] + + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: Install dependencies + run: npx ci + - name: Build + run: npm run build + - name: Lint + run: npm run lint + - name: Test + run: npm run test --if-present diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dc584c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# macOS +.DS_Store + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Dependency directories +node_modules/ + +# Output of 'npm pack' +*.tgz + +# dotenv environment variables file +.env +.env.test + +# VSCode +.vscode + +# Distribution +dist diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..9a0c3d3 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v14.15.4 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..51e4fd8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Hiroki Osame + +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/README.md b/README.md new file mode 100644 index 0000000..864dc6f --- /dev/null +++ b/README.md @@ -0,0 +1,319 @@ + +

+ +
+ The minimal task runner +

+ +### Features +- Task list with dynamic states +- Parallel & nestable tasks +- Unopinionated +- Type-safe + +Support this project by starring and sharing it. [Follow me](https://github.com/privatenumber) to see what other cool projects I'm working on. + +## Install +```sh +npm i tasuku +``` + +## Usage +### Task list +Call `task(taskTitle, taskFunction)` to start a task and display it in a task list in the terminal. + +```ts +import task from 'tasuku' + +task('Task 1', async () => { + await someAsyncTask() +}) + +task('Task 2', async () => { + await someAsyncTask() +}) + +task('Task 3', async () => { + await someAsyncTask() +}) +``` + + + +#### Task states +- **◽️ Pending** The task is queued and has not started +- **🔅 Loading** The task is running +- **⚠️ Warning** The task completed with a warning +- **❌ Error** The task exited with an error +- **✅ Success** The task completed without error + + + +### Unopinionated +You can call `task()` from anywhere. There are no requirements. It is designed to be as unopinionated as possible not to interfere with your code. + +The tasks will be displayed in the terminal in a consolidated list. + +You can change the title of the task by calling `setTitle()`. +```ts +import task from 'tasuku' + +task('Task 1', async () => { + await someAsyncTask() +}) + +... + +someOtherCode() + +... + +task('Task 2', async ({ setTitle }) => { + await someAsyncTask() + + setTitle('Task 2 complete') +}) +``` + + + +### Task return values +The return value of a task will be stored in the output `.result` property. + +If using TypeScript, the type of `.result` will be inferred from the task function. + +```ts +const myTask = await task('Task 2', async () => { + await someAsyncTask() + + return 'Success' +}) + +console.log(myTask.result) // 'Success' +``` + +### Nesting tasks +Tasks can be nested indefinitely. Nested tasks will be stacked hierarchically in the task list. +```ts +await task('Do task', async ({ task }) => { + await someAsyncTask() + + await task('Do another task', async ({ task }) => { + await someAsyncTask() + + await task('And another', async () => { + await someAsyncTask() + }) + }) +}) +``` + + + +### Collapsing nested tasks +Call `.clear()` on the returned task API to collapse the nested task. +```ts +await task('Do task', async ({ task }) => { + await someAsyncTask() + + const nestedTask = await task('Do another task', async ({ task }) => { + await someAsyncTask() + }) + + nestedTask.clear() +}) +``` + + + +### Grouped tasks +Tasks can be grouped with `task.group()`. Pass in a function that returns an array of tasks to run them sequentially. + +This is useful for displaying a queue of tasks that have yet to run. + +```ts +const groupedTasks = await task.group(task => [ + task('Task 1', async () => { + await someAsyncTask() + + return 'one' + }), + + task('Waiting for Task 1', async ({ setTitle }) => { + setTitle('Task 2 running...') + + await someAsyncTask() + + setTitle('Task 2 complete') + + return 'two' + }), + + ... +]) + +console.log(groupedTasks.results) // ['one', 'two'] +``` + + + +### Running tasks in parallel +You can run tasks in parallel by passing in `{ concurrency: n }` as the second argument in `task.group()`. + +```ts +const api = await task.group(task => [ + task( + 'Task 1', + async () => await someAsyncTask(), + ), + + task( + 'Task 2', + async () => await someAsyncTask(), + ), + ... +], { + concurrency: 2 // Number of tasks to run at a time +}) + +api.clear() // Clear output +``` + + + +Alternatively, you can also use the native `Promise.all()` if you prefer. The advantage of using `task.group()` is that you can limit concurrency, displays queued tasks as pending, and it returns an API to easily clear the results. + +```ts +// No API +await Promise.all([ + task( + 'Task 1', + async () => await someAsyncTask(), + ), + + task( + 'Task 2', + async () => await someAsyncTask(), + ), + ... +]) +``` + +## API + +### task(taskTitle, taskFunction) + +Returns a Promise that resolves with object: +```ts +{ + // The result from taskFunction + result: any, + + // Invoke to clear the results from the terminal + clear: () => void, +} +``` + +#### taskTitle +Type: `string` + +Required: true + +The name of the task displayed. + +#### taskFunction +Type: +```ts +({ + task: taskFunction, + setTitle: (title: string) => void, + setStatus: (status: string) => void, + setOutput: (error: string | { message: string }) => void, + setWarning: (warning: Error | string) => void, + setError: (error: Error | string) => void, +}) => Promise +``` + +Required: true + +The task function. The return value will be stored in the `.result` property of the `task()` output object. + + +#### task +A task function to use for nesting. + +#### setTitle() +Call with a string to change the task title. + +#### setStatus() +Call with a string to set the status of the task. See image below. + +#### setOutput() +Call with a string to set the output of the task. See image below. + +#### setWarning() +Call with a string or Error instance to put the task in a warning state. + +#### setError() +Call with a string or Error instance to put the task in an error state. Tasks automatically go into an error state when it catches an error in the task. + + + + +### task.group(createTaskFunctions, options) +Returns a Promise that resolves with object: +```ts +{ + // The results from the taskFunctions + results: any[], + + // Invoke to clear the results from the terminal + clear: () => void, +} +``` + +#### createTaskFunctions +Type: `(task) => Task[]` + +Required: true + +A function that returns all the tasks you want to group in an array. + +#### options + +Directly passed into [`p-map`](https://github.com/sindresorhus/p-map). + +##### concurrency +Type: `number` (Integer) + +Default: `1` + +Number of tasks to run at a time. + +##### stopOnError +Type: `boolean` + +Default: `true` + +When set to `false`, instead of stopping when a task fails, it will wait for all the tasks to finish and then reject with an aggregated error containing all the errors from the rejected promises. + +## FAQ + +### What does "Tasuku" mean? +_Tasuku_ or タスク is the phonetic Japanese pronounciation of the word "task". + + +### Why did you make this? + +For writing scripts or CLI tools. _Tasuku_ is a great way to convey the state of the tasks that are running in your script without being imposing about the way you write your code. + +Major shoutout to [listr](https://github.com/SamVerschueren/listr) + [listr2](https://github.com/cenk1cenk2/listr2) for being the motivation and visual inspiration for _Tasuku_, and for being my go-to task runner for a long time. I made _Tasuku_ because I eventually found that they were too structured and declarative for my needs. + +Big thanks to [ink](https://github.com/vadimdemedes/ink) for doing all the heavy lifting for rendering interfaces in the terminal. Implementing a dynamic task list that doesn't interfere with `console.logs()` wouldn't have been so easy without it. + +### Doesn't the usage of nested `task` functions violate ESLint's [no-shadow](https://eslint.org/docs/rules/no-shadow)? +Yes, but it should be fine as you don't need access to other `task` functions aside from the immediate one. + +Put `task` in the allow list: +- `"no-shadow": ["error", { "allow": ["task"] }]` +- `"@typescript-eslint/no-shadow": ["error", { "allow": ["task"] }]` diff --git a/jest.config.json b/jest.config.json new file mode 100644 index 0000000..c3ce2e2 --- /dev/null +++ b/jest.config.json @@ -0,0 +1,6 @@ +{ + "preset": "es-jest", + "transformIgnorePatterns": [ + "node_modules/.pnpm(?!/(p-map|aggregate-error|indent-string|clean-stack|escape-string-regexp))" + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a4eb3da --- /dev/null +++ b/package.json @@ -0,0 +1,71 @@ +{ + "name": "tasuku", + "version": "0.0.0-semantic-release", + "description": "タスク — The minimal task runner", + "keywords": [ + "simple", + "minimal", + "task", + "runner", + "cli" + ], + "license": "MIT", + "repository": "privatenumber/tasuku", + "funding": "https://github.com/privatenumber/tasuku?sponsor=1", + "author": { + "name": "Hiroki Osame", + "email": "hiroki.osame@gmail.com" + }, + "files": [ + "bin", + "dist" + ], + "main": "./dist/index.js", + "scripts": { + "lint": "eslint .", + "test": "jest", + "typecheck": "tsc --noEmit", + "build": "rm -rf dist && tsup src/index.ts --dts --minify --no-splitting --external 'yoga-layout-prebuilt'" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,ts,tsx}": "eslint", + "*.{ts,tsx}": "npm run typecheck" + }, + "dependencies": { + "yoga-layout-prebuilt": "1.10.0" + }, + "devDependencies": { + "@pvtnbr/eslint-config-react": "^0.1.15", + "@types/jest": "^26.0.23", + "@types/node": "^15.6.1", + "@types/react": "^17.0.4", + "dts": "^0.1.1", + "es-jest": "^1.2.0", + "eslint": "^7.24.0", + "esno": "^0.5.0", + "husky": "^4.3.8", + "ink": "^3.0.8", + "ink-task-list": "^1.1.0", + "jest": "^27.0.3", + "lint-staged": "^10.5.4", + "p-map": "^5.0.0", + "react": "^17.0.2", + "tsup": "^4.11.1", + "typescript": "^4.2.4", + "valtio": "^1.0.5" + }, + "eslintConfig": { + "extends": "@pvtnbr/eslint-config-react", + "rules": { + "react/prop-types": "off", + "@typescript-eslint/no-shadow": ["error", { + "allow": ["task"] + }] + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..3eeb529 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4999 @@ +lockfileVersion: 5.3 + +specifiers: + '@pvtnbr/eslint-config-react': ^0.1.15 + '@types/jest': ^26.0.23 + '@types/node': ^15.6.1 + '@types/react': ^17.0.4 + dts: ^0.1.1 + es-jest: ^1.2.0 + eslint: ^7.24.0 + esno: ^0.5.0 + husky: ^4.3.8 + ink: ^3.0.8 + ink-task-list: ^1.1.0 + jest: ^27.0.3 + lint-staged: ^10.5.4 + p-map: ^5.0.0 + react: ^17.0.2 + tsup: ^4.11.1 + typescript: ^4.2.4 + valtio: ^1.0.5 + yoga-layout-prebuilt: 1.10.0 + +dependencies: + yoga-layout-prebuilt: 1.10.0 + +devDependencies: + '@pvtnbr/eslint-config-react': 0.1.16_eslint@7.27.0+typescript@4.3.2 + '@types/jest': 26.0.23 + '@types/node': 15.6.1 + '@types/react': 17.0.8 + dts: 0.1.1 + es-jest: 1.2.0 + eslint: 7.27.0 + esno: 0.5.0 + husky: 4.3.8 + ink: 3.0.8_@types+react@17.0.8+react@17.0.2 + ink-task-list: 1.1.0_ink@3.0.8+react@17.0.2 + jest: 27.0.3 + lint-staged: 10.5.4 + p-map: 5.0.0 + react: 17.0.2 + tsup: 4.11.1_typescript@4.3.2 + typescript: 4.3.2 + valtio: 1.0.5_react@17.0.2 + +packages: + + /@babel/code-frame/7.12.11: + resolution: {integrity: sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8=} + dependencies: + '@babel/highlight': 7.14.0 + dev: true + + /@babel/code-frame/7.12.13: + resolution: {integrity: sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==} + dependencies: + '@babel/highlight': 7.14.0 + dev: true + + /@babel/compat-data/7.14.4: + resolution: {integrity: sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==} + dev: true + + /@babel/core/7.14.3: + resolution: {integrity: sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/generator': 7.14.3 + '@babel/helper-compilation-targets': 7.14.4_@babel+core@7.14.3 + '@babel/helper-module-transforms': 7.14.2 + '@babel/helpers': 7.14.0 + '@babel/parser': 7.14.4 + '@babel/template': 7.12.13 + '@babel/traverse': 7.14.2 + '@babel/types': 7.14.4 + convert-source-map: 1.7.0 + debug: 4.3.1 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + semver: 6.3.0 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/eslint-parser/7.14.3_@babel+core@7.14.3+eslint@7.27.0: + resolution: {integrity: sha1-jyksr4PdLXs2T5OP5wdIBq9tcOo=} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': '>=7.11.0' + eslint: '>=7.5.0' + dependencies: + '@babel/core': 7.14.3 + eslint: 7.27.0 + eslint-scope: 5.1.1 + eslint-visitor-keys: 2.1.0 + semver: 6.3.0 + dev: true + + /@babel/generator/7.14.3: + resolution: {integrity: sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==} + dependencies: + '@babel/types': 7.14.4 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + + /@babel/helper-compilation-targets/7.14.4_@babel+core@7.14.3: + resolution: {integrity: sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.14.4 + '@babel/core': 7.14.3 + '@babel/helper-validator-option': 7.12.17 + browserslist: 4.16.6 + semver: 6.3.0 + dev: true + + /@babel/helper-function-name/7.14.2: + resolution: {integrity: sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==} + dependencies: + '@babel/helper-get-function-arity': 7.12.13 + '@babel/template': 7.12.13 + '@babel/types': 7.14.4 + dev: true + + /@babel/helper-get-function-arity/7.12.13: + resolution: {integrity: sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@babel/helper-member-expression-to-functions/7.13.12: + resolution: {integrity: sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@babel/helper-module-imports/7.13.12: + resolution: {integrity: sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@babel/helper-module-transforms/7.14.2: + resolution: {integrity: sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==} + dependencies: + '@babel/helper-module-imports': 7.13.12 + '@babel/helper-replace-supers': 7.14.4 + '@babel/helper-simple-access': 7.13.12 + '@babel/helper-split-export-declaration': 7.12.13 + '@babel/helper-validator-identifier': 7.14.0 + '@babel/template': 7.12.13 + '@babel/traverse': 7.14.2 + '@babel/types': 7.14.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression/7.12.13: + resolution: {integrity: sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@babel/helper-plugin-utils/7.13.0: + resolution: {integrity: sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==} + dev: true + + /@babel/helper-replace-supers/7.14.4: + resolution: {integrity: sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==} + dependencies: + '@babel/helper-member-expression-to-functions': 7.13.12 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/traverse': 7.14.2 + '@babel/types': 7.14.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access/7.13.12: + resolution: {integrity: sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@babel/helper-split-export-declaration/7.12.13: + resolution: {integrity: sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@babel/helper-validator-identifier/7.14.0: + resolution: {integrity: sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==} + dev: true + + /@babel/helper-validator-option/7.12.17: + resolution: {integrity: sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==} + dev: true + + /@babel/helpers/7.14.0: + resolution: {integrity: sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==} + dependencies: + '@babel/template': 7.12.13 + '@babel/traverse': 7.14.2 + '@babel/types': 7.14.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.14.0: + resolution: {integrity: sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==} + dependencies: + '@babel/helper-validator-identifier': 7.14.0 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.14.4: + resolution: {integrity: sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.14.3: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.14.3: + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.14.3: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.14.3: + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.14.3: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.14.3: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.14.3: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.14.3: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.14.3: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.14.3: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.14.3: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-top-level-await/7.12.13_@babel+core@7.14.3: + resolution: {integrity: sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-typescript/7.12.13_@babel+core@7.14.3: + resolution: {integrity: sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/template/7.12.13: + resolution: {integrity: sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==} + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/parser': 7.14.4 + '@babel/types': 7.14.4 + dev: true + + /@babel/traverse/7.14.2: + resolution: {integrity: sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==} + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/generator': 7.14.3 + '@babel/helper-function-name': 7.14.2 + '@babel/helper-split-export-declaration': 7.12.13 + '@babel/parser': 7.14.4 + '@babel/types': 7.14.4 + debug: 4.3.1 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.14.4: + resolution: {integrity: sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==} + dependencies: + '@babel/helper-validator-identifier': 7.14.0 + to-fast-properties: 2.0.0 + dev: true + + /@bcoe/v8-coverage/0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@eslint/eslintrc/0.4.1: + resolution: {integrity: sha1-RCdjuIzsvj7g7Hym1t1haFUMvxQ=} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.1 + espree: 7.3.1 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.14.1 + minimatch: 3.0.4 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@istanbuljs/load-nyc-config/1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema/0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console/27.0.2: + resolution: {integrity: sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + chalk: 4.1.1 + jest-message-util: 27.0.2 + jest-util: 27.0.2 + slash: 3.0.0 + dev: true + + /@jest/core/27.0.3: + resolution: {integrity: sha512-rN8lr/OJ8iApcQUh4khnMaOCVX4oRnLwy2tPW3Vh70y62K8Da8fhkxMUq0xX9VPa4+yWUm0tGc/jUSJi+Jzuwg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.0.2 + '@jest/reporters': 27.0.2 + '@jest/test-result': 27.0.2 + '@jest/transform': 27.0.2 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + ansi-escapes: 4.3.2 + chalk: 4.1.1 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.6 + jest-changed-files: 27.0.2 + jest-config: 27.0.3 + jest-haste-map: 27.0.2 + jest-message-util: 27.0.2 + jest-regex-util: 27.0.1 + jest-resolve: 27.0.2 + jest-resolve-dependencies: 27.0.3 + jest-runner: 27.0.3 + jest-runtime: 27.0.3 + jest-snapshot: 27.0.2 + jest-util: 27.0.2 + jest-validate: 27.0.2 + jest-watcher: 27.0.2 + micromatch: 4.0.4 + p-each-series: 2.2.0 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /@jest/environment/27.0.3: + resolution: {integrity: sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/fake-timers': 27.0.3 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + jest-mock: 27.0.3 + dev: true + + /@jest/fake-timers/27.0.3: + resolution: {integrity: sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + '@sinonjs/fake-timers': 7.1.2 + '@types/node': 15.6.1 + jest-message-util: 27.0.2 + jest-mock: 27.0.3 + jest-util: 27.0.2 + dev: true + + /@jest/globals/27.0.3: + resolution: {integrity: sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.0.3 + '@jest/types': 27.0.2 + expect: 27.0.2 + dev: true + + /@jest/reporters/27.0.2: + resolution: {integrity: sha512-SVQjew/kafNxSN1my4praGQP+VPVGHsU8zqiEDppLvq6j1lryIjdNb9P+bZSsKeifU4bIoaPnf9Ui0tK9WOpFA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.0.2 + '@jest/test-result': 27.0.2 + '@jest/transform': 27.0.2 + '@jest/types': 27.0.2 + chalk: 4.1.1 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.1.7 + graceful-fs: 4.2.6 + istanbul-lib-coverage: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.0 + istanbul-reports: 3.0.2 + jest-haste-map: 27.0.2 + jest-resolve: 27.0.2 + jest-util: 27.0.2 + jest-worker: 27.0.2 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 7.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/source-map/27.0.1: + resolution: {integrity: sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.6 + source-map: 0.6.1 + dev: true + + /@jest/test-result/27.0.2: + resolution: {integrity: sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.0.2 + '@jest/types': 27.0.2 + '@types/istanbul-lib-coverage': 2.0.3 + collect-v8-coverage: 1.0.1 + dev: true + + /@jest/test-sequencer/27.0.3: + resolution: {integrity: sha512-DcLTzraZ8xLr5fcIl+CF14vKeBBpBrn55wFxI9Ju+dhEBdjRdJQ/Z/pLkMehkPZWIQ+rR23J8e+wFDkfjree0Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.0.2 + graceful-fs: 4.2.6 + jest-haste-map: 27.0.2 + jest-runtime: 27.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/transform/27.0.2: + resolution: {integrity: sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.14.3 + '@jest/types': 27.0.2 + babel-plugin-istanbul: 6.0.0 + chalk: 4.1.1 + convert-source-map: 1.7.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.6 + jest-haste-map: 27.0.2 + jest-regex-util: 27.0.1 + jest-util: 27.0.2 + micromatch: 4.0.4 + pirates: 4.0.1 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types/26.6.2: + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 3.0.1 + '@types/node': 15.6.1 + '@types/yargs': 15.0.13 + chalk: 4.1.1 + dev: true + + /@jest/types/27.0.2: + resolution: {integrity: sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 3.0.1 + '@types/node': 15.6.1 + '@types/yargs': 16.0.3 + chalk: 4.1.1 + dev: true + + /@nodelib/fs.scandir/2.1.4: + resolution: {integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.4 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.4: + resolution: {integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.6: + resolution: {integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.4 + fastq: 1.11.0 + dev: true + + /@pvtnbr/eslint-config-base/0.1.16_eslint@7.27.0: + resolution: {integrity: sha1-r2CD8nhS/ArJVc45JwakM37+f98=} + peerDependencies: + eslint: ^7.15.0 + dependencies: + confusing-browser-globals: 1.0.10 + eslint: 7.27.0 + eslint-plugin-eslint-comments: 3.2.0_eslint@7.27.0 + eslint-plugin-import: 2.23.3_eslint@7.27.0 + eslint-plugin-jsonc: 1.2.1_eslint@7.27.0 + eslint-plugin-no-use-extend-native: 0.5.0 + eslint-plugin-node: 11.1.0_eslint@7.27.0 + eslint-plugin-promise: 4.3.1 + eslint-plugin-regexp: 0.4.3_eslint@7.27.0 + eslint-plugin-unicorn: 28.0.2_eslint@7.27.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@pvtnbr/eslint-config-react/0.1.16_eslint@7.27.0+typescript@4.3.2: + resolution: {integrity: sha1-S9DtcJieDz5AHVUdNSWIUZsg9js=} + peerDependencies: + eslint: ^7.15.0 + dependencies: + '@pvtnbr/eslint-config-typescript': 0.1.16_eslint@7.27.0+typescript@4.3.2 + eslint: 7.27.0 + eslint-plugin-react: 7.23.2_eslint@7.27.0 + eslint-plugin-react-hooks: 4.2.0_eslint@7.27.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@pvtnbr/eslint-config-typescript/0.1.16_eslint@7.27.0+typescript@4.3.2: + resolution: {integrity: sha1-JeYVS8xm98Amj22315IMhCN55a0=} + peerDependencies: + eslint: ^7.15.0 + dependencies: + '@pvtnbr/eslint-config-base': 0.1.16_eslint@7.27.0 + '@typescript-eslint/eslint-plugin': 4.25.0_ec7770e83475322b368bff30b543badb + '@typescript-eslint/parser': 4.25.0_eslint@7.27.0+typescript@4.3.2 + eslint: 7.27.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@sinonjs/commons/1.8.3: + resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers/7.1.2: + resolution: {integrity: sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==} + dependencies: + '@sinonjs/commons': 1.8.3 + dev: true + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true + + /@types/babel__core/7.1.14: + resolution: {integrity: sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==} + dependencies: + '@babel/parser': 7.14.4 + '@babel/types': 7.14.4 + '@types/babel__generator': 7.6.2 + '@types/babel__template': 7.4.0 + '@types/babel__traverse': 7.11.1 + dev: true + + /@types/babel__generator/7.6.2: + resolution: {integrity: sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@types/babel__template/7.4.0: + resolution: {integrity: sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==} + dependencies: + '@babel/parser': 7.14.4 + '@babel/types': 7.14.4 + dev: true + + /@types/babel__traverse/7.11.1: + resolution: {integrity: sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==} + dependencies: + '@babel/types': 7.14.4 + dev: true + + /@types/graceful-fs/4.1.5: + resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} + dependencies: + '@types/node': 15.6.1 + dev: true + + /@types/istanbul-lib-coverage/2.0.3: + resolution: {integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==} + dev: true + + /@types/istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + dev: true + + /@types/istanbul-reports/3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + dependencies: + '@types/istanbul-lib-report': 3.0.0 + dev: true + + /@types/jest/26.0.23: + resolution: {integrity: sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==} + dependencies: + jest-diff: 26.6.2 + pretty-format: 26.6.2 + dev: true + + /@types/json-schema/7.0.7: + resolution: {integrity: sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=} + dev: true + + /@types/json5/0.0.29: + resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} + dev: true + + /@types/node/15.6.1: + resolution: {integrity: sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==} + dev: true + + /@types/normalize-package-data/2.4.0: + resolution: {integrity: sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=} + dev: true + + /@types/parse-json/4.0.0: + resolution: {integrity: sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=} + dev: true + + /@types/prettier/2.2.3: + resolution: {integrity: sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==} + dev: true + + /@types/prop-types/15.7.3: + resolution: {integrity: sha1-KrDV2i5YFflLC51LldHl8kOrLKc=} + dev: true + + /@types/react/17.0.8: + resolution: {integrity: sha1-/nbjug+7VgJwQRD9HjA1zzlHeOM=} + dependencies: + '@types/prop-types': 15.7.3 + '@types/scheduler': 0.16.1 + csstype: 3.0.8 + dev: true + + /@types/scheduler/0.16.1: + resolution: {integrity: sha1-GIRSBehv8AOFF6q3oYpiprn3EnU=} + dev: true + + /@types/stack-utils/2.0.0: + resolution: {integrity: sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==} + dev: true + + /@types/yargs-parser/20.2.0: + resolution: {integrity: sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==} + dev: true + + /@types/yargs/15.0.13: + resolution: {integrity: sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==} + dependencies: + '@types/yargs-parser': 20.2.0 + dev: true + + /@types/yargs/16.0.3: + resolution: {integrity: sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==} + dependencies: + '@types/yargs-parser': 20.2.0 + dev: true + + /@types/yoga-layout/1.9.2: + resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} + + /@typescript-eslint/eslint-plugin/4.25.0_ec7770e83475322b368bff30b543badb: + resolution: {integrity: sha1-2CZXtqtMqkw/iI/5IxdfrcLzHyo=} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/experimental-utils': 4.25.0_eslint@7.27.0+typescript@4.3.2 + '@typescript-eslint/parser': 4.25.0_eslint@7.27.0+typescript@4.3.2 + '@typescript-eslint/scope-manager': 4.25.0 + debug: 4.3.1 + eslint: 7.27.0 + functional-red-black-tree: 1.0.1 + lodash: 4.17.21 + regexpp: 3.1.0 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.3.2 + typescript: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils/4.25.0_eslint@7.27.0+typescript@4.3.2: + resolution: {integrity: sha1-sv68+nFdLBgG/V8DNRk6bNJw31Q=} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' + dependencies: + '@types/json-schema': 7.0.7 + '@typescript-eslint/scope-manager': 4.25.0 + '@typescript-eslint/types': 4.25.0 + '@typescript-eslint/typescript-estree': 4.25.0_typescript@4.3.2 + eslint: 7.27.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser/4.25.0_eslint@7.27.0+typescript@4.3.2: + resolution: {integrity: sha1-ayy2KFqj1Vv7JjxlBzkJGw8ZrOs=} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 4.25.0 + '@typescript-eslint/types': 4.25.0 + '@typescript-eslint/typescript-estree': 4.25.0_typescript@4.3.2 + debug: 4.3.1 + eslint: 7.27.0 + typescript: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/4.25.0: + resolution: {integrity: sha1-nYalvMRu9ArNA9ha1OkI5aq41Mo=} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': 4.25.0 + '@typescript-eslint/visitor-keys': 4.25.0 + dev: true + + /@typescript-eslint/types/4.25.0: + resolution: {integrity: sha1-DkRKXF48Itf/peFuDmBRCz3lr4c=} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dev: true + + /@typescript-eslint/typescript-estree/4.25.0_typescript@4.3.2: + resolution: {integrity: sha1-lC5OJYiHNr/1s2DZsLYeAT0M+iU=} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 4.25.0 + '@typescript-eslint/visitor-keys': 4.25.0 + debug: 4.3.1 + globby: 11.0.3 + is-glob: 4.0.1 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.3.2 + typescript: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/visitor-keys/4.25.0: + resolution: {integrity: sha1-hj5+0j2kKHxbRpsTIjJV0P3mqqc=} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': 4.25.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /abab/2.0.5: + resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} + dev: true + + /acorn-globals/6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: true + + /acorn-jsx/5.3.1_acorn@7.4.1: + resolution: {integrity: sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn/8.3.0: + resolution: {integrity: sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /aggregate-error/3.1.0: + resolution: {integrity: sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /aggregate-error/4.0.0: + resolution: {integrity: sha512-8DGp7zUt1E9k0NE2q4jlXHk+V3ORErmwolEdRz9iV+LKJ40WhMHh92cxAvhqV2I+zEn/gotIoqoMs0NjF3xofg==} + engines: {node: '>=12'} + dependencies: + clean-stack: 4.1.0 + indent-string: 5.0.0 + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv/8.5.0: + resolution: {integrity: sha1-aVUoJ0vLWvyGVEaqJ1SEBJoYrks=} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-colors/4.1.1: + resolution: {integrity: sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=} + engines: {node: '>=6'} + dev: true + + /ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex/4.1.0: + resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} + engines: {node: '>=6'} + dev: true + + /ansi-regex/5.0.0: + resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /any-promise/1.3.0: + resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=} + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.0 + dev: true + + /argparse/1.0.10: + resolution: {integrity: sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /array-includes/3.1.3: + resolution: {integrity: sha1-x/YZs4KtKvr1Mmzd/cCvxhr3aQo=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.3 + get-intrinsic: 1.1.1 + is-string: 1.0.6 + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.flat/1.2.4: + resolution: {integrity: sha1-bvY4tDMSvUAbTGGZ/ex+LcnpoSM=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.3 + dev: true + + /array.prototype.flatmap/1.2.4: + resolution: {integrity: sha1-lM/UfMFVbsB0fZf3x3OMWBIgBMk=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.3 + function-bind: 1.1.1 + dev: true + + /astral-regex/1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + dev: true + + /astral-regex/2.0.0: + resolution: {integrity: sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=} + engines: {node: '>=8'} + dev: true + + /asynckit/0.4.0: + resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} + dev: true + + /auto-bind/4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: true + + /babel-jest/27.0.2_@babel+core@7.14.3: + resolution: {integrity: sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.14.3 + '@jest/transform': 27.0.2 + '@jest/types': 27.0.2 + '@types/babel__core': 7.1.14 + babel-plugin-istanbul: 6.0.0 + babel-preset-jest: 27.0.1_@babel+core@7.14.3 + chalk: 4.1.1 + graceful-fs: 4.2.6 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-istanbul/6.0.0: + resolution: {integrity: sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.13.0 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 4.0.3 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist/27.0.1: + resolution: {integrity: sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.12.13 + '@babel/types': 7.14.4 + '@types/babel__core': 7.1.14 + '@types/babel__traverse': 7.11.1 + dev: true + + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.14.3: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.14.3 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.14.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.14.3 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.14.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.14.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.14.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.14.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.14.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.14.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.14.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.14.3 + '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.14.3 + dev: true + + /babel-preset-jest/27.0.1_@babel+core@7.14.3: + resolution: {integrity: sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.3 + babel-plugin-jest-hoist: 27.0.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.3 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browser-process-hrtime/1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: true + + /browserslist/4.16.6: + resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001233 + colorette: 1.2.2 + electron-to-chromium: 1.3.743 + escalade: 3.1.1 + node-releases: 1.1.72 + dev: true + + /bser/2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-from/1.1.1: + resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} + dev: true + + /cac/6.7.3: + resolution: {integrity: sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg==} + engines: {node: '>=8'} + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase/6.2.0: + resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite/1.0.30001233: + resolution: {integrity: sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg==} + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.1: + resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /char-regex/1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + + /chokidar/3.5.1: + resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.1 + normalize-path: 3.0.0 + readdirp: 3.5.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /ci-info/2.0.0: + resolution: {integrity: sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=} + dev: true + + /ci-info/3.2.0: + resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} + dev: true + + /cjs-module-lexer/1.2.1: + resolution: {integrity: sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==} + dev: true + + /clean-regexp/1.0.0: + resolution: {integrity: sha1-jffHquUf02h06PjQW5GAvBGj/tc=} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /clean-stack/2.2.0: + resolution: {integrity: sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=} + engines: {node: '>=6'} + dev: true + + /clean-stack/4.1.0: + resolution: {integrity: sha512-dxXQYI7mfQVcaF12s6sjNFoZ6ZPDQuBBLp3QJ5156k9EvUFClUoZ11fo8HnLQO241DDVntHEug8MOuFO5PSfRg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + + /cli-boxes/2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + dev: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-spinners/2.6.0: + resolution: {integrity: sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==} + engines: {node: '>=6'} + dev: true + + /cli-truncate/2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.2 + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.2 + strip-ansi: 6.0.0 + wrap-ansi: 7.0.0 + dev: true + + /co/4.6.0: + resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /code-excerpt/3.0.0: + resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} + engines: {node: '>=10'} + dependencies: + convert-to-spaces: 1.0.2 + dev: true + + /collect-v8-coverage/1.0.1: + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette/1.2.2: + resolution: {integrity: sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=} + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander/4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /commander/6.2.1: + resolution: {integrity: sha1-B5LraC37wyWZm7K4T93duhEKxzw=} + engines: {node: '>= 6'} + dev: true + + /comment-parser/1.1.5: + resolution: {integrity: sha1-RTYn749n287ETnmpvVuqN/C86bI=} + engines: {node: '>= 10.0.0'} + dev: true + + /compare-versions/3.6.0: + resolution: {integrity: sha1-GlaJkTaF5ah2N7jT/8p1UU7EHWI=} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /confusing-browser-globals/1.0.10: + resolution: {integrity: sha1-MNHn89G4grJexJM9HRraw1PSClk=} + dev: true + + /convert-source-map/1.7.0: + resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /convert-to-spaces/1.0.2: + resolution: {integrity: sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=} + engines: {node: '>= 4'} + dev: true + + /cosmiconfig/7.0.0: + resolution: {integrity: sha1-75tE13OVnK5j3ezRIt4jhTtg+NM=} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha1-9zqFudXUHQRVUcF34ogtSshXKKY=} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /cssom/0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: true + + /cssom/0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: true + + /cssstyle/2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: true + + /csstype/3.0.8: + resolution: {integrity: sha1-0iZqeScp+yJ80hb7Vy9Dco4a00A=} + dev: true + + /data-urls/2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.5.0 + dev: true + + /debug/2.6.9: + resolution: {integrity: sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=} + dependencies: + ms: 2.0.0 + dev: true + + /debug/3.2.7: + resolution: {integrity: sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=} + dependencies: + ms: 2.1.3 + dev: true + + /debug/4.3.1: + resolution: {integrity: sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /decimal.js/10.2.1: + resolution: {integrity: sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==} + dev: true + + /dedent/0.7.0: + resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=} + dev: true + + /deep-is/0.1.3: + resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} + dev: true + + /deepmerge/4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} + dev: true + + /define-properties/1.1.3: + resolution: {integrity: sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=} + engines: {node: '>= 0.4'} + dependencies: + object-keys: 1.1.1 + dev: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} + engines: {node: '>=0.4.0'} + dev: true + + /detect-newline/3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + + /diff-sequences/26.6.2: + resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} + engines: {node: '>= 10.14.2'} + dev: true + + /diff-sequences/27.0.1: + resolution: {integrity: sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine/2.1.0: + resolution: {integrity: sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /domexception/2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + dependencies: + webidl-conversions: 5.0.0 + dev: true + + /dts/0.1.1: + resolution: {integrity: sha1-IFSAvC+IZhO91bZVQQefqoyD/5Q=} + dev: true + + /electron-to-chromium/1.3.743: + resolution: {integrity: sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==} + dev: true + + /emittery/0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=} + dependencies: + once: 1.4.0 + dev: true + + /enquirer/2.3.6: + resolution: {integrity: sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.1 + dev: true + + /error-ex/1.3.2: + resolution: {integrity: sha1-tKxAZIEH/c3PriQvQovqihTU8b8=} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract/1.18.3: + resolution: {integrity: sha1-JcTDOAonqiA8RLK2hbupTaMbY+A=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + is-callable: 1.2.3 + is-negative-zero: 2.0.1 + is-regex: 1.1.3 + is-string: 1.0.6 + object-inspect: 1.10.3 + object-keys: 1.1.1 + object.assign: 4.1.2 + string.prototype.trimend: 1.0.4 + string.prototype.trimstart: 1.0.4 + unbox-primitive: 1.0.1 + dev: true + + /es-jest/1.2.0: + resolution: {integrity: sha512-6p1ekiZyku8YTulvjC2prPdY64tKlPcn42U9aP8cUj/SUR4D0Wb15GdifvDdrdLhz/QP5hLcJ25yxd2K2mLceA==} + engines: {node: '>=10'} + dependencies: + esbuild: 0.9.7 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.3 + is-date-object: 1.0.4 + is-symbol: 1.0.4 + dev: true + + /esbuild-register/2.5.0: + resolution: {integrity: sha512-5a8W3rH7IQbIPR9pPXJFkC3+CRMtm/OSpBz3hkWUUU63oPZ3NU6dVDGfaIjKnRizCTIRoGjNE6KEDt5p1sLwEw==} + dependencies: + esbuild: 0.11.23 + jsonc-parser: 3.0.0 + dev: true + + /esbuild/0.11.23: + resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} + hasBin: true + requiresBuild: true + dev: true + + /esbuild/0.9.7: + resolution: {integrity: sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==} + hasBin: true + requiresBuild: true + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=} + engines: {node: '>=10'} + dev: true + + /escape-string-regexp/5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /escodegen/2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.2.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + + /eslint-import-resolver-node/0.3.4: + resolution: {integrity: sha1-hf+oGULCUBLYIxCW3fZ5wDBCxxc=} + dependencies: + debug: 2.6.9 + resolve: 1.20.0 + dev: true + + /eslint-module-utils/2.6.1: + resolution: {integrity: sha1-tRvh5HPdDeHF6mOOIkKcJJDqgjM=} + engines: {node: '>=4'} + dependencies: + debug: 3.2.7 + pkg-dir: 2.0.0 + dev: true + + /eslint-plugin-es/3.0.1_eslint@7.27.0: + resolution: {integrity: sha1-dafN/czdwFiZNK7rOEF18iHFeJM=} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 7.27.0 + eslint-utils: 2.1.0 + regexpp: 3.1.0 + dev: true + + /eslint-plugin-eslint-comments/3.2.0_eslint@7.27.0: + resolution: {integrity: sha1-nhzXtEE1JquzE5MwcderoFyhL/o=} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 7.27.0 + ignore: 5.1.8 + dev: true + + /eslint-plugin-import/2.23.3_eslint@7.27.0: + resolution: {integrity: sha1-ihsHMon/8DxK8PBLbflWt9Rj4ZE=} + engines: {node: '>=4'} + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + dependencies: + array-includes: 3.1.3 + array.prototype.flat: 1.2.4 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 7.27.0 + eslint-import-resolver-node: 0.3.4 + eslint-module-utils: 2.6.1 + find-up: 2.1.0 + has: 1.0.3 + is-core-module: 2.4.0 + minimatch: 3.0.4 + object.values: 1.1.4 + pkg-up: 2.0.0 + read-pkg-up: 3.0.0 + resolve: 1.20.0 + tsconfig-paths: 3.9.0 + dev: true + + /eslint-plugin-jsonc/1.2.1_eslint@7.27.0: + resolution: {integrity: sha1-l0yNJzd4UiQwju+ISIve0GKLHxQ=} + peerDependencies: + eslint: ^5.0.0 || >=6.0.0 + dependencies: + eslint: 7.27.0 + eslint-utils: 2.1.0 + jsonc-eslint-parser: 1.0.1 + natural-compare: 1.4.0 + dev: true + + /eslint-plugin-no-use-extend-native/0.5.0: + resolution: {integrity: sha1-1oVeOoI6gZtGfPffVq3KV950G/k=} + engines: {node: '>=6.0.0'} + dependencies: + is-get-set-prop: 1.0.0 + is-js-type: 2.0.0 + is-obj-prop: 1.0.0 + is-proto-prop: 2.0.0 + dev: true + + /eslint-plugin-node/11.1.0_eslint@7.27.0: + resolution: {integrity: sha1-yVVEQW7kraJnQKMEdO78VALcZx0=} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + dependencies: + eslint: 7.27.0 + eslint-plugin-es: 3.0.1_eslint@7.27.0 + eslint-utils: 2.1.0 + ignore: 5.1.8 + minimatch: 3.0.4 + resolve: 1.20.0 + semver: 6.3.0 + dev: true + + /eslint-plugin-promise/4.3.1: + resolution: {integrity: sha1-YUhd8qNZ4DFJ/a/AposOAwrSrEU=} + engines: {node: '>=6'} + dev: true + + /eslint-plugin-react-hooks/4.2.0_eslint@7.27.0: + resolution: {integrity: sha1-jCKcJo1GiVYzTJQ7tF/IYCgPVVY=} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + dependencies: + eslint: 7.27.0 + dev: true + + /eslint-plugin-react/7.23.2_eslint@7.27.0: + resolution: {integrity: sha1-LSKRsPlcA3KLVYafARAikOeS1JQ=} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + dependencies: + array-includes: 3.1.3 + array.prototype.flatmap: 1.2.4 + doctrine: 2.1.0 + eslint: 7.27.0 + has: 1.0.3 + jsx-ast-utils: 3.2.0 + minimatch: 3.0.4 + object.entries: 1.1.4 + object.fromentries: 2.0.4 + object.values: 1.1.4 + prop-types: 15.7.2 + resolve: 2.0.0-next.3 + string.prototype.matchall: 4.0.5 + dev: true + + /eslint-plugin-regexp/0.4.3_eslint@7.27.0: + resolution: {integrity: sha1-NWo0BMQX/gJU0EDPJMWSRLanjDk=} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + comment-parser: 1.1.5 + eslint: 7.27.0 + eslint-utils: 2.1.0 + jsdoctypeparser: 9.0.0 + regexpp: 3.1.0 + dev: true + + /eslint-plugin-unicorn/28.0.2_eslint@7.27.0: + resolution: {integrity: sha1-q5iE664EWQ7NnBwpQzDYiadLfDc=} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7.17.0' + dependencies: + ci-info: 2.0.0 + clean-regexp: 1.0.0 + eslint: 7.27.0 + eslint-template-visitor: 2.3.2_eslint@7.27.0 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + import-modules: 2.1.0 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.23 + reserved-words: 0.1.2 + safe-regex: 2.1.1 + semver: 7.3.5 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-template-visitor/2.3.2_eslint@7.27.0: + resolution: {integrity: sha1-tS+W/zEedzo0XXkFPMx4J1u8Rj0=} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + '@babel/core': 7.14.3 + '@babel/eslint-parser': 7.14.3_@babel+core@7.14.3+eslint@7.27.0 + eslint: 7.27.0 + eslint-visitor-keys: 2.1.0 + esquery: 1.4.0 + multimap: 1.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-utils/2.1.0: + resolution: {integrity: sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-visitor-keys/1.3.0: + resolution: {integrity: sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=} + engines: {node: '>=10'} + dev: true + + /eslint/7.27.0: + resolution: {integrity: sha1-ZloVBtj5VlXJJ02EvXj3FmsH6cc=} + engines: {node: ^10.12.0 || >=12.0.0} + hasBin: true + dependencies: + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.1 + ajv: 6.12.6 + chalk: 4.1.1 + cross-spawn: 7.0.3 + debug: 4.3.1 + doctrine: 3.0.0 + enquirer: 2.3.6 + escape-string-regexp: 4.0.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + espree: 7.3.1 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 13.9.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.1 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.0.4 + natural-compare: 1.4.0 + optionator: 0.9.1 + progress: 2.0.3 + regexpp: 3.1.0 + semver: 7.3.5 + strip-ansi: 6.0.0 + strip-json-comments: 3.1.1 + table: 6.7.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /esno/0.5.0: + resolution: {integrity: sha512-r0tsflar7RB918JCjTNyU2QWfgyH2jgfAzHK1tABr3A5y84ruS86JanVHc6wove/V5I98soLZbg8Foso1dqCMA==} + hasBin: true + dependencies: + esbuild: 0.9.7 + esbuild-register: 2.5.0 + dev: true + + /espree/7.3.1: + resolution: {integrity: sha1-8t8zC3Usb1UBn4vYm3ZgA5wbu7Y=} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.1_acorn@7.4.1 + eslint-visitor-keys: 1.3.0 + dev: true + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery/1.4.0: + resolution: {integrity: sha1-IUj/w4uC6McFff7UhCWz5h8PJKU=} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.2.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha1-eteWTWeauyi+5yzsY3WLHF0smSE=} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.2.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.2.0: + resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} + engines: {node: '>=4.0'} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=} + engines: {node: '>=0.10.0'} + dev: true + + /execa/4.1.0: + resolution: {integrity: sha1-TlSRrRVy8vF6d9OIxshXE1sihHo=} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.3 + strip-final-newline: 2.0.0 + dev: true + + /execa/5.0.1: + resolution: {integrity: sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.3 + strip-final-newline: 2.0.0 + dev: true + + /exit/0.1.2: + resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=} + engines: {node: '>= 0.8.0'} + dev: true + + /expect/27.0.2: + resolution: {integrity: sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + ansi-styles: 5.2.0 + jest-get-type: 27.0.1 + jest-matcher-utils: 27.0.2 + jest-message-util: 27.0.2 + jest-regex-util: 27.0.1 + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=} + dev: true + + /fast-glob/3.2.5: + resolution: {integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==} + engines: {node: '>=8'} + dependencies: + '@nodelib/fs.stat': 2.0.4 + '@nodelib/fs.walk': 1.2.6 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.4 + picomatch: 2.3.0 + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} + dev: true + + /fastq/1.11.0: + resolution: {integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==} + dependencies: + reusify: 1.0.4 + dev: true + + /fb-watchman/2.0.1: + resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} + dependencies: + bser: 2.1.1 + dev: true + + /figures/3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha1-IRst2WWcsDlLBz5zI6w8kz1SICc=} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up/2.1.0: + resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + dev: true + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /find-versions/4.0.0: + resolution: {integrity: sha1-PFflc7+XdpuMuN8Wk0tieRXaSWU=} + engines: {node: '>=10'} + dependencies: + semver-regex: 3.1.2 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha1-YbAzgwKy/p+Vfcwy/CqH8cMEixE=} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.1.1 + rimraf: 3.0.2 + dev: true + + /flatted/3.1.1: + resolution: {integrity: sha1-xLSJ6ACW2d8d/JfHmHGup8YXxGk=} + dev: true + + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.31 + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=} + dev: true + + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-intrinsic/1.1.1: + resolution: {integrity: sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + dev: true + + /get-own-enumerable-property-symbols/3.0.2: + resolution: {integrity: sha1-tf3nfyLL4185C04ImSLFC85u9mQ=} + dev: true + + /get-package-type/0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-set-props/0.1.0: + resolution: {integrity: sha1-mYR1wXhEVobQsyJG2l3428++jqM=} + engines: {node: '>=0.10.0'} + dev: true + + /get-stream/5.2.0: + resolution: {integrity: sha1-SWaheV7lrOZecGxLe+txJX1uItM=} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.1 + dev: true + + /glob/7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals/12.4.0: + resolution: {integrity: sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=} + engines: {node: '>=8'} + dependencies: + type-fest: 0.8.1 + dev: true + + /globals/13.9.0: + resolution: {integrity: sha1-S/K/Y1szShc/sdr3xeayGOzcBss=} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby/11.0.3: + resolution: {integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.5 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs/4.2.6: + resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} + dev: true + + /has-bigints/1.0.1: + resolution: {integrity: sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-symbols/1.0.2: + resolution: {integrity: sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=} + engines: {node: '>= 0.4'} + dev: true + + /has/1.0.3: + resolution: {integrity: sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /hosted-git-info/2.8.9: + resolution: {integrity: sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=} + dev: true + + /html-encoding-sniffer/2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: true + + /html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent/5.0.0: + resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals/1.1.1: + resolution: {integrity: sha1-xbHNFPUK6uCatsWf5jujOV/k36M=} + engines: {node: '>=8.12.0'} + dev: true + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /husky/4.3.8: + resolution: {integrity: sha1-MRRAYL6WP9aFDlzI8Bmh3+GUKW0=} + engines: {node: '>=10'} + hasBin: true + requiresBuild: true + dependencies: + chalk: 4.1.1 + ci-info: 2.0.0 + compare-versions: 3.6.0 + cosmiconfig: 7.0.0 + find-versions: 4.0.0 + opencollective-postinstall: 2.0.3 + pkg-dir: 5.0.0 + please-upgrade-node: 3.2.0 + slash: 3.0.0 + which-pm-runs: 1.0.0 + dev: true + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /ignore/4.0.6: + resolution: {integrity: sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=} + engines: {node: '>= 4'} + dev: true + + /ignore/5.1.8: + resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} + engines: {node: '>= 4'} + dev: true + + /import-cwd/3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: true + + /import-fresh/3.3.0: + resolution: {integrity: sha1-NxYsJfy566oublPVtNiM4X2eDCs=} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-from/3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /import-local/3.0.2: + resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /import-modules/2.1.0: + resolution: {integrity: sha1-q+ffKXy2wfGbVyRuuLi9lmS22MI=} + engines: {node: '>=8'} + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /indent-string/5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ink-spinner/4.0.2_ink@3.0.8+react@17.0.2: + resolution: {integrity: sha512-vQGmhWUEh3IG1IxK1Hl2w6RfH6aaRIJWw9lrG8CvFFyrQ23UpJ8GClJs5/sFBxkNvsrrK9sKNEGlGnsqTYiUww==} + engines: {node: '>=10'} + peerDependencies: + ink: '>=3.0.5' + react: '>=16.8.2' + dependencies: + cli-spinners: 2.6.0 + ink: 3.0.8_@types+react@17.0.8+react@17.0.2 + react: 17.0.2 + dev: true + + /ink-task-list/1.1.0_ink@3.0.8+react@17.0.2: + resolution: {integrity: sha512-lywEGm1N6lV4r29BlJYdXzlVPXuUGqHmxJyK7OkSrIRS5ChVmiT1Ro8kUyfGSf9rQG0yKCQRhEaoHJDk22f8Nw==} + peerDependencies: + ink: '>=3.0.0' + react: '>=16.8.0' + dependencies: + cli-spinners: 2.6.0 + figures: 3.2.0 + ink: 3.0.8_@types+react@17.0.8+react@17.0.2 + ink-spinner: 4.0.2_ink@3.0.8+react@17.0.2 + prop-types: 15.7.2 + react: 17.0.2 + dev: true + + /ink/3.0.8_@types+react@17.0.8+react@17.0.2: + resolution: {integrity: sha512-ubMFylXYaG4IkXQVhPautbhV/p6Lo0GlvAMI/jh8cGJQ39yeznJbaTTJP2CqZXezA4GOHzalpwCWqux/NEY38w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '>=16.8.0' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.8 + ansi-escapes: 4.3.2 + auto-bind: 4.0.0 + chalk: 4.1.1 + cli-boxes: 2.2.1 + cli-cursor: 3.1.0 + cli-truncate: 2.1.0 + code-excerpt: 3.0.0 + indent-string: 4.0.0 + is-ci: 2.0.0 + lodash: 4.17.21 + patch-console: 1.0.0 + react: 17.0.2 + react-devtools-core: 4.13.4 + react-reconciler: 0.24.0_react@17.0.2 + scheduler: 0.18.0 + signal-exit: 3.0.3 + slice-ansi: 3.0.0 + stack-utils: 2.0.3 + string-length: 3.1.0 + type-fest: 0.12.0 + widest-line: 3.1.0 + wrap-ansi: 6.2.0 + ws: 7.4.5 + yoga-layout-prebuilt: 1.10.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /internal-slot/1.0.3: + resolution: {integrity: sha1-c0fjB97uovqsKsYgXUvH00ln9Zw=} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} + dev: true + + /is-bigint/1.0.2: + resolution: {integrity: sha1-/7OBRCUDI1rSReqJ5Fs9v/BA7lo=} + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object/1.1.1: + resolution: {integrity: sha1-PAh48DXLghIo01DS4eNnGXFqPeg=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-callable/1.2.3: + resolution: {integrity: sha1-ix4FALc6HXbHBIdjbzaOUZ3o244=} + engines: {node: '>= 0.4'} + dev: true + + /is-ci/2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + dependencies: + ci-info: 2.0.0 + dev: true + + /is-ci/3.0.0: + resolution: {integrity: sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==} + hasBin: true + dependencies: + ci-info: 3.2.0 + dev: true + + /is-core-module/2.4.0: + resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} + dependencies: + has: 1.0.3 + dev: true + + /is-date-object/1.0.4: + resolution: {integrity: sha1-VQz8wDr62gXuo90wmBx7CVUfc+U=} + engines: {node: '>= 0.4'} + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-generator-fn/2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + + /is-get-set-prop/1.0.0: + resolution: {integrity: sha1-JzGHfk14pqae3M5rudaLB3nnYxI=} + dependencies: + get-set-props: 0.1.0 + lowercase-keys: 1.0.1 + dev: true + + /is-glob/4.0.1: + resolution: {integrity: sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-js-type/2.0.0: + resolution: {integrity: sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI=} + dependencies: + js-types: 1.0.0 + dev: true + + /is-negative-zero/2.0.1: + resolution: {integrity: sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object/1.0.5: + resolution: {integrity: sha1-bt+u7XlQz/Ga/tzp+/yp7m3Sies=} + engines: {node: '>= 0.4'} + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj-prop/1.0.0: + resolution: {integrity: sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4=} + dependencies: + lowercase-keys: 1.0.1 + obj-props: 1.3.0 + dev: true + + /is-obj/1.0.1: + resolution: {integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=} + engines: {node: '>=0.10.0'} + dev: true + + /is-potential-custom-element-name/1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true + + /is-proto-prop/2.0.0: + resolution: {integrity: sha1-masoY0YuRAkP0IPv0ZKQWPnZNeE=} + dependencies: + lowercase-keys: 1.0.1 + proto-props: 2.0.0 + dev: true + + /is-regex/1.1.3: + resolution: {integrity: sha1-0Cn5r/ZEi5Prvj8z2scVEf3L758=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-symbols: 1.0.2 + dev: true + + /is-regexp/1.0.0: + resolution: {integrity: sha1-/S2INUXEa6xaYz57mgnof6LLUGk=} + engines: {node: '>=0.10.0'} + dev: true + + /is-stream/2.0.0: + resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} + engines: {node: '>=8'} + dev: true + + /is-string/1.0.6: + resolution: {integrity: sha1-P+XVmS+w2TQE8yWE1LAXmnG1Sl8=} + engines: {node: '>= 0.4'} + dev: true + + /is-symbol/1.0.4: + resolution: {integrity: sha1-ptrJO2NbBjymhyI23oiRClevE5w=} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.2 + dev: true + + /is-typedarray/1.0.0: + resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=} + engines: {node: '>=10'} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + dev: true + + /istanbul-lib-coverage/3.0.0: + resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument/4.0.3: + resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.14.3 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.0.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + dependencies: + istanbul-lib-coverage: 3.0.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps/4.0.0: + resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} + engines: {node: '>=8'} + dependencies: + debug: 4.3.1 + istanbul-lib-coverage: 3.0.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports/3.0.2: + resolution: {integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + + /jest-changed-files/27.0.2: + resolution: {integrity: sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + execa: 5.0.1 + throat: 6.0.1 + dev: true + + /jest-circus/27.0.3: + resolution: {integrity: sha512-tdMfzs7SgD5l7jRcI1iB3vtQi5fHwCgo4RlO8bzZnYc05PZ+tlAOMZeS8eGYkZ2tPaRY/aRLMFWQp/8zXBrolQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.0.3 + '@jest/test-result': 27.0.2 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + chalk: 4.1.1 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.0.2 + is-generator-fn: 2.1.0 + jest-each: 27.0.2 + jest-matcher-utils: 27.0.2 + jest-message-util: 27.0.2 + jest-runtime: 27.0.3 + jest-snapshot: 27.0.2 + jest-util: 27.0.2 + pretty-format: 27.0.2 + slash: 3.0.0 + stack-utils: 2.0.3 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-cli/27.0.3: + resolution: {integrity: sha512-7bt9Sgv4nWH5pUnyJfdLf8CHWfo4+7lSPxeBwQx4r0vBj9jweJam/piE2U91SXtQI+ckm+TIN97OVnqIYpVhSg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.0.3 + '@jest/test-result': 27.0.2 + '@jest/types': 27.0.2 + chalk: 4.1.1 + exit: 0.1.2 + graceful-fs: 4.2.6 + import-local: 3.0.2 + jest-config: 27.0.3 + jest-util: 27.0.2 + jest-validate: 27.0.2 + prompts: 2.4.1 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jest-config/27.0.3: + resolution: {integrity: sha512-zgtI2YQo+ekKsmYNyDlXFY/7w7WWBSJFoj/WRe173WB88CDUrEYWr0sLdbLOQe+sRu6l1Y2S0MCS6BOJm5jkoA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.14.3 + '@jest/test-sequencer': 27.0.3 + '@jest/types': 27.0.2 + babel-jest: 27.0.2_@babel+core@7.14.3 + chalk: 4.1.1 + deepmerge: 4.2.2 + glob: 7.1.7 + graceful-fs: 4.2.6 + is-ci: 3.0.0 + jest-circus: 27.0.3 + jest-environment-jsdom: 27.0.3 + jest-environment-node: 27.0.3 + jest-get-type: 27.0.1 + jest-jasmine2: 27.0.3 + jest-regex-util: 27.0.1 + jest-resolve: 27.0.2 + jest-runner: 27.0.3 + jest-util: 27.0.2 + jest-validate: 27.0.2 + micromatch: 4.0.4 + pretty-format: 27.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-diff/26.6.2: + resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} + engines: {node: '>= 10.14.2'} + dependencies: + chalk: 4.1.1 + diff-sequences: 26.6.2 + jest-get-type: 26.3.0 + pretty-format: 26.6.2 + dev: true + + /jest-diff/27.0.2: + resolution: {integrity: sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.1 + diff-sequences: 27.0.1 + jest-get-type: 27.0.1 + pretty-format: 27.0.2 + dev: true + + /jest-docblock/27.0.1: + resolution: {integrity: sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each/27.0.2: + resolution: {integrity: sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + chalk: 4.1.1 + jest-get-type: 27.0.1 + jest-util: 27.0.2 + pretty-format: 27.0.2 + dev: true + + /jest-environment-jsdom/27.0.3: + resolution: {integrity: sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.0.3 + '@jest/fake-timers': 27.0.3 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + jest-mock: 27.0.3 + jest-util: 27.0.2 + jsdom: 16.6.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-environment-node/27.0.3: + resolution: {integrity: sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.0.3 + '@jest/fake-timers': 27.0.3 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + jest-mock: 27.0.3 + jest-util: 27.0.2 + dev: true + + /jest-get-type/26.3.0: + resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} + engines: {node: '>= 10.14.2'} + dev: true + + /jest-get-type/27.0.1: + resolution: {integrity: sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-haste-map/27.0.2: + resolution: {integrity: sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + '@types/graceful-fs': 4.1.5 + '@types/node': 15.6.1 + anymatch: 3.1.2 + fb-watchman: 2.0.1 + graceful-fs: 4.2.6 + jest-regex-util: 27.0.1 + jest-serializer: 27.0.1 + jest-util: 27.0.2 + jest-worker: 27.0.2 + micromatch: 4.0.4 + walker: 1.0.7 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /jest-jasmine2/27.0.3: + resolution: {integrity: sha512-odJ2ia8P5c+IsqOcWJPmku4AqbXIfTVLRjYTKHri3TEvbmTdLw0ghy13OAPIl/0v7cVH0TURK7+xFOHKDLvKIA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/traverse': 7.14.2 + '@jest/environment': 27.0.3 + '@jest/source-map': 27.0.1 + '@jest/test-result': 27.0.2 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + chalk: 4.1.1 + co: 4.6.0 + expect: 27.0.2 + is-generator-fn: 2.1.0 + jest-each: 27.0.2 + jest-matcher-utils: 27.0.2 + jest-message-util: 27.0.2 + jest-runtime: 27.0.3 + jest-snapshot: 27.0.2 + jest-util: 27.0.2 + pretty-format: 27.0.2 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-leak-detector/27.0.2: + resolution: {integrity: sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.0.1 + pretty-format: 27.0.2 + dev: true + + /jest-matcher-utils/27.0.2: + resolution: {integrity: sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.1 + jest-diff: 27.0.2 + jest-get-type: 27.0.1 + pretty-format: 27.0.2 + dev: true + + /jest-message-util/27.0.2: + resolution: {integrity: sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.12.13 + '@jest/types': 27.0.2 + '@types/stack-utils': 2.0.0 + chalk: 4.1.1 + graceful-fs: 4.2.6 + micromatch: 4.0.4 + pretty-format: 27.0.2 + slash: 3.0.0 + stack-utils: 2.0.3 + dev: true + + /jest-mock/27.0.3: + resolution: {integrity: sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + dev: true + + /jest-pnp-resolver/1.2.2_jest-resolve@27.0.2: + resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.0.2 + dev: true + + /jest-regex-util/27.0.1: + resolution: {integrity: sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-resolve-dependencies/27.0.3: + resolution: {integrity: sha512-HdjWOvFAgT5CYChF2eiBN2rRKicjaTCCtA3EtH47REIdGzEHGUhYrWYgLahXsiOovvWN6edhcHL5WCa3gbc04A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + jest-regex-util: 27.0.1 + jest-snapshot: 27.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve/27.0.2: + resolution: {integrity: sha512-rmfLGyZhwAUR5z3EwPAW7LQTorWAuCYCcsQJoQxT2it+BOgX3zKxa67r1pfpK3ihy2k9TjYD3/lMp5rPm/CL1Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + chalk: 4.1.1 + escalade: 3.1.1 + graceful-fs: 4.2.6 + jest-pnp-resolver: 1.2.2_jest-resolve@27.0.2 + jest-util: 27.0.2 + jest-validate: 27.0.2 + resolve: 1.20.0 + slash: 3.0.0 + dev: true + + /jest-runner/27.0.3: + resolution: {integrity: sha512-zH23uIIh1ro1JCD7XX1bQ0bQwXEsBzLX2UJVE/AVLsk4YJRmTfyXIzzRzBWRdnMHHg1NWkJ4fGs7eFP15IqZpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.0.2 + '@jest/environment': 27.0.3 + '@jest/test-result': 27.0.2 + '@jest/transform': 27.0.2 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + chalk: 4.1.1 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.6 + jest-docblock: 27.0.1 + jest-haste-map: 27.0.2 + jest-leak-detector: 27.0.2 + jest-message-util: 27.0.2 + jest-resolve: 27.0.2 + jest-runtime: 27.0.3 + jest-util: 27.0.2 + jest-worker: 27.0.2 + source-map-support: 0.5.19 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-runtime/27.0.3: + resolution: {integrity: sha512-k1Hl2pWWHBkSXdCggX2lyLRuDnnnmMlnJd+DPLb8LmmAeHW87WgGC6TplD377VxY3KQu73sklkhGUIdwFgsRVQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.0.2 + '@jest/environment': 27.0.3 + '@jest/fake-timers': 27.0.3 + '@jest/globals': 27.0.3 + '@jest/source-map': 27.0.1 + '@jest/test-result': 27.0.2 + '@jest/transform': 27.0.2 + '@jest/types': 27.0.2 + '@types/yargs': 16.0.3 + chalk: 4.1.1 + cjs-module-lexer: 1.2.1 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.1.7 + graceful-fs: 4.2.6 + jest-haste-map: 27.0.2 + jest-message-util: 27.0.2 + jest-mock: 27.0.3 + jest-regex-util: 27.0.1 + jest-resolve: 27.0.2 + jest-snapshot: 27.0.2 + jest-util: 27.0.2 + jest-validate: 27.0.2 + slash: 3.0.0 + strip-bom: 4.0.0 + yargs: 16.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-serializer/27.0.1: + resolution: {integrity: sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 15.6.1 + graceful-fs: 4.2.6 + dev: true + + /jest-snapshot/27.0.2: + resolution: {integrity: sha512-4RcgvZbPrrbEE/hT6XQ4hr+NVVLNrmsgUnYSnZRT6UAvW9Q2yzGMS+tfJh+xlQJAapnnkNJzsMn6vUa+yfiVHA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.14.3 + '@babel/generator': 7.14.3 + '@babel/parser': 7.14.4 + '@babel/plugin-syntax-typescript': 7.12.13_@babel+core@7.14.3 + '@babel/traverse': 7.14.2 + '@babel/types': 7.14.4 + '@jest/transform': 27.0.2 + '@jest/types': 27.0.2 + '@types/babel__traverse': 7.11.1 + '@types/prettier': 2.2.3 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.3 + chalk: 4.1.1 + expect: 27.0.2 + graceful-fs: 4.2.6 + jest-diff: 27.0.2 + jest-get-type: 27.0.1 + jest-haste-map: 27.0.2 + jest-matcher-utils: 27.0.2 + jest-message-util: 27.0.2 + jest-resolve: 27.0.2 + jest-util: 27.0.2 + natural-compare: 1.4.0 + pretty-format: 27.0.2 + semver: 7.3.5 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-util/27.0.2: + resolution: {integrity: sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + chalk: 4.1.1 + graceful-fs: 4.2.6 + is-ci: 3.0.0 + picomatch: 2.3.0 + dev: true + + /jest-validate/27.0.2: + resolution: {integrity: sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + camelcase: 6.2.0 + chalk: 4.1.1 + jest-get-type: 27.0.1 + leven: 3.1.0 + pretty-format: 27.0.2 + dev: true + + /jest-watcher/27.0.2: + resolution: {integrity: sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.0.2 + '@jest/types': 27.0.2 + '@types/node': 15.6.1 + ansi-escapes: 4.3.2 + chalk: 4.1.1 + jest-util: 27.0.2 + string-length: 4.0.2 + dev: true + + /jest-worker/27.0.2: + resolution: {integrity: sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 15.6.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest/27.0.3: + resolution: {integrity: sha512-0G9+QqXFIZWgf5rs3yllpaA+13ZawVHfyuhuCV1EnoFbX++rVMRrYWCAnk+dfhwyv9/VTQvn+XG969u8aPRsBg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.0.3 + import-local: 3.0.2 + jest-cli: 27.0.3 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /joycon/3.0.1: + resolution: {integrity: sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==} + engines: {node: '>=10'} + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-types/1.0.0: + resolution: {integrity: sha1-0kLmSU7Vcq08koCfyL7X92h8vwM=} + engines: {node: '>=0.10.0'} + dev: true + + /js-yaml/3.14.1: + resolution: {integrity: sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /jsdoctypeparser/9.0.0: + resolution: {integrity: sha1-jJfi+2kxXrJ0sPATd+qlyUC9eyY=} + engines: {node: '>=10'} + hasBin: true + dev: true + + /jsdom/16.6.0: + resolution: {integrity: sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.5 + acorn: 8.3.0 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.2.1 + domexception: 2.0.1 + escodegen: 2.0.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.0 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.0.0 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.5.0 + ws: 7.4.6 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-parse-better-errors/1.0.2: + resolution: {integrity: sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=} + dev: true + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha1-afaofZUTq4u4/mO9sJecRI5oRmA=} + dev: true + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} + dev: true + + /json5/1.0.1: + resolution: {integrity: sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /json5/2.2.0: + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /jsonc-eslint-parser/1.0.1: + resolution: {integrity: sha1-+77a0IdceeHhXQ7Wh36+Q/GKUuM=} + dependencies: + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + espree: 7.3.1 + dev: true + + /jsonc-parser/3.0.0: + resolution: {integrity: sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==} + dev: true + + /jsx-ast-utils/3.2.0: + resolution: {integrity: sha1-QRCNLOxAjDRTwbvopKrp4eK9j4I=} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.3 + object.assign: 4.1.2 + dev: true + + /kleur/3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /levn/0.3.0: + resolution: {integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: true + + /levn/0.4.1: + resolution: {integrity: sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lines-and-columns/1.1.6: + resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} + dev: true + + /lint-staged/10.5.4: + resolution: {integrity: sha1-zRU7XwmH0jcfwdKEekCaL+cFtmU=} + hasBin: true + dependencies: + chalk: 4.1.1 + cli-truncate: 2.1.0 + commander: 6.2.1 + cosmiconfig: 7.0.0 + debug: 4.3.1 + dedent: 0.7.0 + enquirer: 2.3.6 + execa: 4.1.0 + listr2: 3.9.0_enquirer@2.3.6 + log-symbols: 4.1.0 + micromatch: 4.0.4 + normalize-path: 3.0.0 + please-upgrade-node: 3.2.0 + string-argv: 0.3.1 + stringify-object: 3.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /listr2/3.9.0_enquirer@2.3.6: + resolution: {integrity: sha1-J/I8kbpP31E7BoK/YEvGsKs2tsE=} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + dependencies: + cli-truncate: 2.1.0 + colorette: 1.2.2 + enquirer: 2.3.6 + log-update: 4.0.0 + p-map: 4.0.0 + rxjs: 6.6.7 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /load-json-file/4.0.0: + resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.6 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + dev: true + + /locate-path/2.0.0: + resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha1-VTIeswn+u8WcSAHZMackUqaB0oY=} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.clonedeep/4.5.0: + resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=} + dev: true + + /lodash.truncate/4.4.2: + resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha1-P727lbRoOsn8eFER55LlWNSr1QM=} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.1 + is-unicode-supported: 0.1.0 + dev: true + + /log-update/4.0.0: + resolution: {integrity: sha1-WJ7NNSRx8qHAxXAodUOmTf0g4KE=} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + + /lowercase-keys/1.0.1: + resolution: {integrity: sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=} + engines: {node: '>=0.10.0'} + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /makeerror/1.0.11: + resolution: {integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=} + dependencies: + tmpl: 1.0.4 + dev: true + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/4.0.4: + resolution: {integrity: sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.0 + dev: true + + /mime-db/1.48.0: + resolution: {integrity: sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types/2.1.31: + resolution: {integrity: sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.48.0 + dev: true + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /minimatch/3.0.4: + resolution: {integrity: sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist/1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + dev: true + + /ms/2.0.0: + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=} + dev: true + + /multimap/1.1.0: + resolution: {integrity: sha1-UmP+vAhaF5HDO1m7OvxqdqKhDKg=} + dev: true + + /mz/2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} + dev: true + + /node-int64/0.4.0: + resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} + dev: true + + /node-modules-regexp/1.0.0: + resolution: {integrity: sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=} + engines: {node: '>=0.10.0'} + dev: true + + /node-releases/1.1.72: + resolution: {integrity: sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==} + dev: true + + /normalize-package-data/2.5.0: + resolution: {integrity: sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.20.0 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /nwsapi/2.2.0: + resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} + dev: true + + /obj-props/1.3.0: + resolution: {integrity: sha1-iISrIcjYSWxKf2lseL+CKJxRaAs=} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect/1.10.3: + resolution: {integrity: sha1-wqp9LQn1DJk3VwT3oK3yTFeC02k=} + dev: true + + /object-keys/1.1.1: + resolution: {integrity: sha1-HEfyct8nfzsdrwYWd9nILiMixg4=} + engines: {node: '>= 0.4'} + dev: true + + /object.assign/4.1.2: + resolution: {integrity: sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + has-symbols: 1.0.2 + object-keys: 1.1.1 + dev: true + + /object.entries/1.1.4: + resolution: {integrity: sha1-Q8z5pQvF/VtknUWrGlefJOCIyv0=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.3 + dev: true + + /object.fromentries/2.0.4: + resolution: {integrity: sha1-JuG6XEVxxcbwiQzvRHMGZFahILg=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.3 + has: 1.0.3 + dev: true + + /object.values/1.1.4: + resolution: {integrity: sha1-DSc3YoM+gWtpOmN9MAc+cFFTWzA=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.3 + dev: true + + /once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /opencollective-postinstall/2.0.3: + resolution: {integrity: sha1-eg//l49tv6TQBiOPusmO1BmMMlk=} + hasBin: true + dev: true + + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.3 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + dev: true + + /optionator/0.9.1: + resolution: {integrity: sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.3 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /p-each-series/2.2.0: + resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==} + engines: {node: '>=8'} + dev: true + + /p-limit/1.3.0: + resolution: {integrity: sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + dev: true + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/2.0.0: + resolution: {integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map/4.0.0: + resolution: {integrity: sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-map/5.0.0: + resolution: {integrity: sha512-FeQNuFp/ecZidgaTXc65qXdTGD7mniwgzZNq5czwcJSy6ClETr2v3y4ZQESGe8C1038XhO/fjfKOyiTNH3d0/g==} + engines: {node: '>=12'} + dependencies: + aggregate-error: 4.0.0 + dev: true + + /p-try/1.0.0: + resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} + engines: {node: '>=4'} + dev: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json/4.0.0: + resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + + /parse-json/5.2.0: + resolution: {integrity: sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.12.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.1.6 + dev: true + + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /patch-console/1.0.0: + resolution: {integrity: sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==} + engines: {node: '>=10'} + dev: true + + /path-exists/3.0.0: + resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} + engines: {node: '>=4'} + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type/3.0.0: + resolution: {integrity: sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picomatch/2.3.0: + resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} + engines: {node: '>=8.6'} + dev: true + + /pify/3.0.0: + resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} + engines: {node: '>=4'} + dev: true + + /pirates/4.0.1: + resolution: {integrity: sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==} + engines: {node: '>= 6'} + dependencies: + node-modules-regexp: 1.0.0 + dev: true + + /pkg-dir/2.0.0: + resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + dev: true + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /pkg-dir/5.0.0: + resolution: {integrity: sha1-oC1q6+a6EzqSj3Suwguv3+a452A=} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + dev: true + + /pkg-up/2.0.0: + resolution: {integrity: sha1-yBmscoBZpGHKscOImivjxJoATX8=} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + dev: true + + /please-upgrade-node/3.2.0: + resolution: {integrity: sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=} + dependencies: + semver-compare: 1.0.0 + dev: true + + /pluralize/8.0.0: + resolution: {integrity: sha1-Gm+hajjRKhkB4DIPoBcFHFOc47E=} + engines: {node: '>=4'} + dev: true + + /postcss-load-config/3.0.1: + resolution: {integrity: sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==} + engines: {node: '>= 10'} + dependencies: + cosmiconfig: 7.0.0 + import-cwd: 3.0.0 + dev: true + + /prelude-ls/1.1.2: + resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} + engines: {node: '>= 0.8.0'} + dev: true + + /prelude-ls/1.2.1: + resolution: {integrity: sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=} + engines: {node: '>= 0.8.0'} + dev: true + + /pretty-format/26.6.2: + resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} + engines: {node: '>= 10'} + dependencies: + '@jest/types': 26.6.2 + ansi-regex: 5.0.0 + ansi-styles: 4.3.0 + react-is: 17.0.2 + dev: true + + /pretty-format/27.0.2: + resolution: {integrity: sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.2 + ansi-regex: 5.0.0 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + + /progress/2.0.3: + resolution: {integrity: sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=} + engines: {node: '>=0.4.0'} + dev: true + + /prompts/2.4.1: + resolution: {integrity: sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /prop-types/15.7.2: + resolution: {integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + + /proto-props/2.0.0: + resolution: {integrity: sha1-isbm3sZYVFgVxiOjvIFYDe2poYE=} + engines: {node: '>=4'} + dev: true + + /proxy-compare/2.0.0: + resolution: {integrity: sha512-xhJF1+vPCnu93QYva3Weii5ho1AeX5dsR/P5O7pzy9QLxeOgMSQNC8zDo0bGg9vtn61Pu5Qn+5w/Y8OSU5k+8g==} + dev: true + + /psl/1.8.0: + resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} + dev: true + + /pump/3.0.0: + resolution: {integrity: sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-devtools-core/4.13.4: + resolution: {integrity: sha512-su/lI4LdiK5P1YgZpbm8K1iNQX6s0Lq5fJLa1ZcnpewvrqP5V14svHrbPmrU5ptMUSiwjZ3/CBmc/JCZOuuiHQ==} + dependencies: + shell-quote: 1.7.2 + ws: 7.4.5 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /react-is/17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true + + /react-reconciler/0.24.0_react@17.0.2: + resolution: {integrity: sha512-gAGnwWkf+NOTig9oOowqid9O0HjTDC+XVGBCAmJYYJ2A2cN/O4gDdIuuUQjv8A4v6GDwVfJkagpBBLW5OW9HSw==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^16.0.0 + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.7.2 + react: 17.0.2 + scheduler: 0.18.0 + dev: true + + /react/17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: true + + /read-pkg-up/3.0.0: + resolution: {integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + read-pkg: 3.0.0 + dev: true + + /read-pkg-up/7.0.1: + resolution: {integrity: sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg/3.0.0: + resolution: {integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=} + engines: {node: '>=4'} + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + dev: true + + /read-pkg/5.2.0: + resolution: {integrity: sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.0 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readdirp/3.5.0: + resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.0 + dev: true + + /regexp-tree/0.1.23: + resolution: {integrity: sha1-iozhzF6XGs72IhOn7Nsfbhih8bI=} + hasBin: true + dev: true + + /regexp.prototype.flags/1.3.1: + resolution: {integrity: sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /regexpp/3.1.0: + resolution: {integrity: sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=} + engines: {node: '>=8'} + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string/2.0.2: + resolution: {integrity: sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=} + engines: {node: '>=0.10.0'} + dev: true + + /reserved-words/0.1.2: + resolution: {integrity: sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=} + dev: true + + /resolve-cwd/3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=} + engines: {node: '>=4'} + dev: true + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve/1.20.0: + resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} + dependencies: + is-core-module: 2.4.0 + path-parse: 1.0.7 + dev: true + + /resolve/2.0.0-next.3: + resolution: {integrity: sha1-1BAWKT1KhYajnKXZtfFcvqH1XkY=} + dependencies: + is-core-module: 2.4.0 + path-parse: 1.0.7 + dev: true + + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.3 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.1.7 + dev: true + + /rollup/2.50.5: + resolution: {integrity: sha512-Ztz4NurU2LbS3Jn5rlhnYv35z6pkjBUmYKr94fOBIKINKRO6kug9NTFHArT7jqwMP2kqEZ39jJuEtkk91NBltQ==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs/6.6.7: + resolution: {integrity: sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-regex/2.1.1: + resolution: {integrity: sha1-9xKPANBW4v5cEegaEyTdl0qtztI=} + dependencies: + regexp-tree: 0.1.23 + dev: true + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /saxes/5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: true + + /scheduler/0.18.0: + resolution: {integrity: sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: true + + /semver-compare/1.0.0: + resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=} + dev: true + + /semver-regex/3.1.2: + resolution: {integrity: sha1-NLTA02Hu8mLgcZnb7zFtDyqxGAc=} + engines: {node: '>=8'} + dev: true + + /semver/5.7.1: + resolution: {integrity: sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=} + hasBin: true + dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.3.5: + resolution: {integrity: sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=} + engines: {node: '>=8'} + dev: true + + /shell-quote/1.7.2: + resolution: {integrity: sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha1-785cj9wQTudRslxY1CkAEfpeos8=} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.10.3 + dev: true + + /signal-exit/3.0.3: + resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} + dev: true + + /sisteransi/1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slice-ansi/3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/4.0.0: + resolution: {integrity: sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms=} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /source-map-support/0.5.19: + resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} + dependencies: + buffer-from: 1.1.1 + source-map: 0.6.1 + dev: true + + /source-map/0.5.7: + resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.7.3: + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} + dev: true + + /spdx-correct/3.1.1: + resolution: {integrity: sha1-3s6BrJweZxPl99G28X1Gj6U9iak=} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.9 + dev: true + + /spdx-exceptions/2.3.0: + resolution: {integrity: sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=} + dev: true + + /spdx-expression-parse/3.0.1: + resolution: {integrity: sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.9 + dev: true + + /spdx-license-ids/3.0.9: + resolution: {integrity: sha1-illRNd75WSvaaXCUdPHL7qfCRn8=} + dev: true + + /sprintf-js/1.0.3: + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + dev: true + + /stack-utils/2.0.3: + resolution: {integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + + /string-argv/0.3.1: + resolution: {integrity: sha1-leL77AQnrhkYSTX4FtdKqkxcGdo=} + engines: {node: '>=0.6.19'} + dev: true + + /string-length/3.1.0: + resolution: {integrity: sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==} + engines: {node: '>=8'} + dependencies: + astral-regex: 1.0.0 + strip-ansi: 5.2.0 + dev: true + + /string-length/4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.0 + dev: true + + /string-width/4.2.2: + resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.0 + dev: true + + /string.prototype.matchall/4.0.5: + resolution: {integrity: sha1-WTcGROHbfkwMBFJ3aQz3sBIDxNo=} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.3 + get-intrinsic: 1.1.1 + has-symbols: 1.0.2 + internal-slot: 1.0.3 + regexp.prototype.flags: 1.3.1 + side-channel: 1.0.4 + dev: true + + /string.prototype.trimend/1.0.4: + resolution: {integrity: sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /string.prototype.trimstart/1.0.4: + resolution: {integrity: sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /stringify-object/3.3.0: + resolution: {integrity: sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: true + + /strip-ansi/5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.0 + dev: true + + /strip-ansi/6.0.0: + resolution: {integrity: sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.0 + dev: true + + /strip-bom/3.0.0: + resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} + engines: {node: '>=4'} + dev: true + + /strip-bom/4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=} + engines: {node: '>=8'} + dev: true + + /sucrase/3.18.1: + resolution: {integrity: sha512-TRyO38wwOPhLLlM8QLOG3TgMj0FKk+arlTrS9pRAanF8cAcHvgRPKIYWGO25mPSp/Rj87zMMTjFfkqIZGI6ZdA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.1.6 + mz: 2.7.0 + pirates: 4.0.1 + ts-interface-checker: 0.1.13 + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks/2.2.0: + resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /symbol-tree/3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true + + /table/6.7.1: + resolution: {integrity: sha1-7gVZK3FDgxqMlPPO5qrkwczvM+I=} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.5.0 + lodash.clonedeep: 4.5.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.2 + strip-ansi: 6.0.0 + dev: true + + /terminal-link/2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.2.0 + dev: true + + /test-exclude/6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.1.7 + minimatch: 3.0.4 + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} + dev: true + + /thenify-all/1.6.0: + resolution: {integrity: sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify/3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /throat/6.0.1: + resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} + dev: true + + /through/2.3.8: + resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} + dev: true + + /tmpl/1.0.4: + resolution: {integrity: sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + engines: {node: '>=4'} + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tough-cookie/4.0.0: + resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} + engines: {node: '>=6'} + dependencies: + psl: 1.8.0 + punycode: 2.1.1 + universalify: 0.1.2 + dev: true + + /tr46/2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.1.1 + dev: true + + /tree-kill/1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + + /ts-interface-checker/0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tsconfig-paths/3.9.0: + resolution: {integrity: sha1-CYVHpsREiAfo/Ljq4IEGTumjyQs=} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.5 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=} + dev: true + + /tsup/4.11.1_typescript@4.3.2: + resolution: {integrity: sha512-/AU2QhhOFjXEPkmIEljLAtPcEyL6KQLFDlM6gWxDZiaZdQAfW9Tyk1/WqV+tf6eoBYjXW6KMnQX7vwMczL06kA==} + hasBin: true + peerDependencies: + typescript: ^4.2.3 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + cac: 6.7.3 + chalk: 4.1.1 + chokidar: 3.5.1 + debug: 4.3.1 + esbuild: 0.11.23 + execa: 5.0.1 + globby: 11.0.3 + joycon: 3.0.1 + postcss-load-config: 3.0.1 + resolve-from: 5.0.0 + rollup: 2.50.5 + sucrase: 3.18.1 + tree-kill: 1.2.2 + typescript: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /tsutils/3.21.0_typescript@4.3.2: + resolution: {integrity: sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM=} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.3.2 + dev: true + + /type-check/0.3.2: + resolution: {integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: true + + /type-check/0.4.0: + resolution: {integrity: sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest/0.12.0: + resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=} + engines: {node: '>=10'} + dev: true + + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.6.0: + resolution: {integrity: sha1-jSojcNPfiG61yQraHFv2GIrPg4s=} + engines: {node: '>=8'} + dev: true + + /type-fest/0.8.1: + resolution: {integrity: sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=} + engines: {node: '>=8'} + dev: true + + /typedarray-to-buffer/3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true + + /typescript/4.3.2: + resolution: {integrity: sha1-OZqxiqxFgC1vJJjeUFT8u+cWqAU=} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /unbox-primitive/1.0.1: + resolution: {integrity: sha1-CF4hViXsMWJXTciFmr7nilmxRHE=} + dependencies: + function-bind: 1.1.1 + has-bigints: 1.0.1 + has-symbols: 1.0.2 + which-boxed-primitive: 1.0.2 + dev: true + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=} + dependencies: + punycode: 2.1.1 + dev: true + + /v8-compile-cache/2.3.0: + resolution: {integrity: sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4=} + dev: true + + /v8-to-istanbul/7.1.2: + resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} + engines: {node: '>=10.10.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + convert-source-map: 1.7.0 + source-map: 0.7.3 + dev: true + + /validate-npm-package-license/3.0.4: + resolution: {integrity: sha1-/JH2uce6FchX9MssXe/uw51PQQo=} + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + + /valtio/1.0.5_react@17.0.2: + resolution: {integrity: sha512-SysrWAVeV0OZCVQwBsOil5/kvACY4HshFMw9hT+TzGtGP3WEbMpFqAlagZ0ikv4E0rPHcBKCcvDTj5VBeyquaw==} + peerDependencies: + '@babel/helper-module-imports': '>=7.12' + '@babel/types': '>=7.13' + babel-plugin-macros: '>=3.0' + react: '>=16.8' + peerDependenciesMeta: + '@babel/helper-module-imports': + optional: true + '@babel/types': + optional: true + babel-plugin-macros: + optional: true + react: + optional: true + dependencies: + proxy-compare: 2.0.0 + react: 17.0.2 + dev: true + + /w3c-hr-time/1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + dependencies: + browser-process-hrtime: 1.0.0 + dev: true + + /w3c-xmlserializer/2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: true + + /walker/1.0.7: + resolution: {integrity: sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=} + dependencies: + makeerror: 1.0.11 + dev: true + + /webidl-conversions/5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: true + + /webidl-conversions/6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: true + + /whatwg-encoding/1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: true + + /whatwg-mimetype/2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: true + + /whatwg-url/8.5.0: + resolution: {integrity: sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: true + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=} + dependencies: + is-bigint: 1.0.2 + is-boolean-object: 1.1.1 + is-number-object: 1.0.5 + is-string: 1.0.6 + is-symbol: 1.0.4 + dev: true + + /which-pm-runs/1.0.0: + resolution: {integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=} + dev: true + + /which/2.0.2: + resolution: {integrity: sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /widest-line/3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.2 + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.2 + strip-ansi: 6.0.0 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.2 + strip-ansi: 6.0.0 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + dev: true + + /write-file-atomic/3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.3 + typedarray-to-buffer: 3.1.5 + dev: true + + /ws/7.4.5: + resolution: {integrity: sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws/7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xml-name-validator/3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: true + + /xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=} + dev: true + + /yaml/1.10.2: + resolution: {integrity: sha1-IwHF/78StGfejaIzOkWeKeeSDks=} + engines: {node: '>= 6'} + dev: true + + /yargs-parser/20.2.7: + resolution: {integrity: sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==} + engines: {node: '>=10'} + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.2 + y18n: 5.0.8 + yargs-parser: 20.2.7 + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=} + engines: {node: '>=10'} + dev: true + + /yoga-layout-prebuilt/1.10.0: + resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==} + engines: {node: '>=8'} + dependencies: + '@types/yoga-layout': 1.9.2 diff --git a/src/components/CreateApp.tsx b/src/components/CreateApp.tsx new file mode 100644 index 0000000..2bb270e --- /dev/null +++ b/src/components/CreateApp.tsx @@ -0,0 +1,17 @@ +import { render } from 'ink'; +import React from 'react'; +import { TaskList } from '../types'; +import TaskListApp from './TaskListApp'; + +export function createApp(taskList: TaskList) { + const inkApp = render(); + + return { + remove() { + inkApp.rerender(null); + inkApp.unmount(); + inkApp.clear(); + inkApp.cleanup(); + }, + }; +} diff --git a/src/components/TaskListApp.tsx b/src/components/TaskListApp.tsx new file mode 100644 index 0000000..db8d6b1 --- /dev/null +++ b/src/components/TaskListApp.tsx @@ -0,0 +1,28 @@ +import React, { FC } from 'react'; +import { TaskList } from 'ink-task-list'; +import { useSnapshot } from 'valtio'; +import type { TaskObject } from '../types'; +import TaskListItem from './TaskListItem'; + +const TaskListApp: FC<{ + taskList: TaskObject[]; +}> = ({ + taskList, +}) => { + const state = useSnapshot(taskList); + + return ( + + { + state.map((task, index) => ( + + )) + } + + ); +}; + +export default TaskListApp; diff --git a/src/components/TaskListItem.tsx b/src/components/TaskListItem.tsx new file mode 100644 index 0000000..d3fe8a1 --- /dev/null +++ b/src/components/TaskListItem.tsx @@ -0,0 +1,34 @@ +import React, { FC } from 'react'; +import { Task } from 'ink-task-list'; +import type { TaskObject } from '../types'; + +const TaskListItem: FC<{ + task: TaskObject; +}> = ({ + task, +}) => { + const childTasks = ( + task.children.length > 0 + ? task.children.map((childTask, index) => ( + + )) + : undefined + ); + + return ( + 0} + > + {childTasks} + + ); +}; + +export default TaskListItem; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..648ed0f --- /dev/null +++ b/src/index.ts @@ -0,0 +1,163 @@ +import { proxy } from 'valtio'; +import pMap, { Options } from 'p-map'; +import { arrayAdd, arrayRemove } from './utils'; +import { TaskList, TaskObject, Awaited } from './types'; +import { createApp } from './components/CreateApp'; + +const createTaskInnerApi = (taskState: TaskObject) => { + const api = { + task: createTaskFunction(taskState.children), + setTitle(title: string) { + taskState.title = title; + }, + setStatus(status: string) { + taskState.status = status; + }, + setOutput(output: string | { message: string }) { + taskState.output = ( + typeof output === 'string' + ? output + : ( + 'message' in output + ? output.message + : '' + ) + ); + }, + setWarning(warning: Error | string) { + taskState.state = 'warning'; + api.setOutput(warning); + }, + setError(error: Error | string) { + taskState.state = 'error'; + api.setOutput(error); + }, + }; + return api; +}; + +type TaskFunction = (taskHelpers: ReturnType) => Promise; + +type TaskAPI = { + run: () => Promise>>; + clear: () => void; +}; +type TaskResults< + T extends TaskFunction, + Tasks extends TaskAPI[] +> = { + [key in keyof Tasks]: ( + Tasks[key] extends TaskAPI + ? Awaited> + : Tasks[key] + ); +}; + +let app: ReturnType; + +function registerTask( + taskList: TaskList, + taskTitle: string, + taskFunction: T, +): TaskAPI { + if (!app) { + app = createApp(taskList); + taskList.isRoot = true; + } + + const taskState = arrayAdd(taskList, { + title: taskTitle, + state: 'pending', + children: [], + }); + + return { + async run() { + const api = createTaskInnerApi(taskState); + + taskState.state = 'loading'; + + let taskResult; + try { + taskResult = await taskFunction(api); + } catch (error) { + api.setError(error); + throw error; + } + + if (taskState.state === 'loading') { + taskState.state = 'success'; + } + + return taskResult; + }, + clear() { + arrayRemove(taskList, taskState); + + if (taskList.isRoot && taskList.length === 0) { + app.remove(); + app = null; + } + }, + }; +} + +function createTaskFunction( + taskList: TaskList, +) { + async function task( + title: string, + taskFunction: T, + ) { + const taskState = registerTask(taskList, title, taskFunction); + const result = await taskState.run(); + + return Object.assign( + taskState, + { result }, + ); + } + + const createTask = ( + title: string, + taskFunction: T, + ) => registerTask( + taskList, + title, + taskFunction, + ); + + task.group = async < + T extends TaskFunction, + Tasks extends TaskAPI[] + >( + createTasks: (taskCreator: typeof createTask) => readonly [...Tasks], + options?: Options, + ) => { + const tasksQueue = createTasks(createTask); + const results = (await pMap( + tasksQueue, + async taskApi => await taskApi.run(), + { + concurrency: 1, + ...options, + }, + )) as unknown as TaskResults; + + return { + results, + clear() { + for (const taskApi of tasksQueue) { + taskApi.clear(); + } + }, + }; + }; + + return task; +} + +const rootTaskList = proxy([]); +const task = createTaskFunction(rootTaskList); + +export = task; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..6a7b8e7 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,22 @@ +export type TaskObject = { + title: string; + state: 'pending' | 'loading' | 'error' | 'warning' | 'success'; + children: TaskObject[]; + status?: string; + output?: string; +} + +export type TaskList = TaskObject[] & { + isRoot?: boolean; +} + +// From: https://github.com/microsoft/TypeScript/blob/4f5b3299fee9a54b692aba9df7a9e894bd86e81d/src/lib/es2015.promise.d.ts#L1 +export type Awaited = ( + T extends undefined + ? T + : ( + T extends PromiseLike + ? U + : T + ) +); diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..39285fd --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,17 @@ +export function arrayAdd( + array: T[], + element: T, +) { + const index = array.push(element) - 1; + return array[index]; +} + +export function arrayRemove( + array: T[], + element: T, +) { + const index = array.indexOf(element); + if (index > -1) { + array.splice(index, 1); + } +} diff --git a/tests/tasuku.spec.ts b/tests/tasuku.spec.ts new file mode 100644 index 0000000..b00cbb2 --- /dev/null +++ b/tests/tasuku.spec.ts @@ -0,0 +1,107 @@ +import task from '../src/index'; + +const expectType = (value: T) => {}; // eslint-disable-line @typescript-eslint/no-empty-function +const sleep = (ms: number): Promise => new Promise((resolve) => { + setTimeout(resolve, ms); +}); + +test('task - return number', async () => { + const { result } = await task('Some task', async () => 1 + 1); + expectType(result); + expect(result).toBe(2); +}); + +test('task - return string', async () => { + const { result } = await task('Some task', async () => 'some string'); + expectType(result); + expect(result).toBe('some string'); +}); + +test('task return Promise', async () => { + const { result } = await task( + 'Some task', + async () => await new Promise((resolve) => { + resolve(123); + }), + ); + expectType(result); + expect(result).toBe(123); +}); + +test('nested tasks', async () => { + const someTask = await task('Some task', async ({ task }) => { + const nestedTask = await task('nested task', async () => 'nested works'); + expectType(nestedTask.result); + expect(nestedTask.result).toBe('nested works'); + + return 1; + }); + + expectType(someTask.result); + expect(someTask.result).toBe(1); +}); + +test('group tasks', async () => { + const groupTasks = await task.group(task => [ + task('number', async () => 123), + task('string', async () => 'hello'), + task('boolean', async () => false), + ]); + + expectType<[ + number, + string, + boolean, + ]>(groupTasks.results); + expect(groupTasks.results).toEqual([ + 123, + 'hello', + false, + ]); +}); + +test('group tasks - concurrency - series', async () => { + const startTime = Date.now(); + const groupTasks = await task.group(task => [ + task('one', async () => { + await sleep(100); + return 1; + }), + task('two', async () => { + await sleep(100); + return 2; + }), + task('three', async () => { + await sleep(100); + return 3; + }), + ]); + + const elapsed = Date.now() - startTime; + + expect(elapsed > 300 && elapsed < 400).toBe(true); + expect(groupTasks.results).toEqual([1, 2, 3]); +}); + +test('group tasks - concurrency - parallel', async () => { + const startTime = Date.now(); + const groupTasks = await task.group(task => [ + task('one', async () => { + await sleep(100); + return 1; + }), + task('two', async () => { + await sleep(100); + return 2; + }), + task('three', async () => { + await sleep(100); + return 3; + }), + ], { concurrency: Number.POSITIVE_INFINITY }); + + const elapsed = Date.now() - startTime; + + expect(elapsed > 100 && elapsed < 200).toBe(true); + expect(groupTasks.results).toEqual([1, 2, 3]); +}); diff --git a/tests/tsconfig.json b/tests/tsconfig.json new file mode 100644 index 0000000..6244508 --- /dev/null +++ b/tests/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "..", + "include": ["."] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e048322 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "moduleResolution": "node", + "isolatedModules": true, + "esModuleInterop": true, + "jsx": "react", + "declaration": true, + "outDir": "dist", + + // Node 12 + "module": "commonjs", + "target": "ES2019" + }, + "include": [ + "src" + ] +} \ No newline at end of file