From 4a4edd09aead9b68e7c7fe156097b69d73a4802c Mon Sep 17 00:00:00 2001 From: Saravana Date: Tue, 25 Jul 2023 13:18:19 +0200 Subject: [PATCH] Full support for Multi module projects (#50) * Add validation for required inputs * Tech Debt - Adding eslint * Tech Debt - Adding prettier and fixing existing issues * Tech Debt - Removing webpack * Tech Debt - Fixing warnings * Tech Debt - Fixing single quote * Tech Debt - Turning off the dot-notation rule * Tech Debt - Cleaning up test file warnings * Tech Debt - Fixing the context const issue in test files * Send the Modules coverage information to action from process * Passing coverage-changed-files from process * Adding Module table (removed files table temporarily) * Adding Files table back in * Fixing the table formatting issues * Fixing the Files status issue * Render will add PR comment for Single and Multi module * Fixing the action test cases * Testing the glob pattern matching * Testing the glob pattern matching * Using globSync * Logging path * Filtering empty paths * typeof check for path returned * Fixing the path type * Fixing the path type * Debugging the getJsonReports function * Passing array directly to globSync * Replacing globSync with glob * Testing the @actions/glob * Revert "Testing the @actions/glob" This reverts commit f93e18a5e15e7818120e08722d6ea5357372559a. * Revert "Replacing globSync with glob" This reverts commit eada1b749398fe9038fab512243f39a983df3a57. * Revert "Passing array directly to globSync" This reverts commit faa89e8dfdb4cba5b985a9b4f34496cc81dbb58a. * Revert "Debugging the getJsonReports function" This reverts commit e581f3380882f93d149de3e5bed2a76998b5ac56. * Revert "Fixing the path type" This reverts commit d62784f13e3313efb6107e772ed973c9431197d2. * Revert "typeof check for path returned" This reverts commit 33ad78e9 * Revert "Filtering empty paths" This reverts commit 6b8f1aee4206d288a9545702f0ffb35c12088c93. * Revert "Logging path" This reverts commit 37b38218b446ee294a66d7f2c58ca78d4b3b47d8. * Revert "Using globSync" This reverts commit 575fff81b4db53075d7e627c1e424d582f49fe10. * Revert "Testing the glob pattern matching" This reverts commit 5345c336e936155afc10ff9589cd0f7603c69e79. * Using @actions/glob to support wildcards in paths * Deleting webpack.config.js * Adding more debug logs * Running Lint in CI * Improving code coverage * Updating CI to use node16 * Adding test for missing cases * Updating README.md * Updating screenshots --- .eslintignore | 1 + .eslintrc.js | 24 + .github/workflows/check.yml | 35 +- .prettierignore | 1 + .prettierrc.js | 12 + README.md | 84 +- __tests__/action.test.js | 90 + __tests__/action_aggregate.test.js | 281 +- __tests__/action_multiple.test.js | 226 +- __tests__/action_single.test.js | 405 +- __tests__/process.test.js | 476 +- __tests__/render.test.js | 362 +- action.yml | 40 +- dist/index.js | 7362 +++++++++++------ dist/licenses.txt | 160 + package-lock.json | 10707 +++++++++++++++++-------- package.json | 16 +- preview/multi-module-screenshot.png | Bin 0 -> 178982 bytes preview/screenshot.png | Bin 76786 -> 0 bytes preview/single-module-screenshot.png | Bin 0 -> 82165 bytes src/action.js | 214 +- src/index.js | 10 +- src/process.js | 202 +- src/render.js | 111 +- src/util.js | 7 + webpack.config.js | 15 - 26 files changed, 14152 insertions(+), 6689 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .prettierignore create mode 100644 .prettierrc.js create mode 100644 __tests__/action.test.js create mode 100644 preview/multi-module-screenshot.png delete mode 100644 preview/screenshot.png create mode 100644 preview/single-module-screenshot.png create mode 100644 src/util.js delete mode 100644 webpack.config.js diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..ea32dad --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +dist/index.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..0f2b0d2 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,24 @@ +module.exports = { + env: { + node: true, + es2021: true, + jest: true, + jasmine: true, + }, + extends: ['standard', 'prettier'], + overrides: [ + { + files: ['.eslintrc.{js, cjs}'], + }, + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + project: true, + }, + rules: { + quotes: ['error', 'single', { avoidEscape: true }], + 'no-var': ['error'], + 'dot-notation': ['off'], + }, +} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c9703e3..9a626aa 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -5,23 +5,30 @@ name: Tests on: push: - branches: [ main ] + branches: [main] pull_request: jobs: build: runs-on: ubuntu-latest - + steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Setup Node.js - uses: actions/setup-node@v1 - with: - node-version: '12.x' - - - name: Run unit tests - run: | - npm install - npm test + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Install + run: | + npm install + + - name: Lint + run: | + npm run lint + + - name: Run unit tests + run: | + npm test diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..ea32dad --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +dist/index.js \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..eec4b7e --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,12 @@ +// prettier.config.js, .prettierrc.js, prettier.config.mjs, or .prettierrc.mjs + +/** @type {import("prettier").Options} */ +const config = { + trailingComma: 'es5', + tabWidth: 2, + semi: false, + singleQuote: true, + useTabs: false, +} + +module.exports = config diff --git a/README.md b/README.md index 6231650..fda51bc 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ for [Creating a workflow file](https://help.github.com/en/articles/configuring-a ### Inputs -- `paths` - [**required**] Comma separated paths of the generated jacoco xml files +- `paths` - [**required**] Comma separated paths of the generated jacoco xml files (supports wildcard glob pattern) - `token` - [**required**] Github personal token to add commits to Pull Request - `min-coverage-overall` - [*optional*] The minimum code coverage that is required to pass for overall project - `min-coverage-changed-files` - [*optional*] The minimum code coverage that is required to pass for changed files @@ -25,6 +25,7 @@ for [Creating a workflow file](https://help.github.com/en/articles/configuring-a - `title` - [*optional*] Title for the Pull Request comment - `skip-if-no-changes` - [*optional*] If true, comment won't be added if there is no coverage information present for the files changed +- `debug-mode` - [*optional*] If true, run the action in debug mode and get debug logs printed in console ### Outputs @@ -59,14 +60,18 @@ jobs: id: jacoco uses: madrapps/jacoco-report@v1.4 with: - paths: ${{ github.workspace }}/build/reports/jacoco/testCoverage/testCoverage.xml + paths: | + ${{ github.workspace }}/**/build/reports/jacoco/prodNormalDebugCoverage/prodNormalDebugCoverage.xml, + ${{ github.workspace }}/**/build/reports/jacoco/**/debugCoverage.xml token: ${{ secrets.GITHUB_TOKEN }} min-coverage-overall: 40 min-coverage-changed-files: 60 ```
-output screenshot +single module screenshot +
+multi-module screenshot ### Example Project @@ -78,42 +83,65 @@ refer [jacoco-android-playground](https://github.com/thsaravana/jacoco-android-p ## Example Cases 1. If you want to fail your workflow when the minimum coverage is not met - + > You can write an additional step that uses - the Outputs for the jacoco-report action and fail the workflow. - Refer [sample pull request](https://github.com/thsaravana/jacoco-playground/pull/16) and - its [workflow](https://github.com/thsaravana/jacoco-playground/actions/runs/3026912615/workflow) + > the Outputs for the jacoco-report action and fail the workflow. + > Refer [sample pull request](https://github.com/thsaravana/jacoco-playground/pull/16) and + > its [workflow](https://github.com/thsaravana/jacoco-playground/blob/pr-failure-on-threshold/.github/workflows/coverage.yml) + ```yaml - - name: Fail PR if overall coverage is less than 80% - if: ${{ steps.jacoco.outputs.coverage-overall < 80.0 }} - uses: actions/github-script@v6 - with: - script: | - core.setFailed('Overall coverage is less than 80%!') + - name: Fail PR if overall coverage is less than 80% + if: ${{ steps.jacoco.outputs.coverage-overall < 80.0 }} + uses: actions/github-script@v6 + with: + script: | + core.setFailed('Overall coverage is less than 80%!') ``` - -2. If you don't want to add the coverage comment everytime you push a commit to a pull request, but update the existing coverage comment instead + +2. If you don't want to add the coverage comment everytime you push a commit to a pull request, but update the existing + coverage comment instead > Set the `update-comment` input to true and also set a `title` input. - Refer [sample pull request](https://github.com/thsaravana/jacoco-playground/pull/15) and - its [workflow](https://github.com/thsaravana/jacoco-playground/actions/runs/3026888514/workflow) + > Refer [sample pull request](https://github.com/thsaravana/jacoco-playground/pull/15) and + > its [workflow](https://github.com/thsaravana/jacoco-playground/blob/update-comment/.github/workflows/coverage.yml) + ```yaml - - name: Jacoco Report to PR - id: jacoco - uses: madrapps/jacoco-report@v1.4 - with: - paths: ${{ github.workspace }}/build/reports/jacoco/testCoverage/testCoverage.xml - token: ${{ secrets.GITHUB_TOKEN }} - min-coverage-overall: 40 - min-coverage-changed-files: 60 - title: Code Coverage - update-comment: true + - name: Jacoco Report to PR + id: jacoco + uses: madrapps/jacoco-report@v1.4 + with: + paths: ${{ github.workspace }}/build/reports/jacoco/testCoverage/testCoverage.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: 40 + min-coverage-changed-files: 60 + title: Code Coverage + update-comment: true ``` +3. If you have a multi-module project like `android`, with multiple modules each with its own jacoco report + + > Set the `paths` input with wildcard glob pattern (as shown in the Example workflow). This will pick all the files + > matching the pattern. Ensure your pattern matches only one report per module, since for the same module, you could + > have `debugCoverage.xml` and `releaseCoverage.xml`. + > Refer [sample pull request](https://github.com/thsaravana/jacoco-android-playground/pull/9) and + > its [workflow](https://github.com/thsaravana/jacoco-android-playground/blob/testing-multi-module-support/.github/workflows/coverage.yml) + + ```yaml + - name: Jacoco Report to PR + id: jacoco + uses: madrapps/jacoco-report@multi-module-support + with: + paths: | + ${{ github.workspace }}/**/build/reports/jacoco/**/prodNormalDebugCoverage.xml, + ${{ github.workspace }}/**/build/reports/jacoco/**/debugCoverage.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: 40 + min-coverage-changed-files: 60 + ``` ## Troubleshooting -1. If the PR is created by bots like *dependabot*, then the GITHUB_TOKEN won't have sufficient access to write the +1. If the PR is created by bots like _dependabot_, then the GITHUB_TOKEN won't have sufficient access to write the coverage comment. So add the appropriate permission to your job (as shown in the Example workflow). More information [here](https://github.com/Madrapps/jacoco-report/issues/24). diff --git a/__tests__/action.test.js b/__tests__/action.test.js new file mode 100644 index 0000000..721c72b --- /dev/null +++ b/__tests__/action.test.js @@ -0,0 +1,90 @@ +const action = require('../src/action') +const core = require('@actions/core') +const github = require('@actions/github') + +jest.mock('@actions/core') +jest.mock('@actions/github') + +describe('Input validation', function () { + function getInput(key) { + switch (key) { + case 'paths': + return './__tests__/__fixtures__/report.xml' + case 'token': + return 'SMPLEHDjasdf876a987' + } + } + + const createComment = jest.fn() + const listComments = jest.fn() + const updateComment = jest.fn() + + core.getInput = jest.fn(getInput) + github.getOctokit = jest.fn(() => { + return { + repos: { + compareCommits: jest.fn(() => { + return { + data: { + files: [ + { + filename: 'src/main/kotlin/com/madrapps/jacoco/Math.kt', + blob_url: + 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt', + }, + { + filename: + 'src/main/java/com/madrapps/jacoco/operation/StringOp.java', + blob_url: + 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java', + }, + ], + }, + } + }), + }, + issues: { + createComment, + listComments, + updateComment, + }, + } + }) + core.setFailed = jest.fn((c) => { + fail(c) + }) + + it('Fail if paths is not present', async () => { + core.getInput = jest.fn((c) => { + switch (c) { + case 'paths': + return '' + default: + return getInput(c) + } + }) + github.context.eventName = 'pull_request' + + core.setFailed = jest.fn((c) => { + expect(c).toEqual("'paths' is missing") + }) + await action.action() + }) + + it('Fail if token is not present', async () => { + core.getInput = jest.fn((c) => { + switch (c) { + case 'token': + return '' + default: + return getInput(c) + } + }) + github.context.eventName = 'pull_request' + + core.setFailed = jest.fn((c) => { + expect(c).toEqual("'token' is missing") + }) + await action.action() + }) +}) diff --git a/__tests__/action_aggregate.test.js b/__tests__/action_aggregate.test.js index 1911124..288d691 100644 --- a/__tests__/action_aggregate.test.js +++ b/__tests__/action_aggregate.test.js @@ -1,228 +1,165 @@ -const action = require("../src/action"); -const core = require("@actions/core"); -const github = require("@actions/github"); +const action = require('../src/action') +const core = require('@actions/core') +const github = require('@actions/github') -jest.mock("@actions/core"); -jest.mock("@actions/github"); +jest.mock('@actions/core') +jest.mock('@actions/github') -describe("Aggregate report", function () { - let createComment; - let listComments; - let updateComment; - let output; +describe('Aggregate report', function () { + let createComment + let listComments + let updateComment + let output function getInput(key) { switch (key) { - case "paths": - return "./__tests__/__fixtures__/aggregate-report.xml"; - case "min-coverage-overall": - return 45; - case `min-coverage-changed-files`: - return 60; + case 'paths': + return './__tests__/__fixtures__/aggregate-report.xml' + case 'token': + return 'SMPLEHDjasdf876a987' + case 'min-coverage-overall': + return 45 + case 'min-coverage-changed-files': + return 60 + case 'debug-mode': + return 'true' } } beforeEach(() => { - createComment = jest.fn(); - listComments = jest.fn(); - updateComment = jest.fn(); - output = jest.fn(); + createComment = jest.fn() + listComments = jest.fn() + updateComment = jest.fn() + output = jest.fn() - core.getInput = jest.fn(getInput); + core.getInput = jest.fn(getInput) github.getOctokit = jest.fn(() => { return { repos: { compareCommits: jest.fn(() => { - return compareCommitsResponse; + return compareCommitsResponse }), }, issues: { - createComment: createComment, - listComments: listComments, - updateComment: updateComment, + createComment, + listComments, + updateComment, }, - }; - }); + } + }) core.setFailed = jest.fn((c) => { - fail(c); - }); + fail(c) + }) }) const compareCommitsResponse = { data: { files: [ { - filename: "src/main/java/com/madrapps/playground/MainViewModel.kt", + filename: 'src/main/java/com/madrapps/playground/MainViewModel.kt', blob_url: - "https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt", + 'https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt', }, { - filename: "src/main/java/com/madrapps/math/Math.kt", + filename: 'src/main/java/com/madrapps/math/Math.kt', blob_url: - "https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt", + 'https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt', }, ], }, - }; - - describe("Pull Request event", function () { - const context = { - eventName: "pull_request", - payload: { - pull_request: { - number: "45", - base: { - sha: "guasft7asdtf78asfd87as6df7y2u3", - }, - head: { - sha: "aahsdflais76dfa78wrglghjkaghkj", - }, + } + + describe('Pull Request event', function () { + const eventName = 'pull_request' + const payload = { + pull_request: { + number: '45', + base: { + sha: 'guasft7asdtf78asfd87as6df7y2u3', + }, + head: { + sha: 'aahsdflais76dfa78wrglghjkaghkj', }, }, - repo: "jacoco-android-playground", - owner: "madrapps", - }; - - it("publish proper comment", async () => { - github.context = context; + } - await action.action(); + it('publish proper comment', async () => { + initContext(eventName, payload) + await action.action() expect(createComment.mock.calls[0][0].body) - .toEqual(`|File|Coverage [65.91%]|:green_apple:| + .toEqual(`|Total Project Coverage|76.32%|:green_apple:| |:-|:-:|:-:| -|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| -|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:x:| -|Total Project Coverage|76.32%|:green_apple:| -|:-|:-:|:-:|`); - }); +|Module|Coverage|| +|:-|:-:|:-:| +|module-2|70.37%|:green_apple:| +|module-3|8.33%|:x:| + +
+Files - it("updates a previous comment", async () => { - github.context = context; +|Module|File|Coverage [65.91%]|| +|:-|:-|:-:|:-:| +|module-2|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| +|module-3|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:x:| +
`) + }) + + it('updates a previous comment', async () => { + initContext(eventName, payload) const title = 'JaCoCo Report' core.getInput = jest.fn((c) => { switch (c) { - case "title": - return title; - case "update-comment": - return "true"; + case 'title': + return title + case 'update-comment': + return 'true' default: return getInput(c) } - }); + }) listComments.mockReturnValue({ data: [ - {id: 1, body: "some comment"}, - {id: 2, body: `### ${title}\n to update`}, - ] + { id: 1, body: 'some comment' }, + { id: 2, body: `### ${title}\n to update` }, + ], }) - await action.action(); - - expect(updateComment.mock.calls[0][0].comment_id).toEqual(2); - expect(createComment).toHaveBeenCalledTimes(0); - }); - - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; - - await action.action(); - - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 76.32]); - }); - - it("set changed files coverage output", async () => { - github.context = context; - core.setOutput = output; - - await action.action(); - - const out = output.mock.calls[1]; - expect(out).toEqual(["coverage-changed-files", 65.91]); - }); - }); - - describe("Pull Request Target event", function () { - const context = { - eventName: "pull_request_target", - payload: { - pull_request: { - number: "45", - base: { - sha: "guasft7asdtf78asfd87as6df7y2u3", - }, - head: { - sha: "aahsdflais76dfa78wrglghjkaghkj", - }, - }, - }, - repo: "jacoco-playground", - owner: "madrapps", - }; + await action.action() - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; + expect(updateComment.mock.calls[0][0].comment_id).toEqual(2) + expect(createComment).toHaveBeenCalledTimes(0) + }) - await action.action(); + it('set overall coverage output', async () => { + initContext(eventName, payload) + core.setOutput = output - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 76.32]); - }); - }) + await action.action() - describe("Push event", function () { - const context = { - eventName: "push", - payload: { - before: "guasft7asdtf78asfd87as6df7y2u3", - after: "aahsdflais76dfa78wrglghjkaghkj", - }, - repo: "jacoco-playground", - owner: "madrapps", - }; - - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; - - await action.action(); - - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 76.32]); - }); - - it("set changed files coverage output", async () => { - github.context = context; - core.setOutput = output; - - await action.action(); - - const out = output.mock.calls[1]; - expect(out).toEqual(["coverage-changed-files", 65.91]); - }); - }); - - describe("Other than push or pull_request or pull_request_target event", function () { - const context = { - eventName: "pr_review", - }; - - it("Fail by throwing appropriate error", async () => { - github.context = context; - core.setFailed = jest.fn((c) => { - expect(c).toEqual( - "Only pull requests and pushes are supported, pr_review not supported." - ); - }); - core.setOutput = output; - - await action.action(); - }); - }); -}); + const out = output.mock.calls[0] + expect(out).toEqual(['coverage-overall', 76.32]) + }) + + it('set changed files coverage output', async () => { + initContext(eventName, payload) + core.setOutput = output + + await action.action() + + const out = output.mock.calls[1] + expect(out).toEqual(['coverage-changed-files', 65.91]) + }) + }) +}) + +function initContext(eventName, payload) { + const context = github.context + context.eventName = eventName + context.payload = payload + context.repo = 'jacoco-playground' + context.owner = 'madrapps' +} diff --git a/__tests__/action_multiple.test.js b/__tests__/action_multiple.test.js index 6df4baf..bd7782f 100644 --- a/__tests__/action_multiple.test.js +++ b/__tests__/action_multiple.test.js @@ -1,158 +1,152 @@ -const action = require("../src/action"); -const core = require("@actions/core"); -const github = require("@actions/github"); +const action = require('../src/action') +const core = require('@actions/core') +const github = require('@actions/github') -jest.mock("@actions/core"); -jest.mock("@actions/github"); +jest.mock('@actions/core') +jest.mock('@actions/github') -describe("Multiple reports", function () { - const comment = jest.fn(); - const output = jest.fn(); +describe('Multiple reports', function () { + const comment = jest.fn() + const output = jest.fn() const compareCommitsResponse = { data: { files: [ { - filename: "src/main/java/com/madrapps/playground/MainViewModel.kt", + filename: 'src/main/java/com/madrapps/playground/MainViewModel.kt', blob_url: - "https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt", + 'https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt', }, { - filename: "src/main/java/com/madrapps/math/Math.kt", + filename: 'src/main/java/com/madrapps/math/Math.kt', blob_url: - "https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt", + 'https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt', }, ], }, - }; + } core.getInput = jest.fn((c) => { switch (c) { - case "paths": - return "./__tests__/__fixtures__/multi_module/appCoverage.xml,./__tests__/__fixtures__/multi_module/mathCoverage.xml,./__tests__/__fixtures__/multi_module/textCoverage.xml"; - case "min-coverage-overall": - return 45; - case `min-coverage-changed-files`: - return 60; + case 'paths': + return './__tests__/__fixtures__/multi_module/appCoverage.xml,./__tests__/__fixtures__/multi_module/mathCoverage.xml,./__tests__/__fixtures__/multi_module/textCoverage.xml' + case 'token': + return 'SMPLEHDjasdf876a987' + case 'min-coverage-overall': + return 45 + case 'min-coverage-changed-files': + return 60 + case 'debug-mode': + return 'false' } - }); + }) github.getOctokit = jest.fn(() => { return { repos: { compareCommits: jest.fn(() => { - return compareCommitsResponse; + return compareCommitsResponse }), }, issues: { createComment: comment, }, - }; - }); + } + }) core.setFailed = jest.fn((c) => { - fail(c); - }); - - describe("Pull Request event", function () { - const context = { - eventName: "pull_request", - payload: { - pull_request: { - number: "45", - base: { - sha: "guasft7asdtf78asfd87as6df7y2u3", - }, - head: { - sha: "aahsdflais76dfa78wrglghjkaghkj", - }, + fail(c) + }) + + describe('Pull Request event', function () { + const eventName = 'pull_request' + const payload = { + pull_request: { + number: '45', + base: { + sha: 'guasft7asdtf78asfd87as6df7y2u3', + }, + head: { + sha: 'aahsdflais76dfa78wrglghjkaghkj', }, }, - repo: "jacoco-android-playground", - owner: "madrapps", - }; - - it("publish proper comment", async () => { - github.context = context; + } - await action.action(); + it('publish proper comment', async () => { + initContext(eventName, payload) + await action.action() expect(comment.mock.calls[0][0].body) - .toEqual(`|File|Coverage [65.91%]|:green_apple:| + .toEqual(`|Total Project Coverage|25.32%|:x:| |:-|:-:|:-:| -|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| -|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:x:| -|Total Project Coverage|25.32%|:x:| -|:-|:-:|:-:|`); - }); +|Module|Coverage|| +|:-|:-:|:-:| +|math|70.37%|:green_apple:| +|app|8.33%|:x:| - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; +
+Files - await action.action(); +|Module|File|Coverage [65.91%]|| +|:-|:-|:-:|:-:| +|math|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/math/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| +|app|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/blob/main/app/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:x:| - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 25.32]); - }); +
`) + }) - it("set changed files coverage output", async () => { - github.context = context; - core.setOutput = output; + it('set overall coverage output', async () => { + initContext(eventName, payload) + core.setOutput = output - await action.action(); + await action.action() - const out = output.mock.calls[1]; - expect(out).toEqual(["coverage-changed-files", 65.91]); - }); - }); + const out = output.mock.calls[0] + expect(out).toEqual(['coverage-overall', 25.32]) + }) - describe("Push event", function () { - const context = { - eventName: "push", - payload: { - before: "guasft7asdtf78asfd87as6df7y2u3", - after: "aahsdflais76dfa78wrglghjkaghkj", - }, - repo: "jacoco-playground", - owner: "madrapps", - }; - - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; - - await action.action(); - - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 25.32]); - }); - - it("set changed files coverage output", async () => { - github.context = context; - core.setOutput = output; - - await action.action(); - - const out = output.mock.calls[1]; - expect(out).toEqual(["coverage-changed-files", 65.91]); - }); - }); - - describe("Other than push or pull_request event", function () { - const context = { - eventName: "pr_review", - }; - - it("Fail by throwing appropriate error", async () => { - github.context = context; - core.setFailed = jest.fn((c) => { - expect(c).toEqual( - "Only pull requests and pushes are supported, pr_review not supported." - ); - }); - core.setOutput = output; - - await action.action(); - }); - }); -}); + it('set changed files coverage output', async () => { + initContext(eventName, payload) + core.setOutput = output + + await action.action() + + const out = output.mock.calls[1] + expect(out).toEqual(['coverage-changed-files', 65.91]) + }) + }) + + describe('Push event', function () { + const payload = { + before: 'guasft7asdtf78asfd87as6df7y2u3', + after: 'aahsdflais76dfa78wrglghjkaghkj', + } + + it('set overall coverage output', async () => { + initContext('push', payload) + core.setOutput = output + + await action.action() + + const out = output.mock.calls[0] + expect(out).toEqual(['coverage-overall', 25.32]) + }) + + it('set changed files coverage output', async () => { + initContext('push', payload) + core.setOutput = output + + await action.action() + + const out = output.mock.calls[1] + expect(out).toEqual(['coverage-changed-files', 65.91]) + }) + }) +}) + +function initContext(eventName, payload) { + const context = github.context + context.eventName = eventName + context.payload = payload + context.repo = 'jacoco-playground' + context.owner = 'madrapps' +} diff --git a/__tests__/action_single.test.js b/__tests__/action_single.test.js index 3860dce..3b188e1 100644 --- a/__tests__/action_single.test.js +++ b/__tests__/action_single.test.js @@ -1,292 +1,331 @@ -const action = require("../src/action"); -const core = require("@actions/core"); -const github = require("@actions/github"); +const action = require('../src/action') +const core = require('@actions/core') +const github = require('@actions/github') -jest.mock("@actions/core"); -jest.mock("@actions/github"); +jest.mock('@actions/core') +jest.mock('@actions/github') -describe("Single report", function () { - let createComment; - let listComments; - let updateComment; - let output; +describe('Single report', function () { + let createComment + let listComments + let updateComment + let output function getInput(key) { switch (key) { - case "paths": - return "./__tests__/__fixtures__/report.xml"; - case "min-coverage-overall": - return 45; - case `min-coverage-changed-files`: - return 60; + case 'paths': + return './__tests__/__fixtures__/report.xml' + case 'token': + return 'SMPLEHDjasdf876a987' + case 'min-coverage-overall': + return 45 + case 'min-coverage-changed-files': + return 60 + case 'debug-mode': + return 'true' } } beforeEach(() => { - createComment = jest.fn(); - listComments = jest.fn(); - updateComment = jest.fn(); - output = jest.fn(); + createComment = jest.fn() + listComments = jest.fn() + updateComment = jest.fn() + output = jest.fn() - core.getInput = jest.fn(getInput); + core.getInput = jest.fn(getInput) github.getOctokit = jest.fn(() => { return { repos: { compareCommits: jest.fn(() => { - return compareCommitsResponse; + return compareCommitsResponse }), }, issues: { - createComment: createComment, - listComments: listComments, - updateComment: updateComment, + createComment, + listComments, + updateComment, }, - }; - }); + } + }) core.setFailed = jest.fn((c) => { - fail(c); - }); + fail(c) + }) }) const compareCommitsResponse = { data: { files: [ { - filename: "src/main/kotlin/com/madrapps/jacoco/Math.kt", + filename: 'src/main/kotlin/com/madrapps/jacoco/Math.kt', blob_url: - "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt", + 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt', }, { - filename: "src/main/java/com/madrapps/jacoco/operation/StringOp.java", + filename: 'src/main/java/com/madrapps/jacoco/operation/StringOp.java', blob_url: - "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java", + 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java', }, ], }, - }; - - describe("Pull Request event", function () { - const context = { - eventName: "pull_request", - payload: { - pull_request: { - number: "45", - base: { - sha: "guasft7asdtf78asfd87as6df7y2u3", - }, - head: { - sha: "aahsdflais76dfa78wrglghjkaghkj", - }, + } + + describe('Pull Request event', function () { + const eventName = 'pull_request' + const payload = { + pull_request: { + number: '45', + base: { + sha: 'guasft7asdtf78asfd87as6df7y2u3', + }, + head: { + sha: 'aahsdflais76dfa78wrglghjkaghkj', }, }, - repo: "jacoco-playground", - owner: "madrapps", - }; - - it("publish proper comment", async () => { - github.context = context; + } - await action.action(); + it('publish proper comment', async () => { + initContext(eventName, payload) + await action.action() expect(createComment.mock.calls[0][0].body) - .toEqual(`|File|Coverage [63.64%]|:green_apple:| + .toEqual(`|Total Project Coverage|49.02%|:green_apple:| |:-|:-:|:-:| -|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| -|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:| - -|Total Project Coverage|49.02%|:green_apple:| -|:-|:-:|:-:|`); - }); - it("updates a previous comment", async () => { - github.context = context; +|File|Coverage [63.64%]|| +|:-|:-:|:-:| +|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| +|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:|`) + }) + describe('With update-comment ON', function () { const title = 'JaCoCo Report' - core.getInput = jest.fn((c) => { - switch (c) { - case "title": - return title; - case "update-comment": - return "true"; + function mockInput(key) { + switch (key) { + case 'title': + return title + case 'update-comment': + return 'true' default: - return getInput(c) + return getInput(key) } - }); + } + + it('if comment exists, update it', async () => { + initContext(eventName, payload) + core.getInput = jest.fn((key) => { + return mockInput(key) + }) + + listComments.mockReturnValue({ + data: [ + { id: 1, body: 'some comment' }, + { id: 2, body: `### ${title}\n to update` }, + ], + }) + + await action.action() - listComments.mockReturnValue({ - data: [ - {id: 1, body: "some comment"}, - {id: 2, body: `### ${title}\n to update`}, - ] + expect(updateComment.mock.calls[0][0].comment_id).toEqual(2) + expect(createComment).toHaveBeenCalledTimes(0) }) - await action.action(); + it('if comment does not exist, create new comment', async () => { + initContext(eventName, payload) + core.getInput = jest.fn((key) => { + return mockInput(key) + }) + listComments.mockReturnValue({ + data: [{ id: 1, body: 'some comment' }], + }) - expect(updateComment.mock.calls[0][0].comment_id).toEqual(2); - expect(createComment).toHaveBeenCalledTimes(0); - }); + await action.action() - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; + expect(createComment.mock.calls[0][0].body).not.toBeNull() + expect(updateComment).toHaveBeenCalledTimes(0) + }) - await action.action(); + it('if title not set, warn user and create new comment', async () => { + initContext(eventName, payload) + core.getInput = jest.fn((c) => { + switch (c) { + case 'title': + return '' + default: + return mockInput(c) + } + }) + + listComments.mockReturnValue({ + data: [ + { id: 1, body: 'some comment' }, + { id: 2, body: `### ${title}\n to update` }, + ], + }) + + await action.action() + + expect(core.info).toBeCalledWith( + "'title' is not set. 'update-comment' does not work without 'title'" + ) + expect(createComment.mock.calls[0][0].body).not.toBeNull() + expect(updateComment).toHaveBeenCalledTimes(0) + }) + }) - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 49.02]); - }); + it('set overall coverage output', async () => { + initContext(eventName, payload) + core.setOutput = output - it("set changed files coverage output", async () => { - github.context = context; - core.setOutput = output; + await action.action() - await action.action(); + const out = output.mock.calls[0] + expect(out).toEqual(['coverage-overall', 49.02]) + }) - const out = output.mock.calls[1]; - expect(out).toEqual(["coverage-changed-files", 63.64]); - }); + it('set changed files coverage output', async () => { + initContext(eventName, payload) + core.setOutput = output - describe("Skip if no changes set to true", function () { + await action.action() - github.context = context; + const out = output.mock.calls[1] + expect(out).toEqual(['coverage-changed-files', 63.64]) + }) + describe('Skip if no changes set to true', function () { function mockInput() { core.getInput = jest.fn((c) => { switch (c) { - case "skip-if-no-changes": - return "true"; + case 'skip-if-no-changes': + return 'true' default: return getInput(c) } - }); + }) } - it("Add comment when coverage present for changes files", async () => { - mockInput(); + it('Add comment when coverage present for changes files', async () => { + initContext(eventName, payload) + mockInput() - await action.action(); + await action.action() expect(createComment.mock.calls[0][0].body) - .toEqual(`|File|Coverage [63.64%]|:green_apple:| + .toEqual(`|Total Project Coverage|49.02%|:green_apple:| |:-|:-:|:-:| -|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| -|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:| -|Total Project Coverage|49.02%|:green_apple:| -|:-|:-:|:-:|`); +|File|Coverage [63.64%]|| +|:-|:-:|:-:| +|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| +|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:|`) }) it("Don't add comment when coverage absent for changes files", async () => { - mockInput(); + initContext(eventName, payload) + mockInput() const compareCommitsResponse = { data: { files: [ { - filename: "src/main/kotlin/com/madrapps/jacoco/asset.yml", + filename: 'src/main/kotlin/com/madrapps/jacoco/asset.yml', blob_url: - "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/asset.yml", + 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/asset.yml', }, ], }, - }; + } github.getOctokit = jest.fn(() => { return { repos: { compareCommits: jest.fn(() => { - return compareCommitsResponse; + return compareCommitsResponse }), }, issues: { - createComment: createComment, - listComments: listComments, - updateComment: updateComment, + createComment, + listComments, + updateComment, }, - }; - }); + } + }) - await action.action(); + await action.action() expect(createComment).not.toHaveBeenCalled() }) }) - }); - - describe("Pull Request Target event", function () { - const context = { - eventName: "pull_request_target", - payload: { - pull_request: { - number: "45", - base: { - sha: "guasft7asdtf78asfd87as6df7y2u3", - }, - head: { - sha: "aahsdflais76dfa78wrglghjkaghkj", - }, + }) + + describe('Pull Request Target event', function () { + const payload = { + pull_request: { + number: '45', + base: { + sha: 'guasft7asdtf78asfd87as6df7y2u3', + }, + head: { + sha: 'aahsdflais76dfa78wrglghjkaghkj', }, }, - repo: "jacoco-playground", - owner: "madrapps", - }; + } - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; + it('set overall coverage output', async () => { + initContext('pull_request_target', payload) + core.setOutput = output - await action.action(); + await action.action() - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 49.02]); - }); + const out = output.mock.calls[0] + expect(out).toEqual(['coverage-overall', 49.02]) + }) }) - describe("Push event", function () { - const context = { - eventName: "push", - payload: { - before: "guasft7asdtf78asfd87as6df7y2u3", - after: "aahsdflais76dfa78wrglghjkaghkj", - }, - repo: "jacoco-playground", - owner: "madrapps", - }; - - it("set overall coverage output", async () => { - github.context = context; - core.setOutput = output; + describe('Push event', function () { + const payload = { + before: 'guasft7asdtf78asfd87as6df7y2u3', + after: 'aahsdflais76dfa78wrglghjkaghkj', + } - await action.action(); + it('set overall coverage output', async () => { + initContext('push', payload) + core.setOutput = output - const out = output.mock.calls[0]; - expect(out).toEqual(["coverage-overall", 49.02]); - }); + await action.action() - it("set changed files coverage output", async () => { - github.context = context; - core.setOutput = output; + const out = output.mock.calls[0] + expect(out).toEqual(['coverage-overall', 49.02]) + }) - await action.action(); + it('set changed files coverage output', async () => { + initContext('push', payload) + core.setOutput = output - const out = output.mock.calls[1]; - expect(out).toEqual(["coverage-changed-files", 63.64]); - }); - }); + await action.action() - describe("Other than push or pull_request or pull_request_target event", function () { - const context = { - eventName: "pr_review", - }; + const out = output.mock.calls[1] + expect(out).toEqual(['coverage-changed-files', 63.64]) + }) + }) - it("Fail by throwing appropriate error", async () => { - github.context = context; + describe('Other than push or pull_request or pull_request_target event', function () { + it('Fail by throwing appropriate error', async () => { + initContext('pr_review', {}) core.setFailed = jest.fn((c) => { expect(c).toEqual( - "Only pull requests and pushes are supported, pr_review not supported." - ); - }); - core.setOutput = output; - - await action.action(); - }); - }); -}); + 'Only pull requests and pushes are supported, pr_review not supported.' + ) + }) + core.setOutput = output + + await action.action() + }) + }) +}) + +function initContext(eventName, payload) { + const context = github.context + context.eventName = eventName + context.payload = payload + context.repo = 'jacoco-playground' + context.owner = 'madrapps' +} diff --git a/__tests__/process.test.js b/__tests__/process.test.js index 8947a79..620454f 100644 --- a/__tests__/process.test.js +++ b/__tests__/process.test.js @@ -1,196 +1,348 @@ -const fs = require("fs"); -const parser = require("xml2js"); -const process = require("../src/process"); +const fs = require('fs') +const parser = require('xml2js') +const process = require('../src/process') -describe("get overall coverage", function () { - describe("single report", function () { - test("get project coverage", async () => { - const reports = await getSingleReport(); - const coverage = process.getOverallCoverage(reports); - expect(coverage.project).toBeCloseTo(49.01, 1); - }); - }); +describe('process', function () { + describe('get overall coverage', function () { + describe('single report', function () { + test('get project coverage', async () => { + const reports = await getSingleReport() + const coverage = process.getOverallCoverage(reports) + expect(coverage.project).toBeCloseTo(49.01, 1) + }) + }) - describe("multiple reports", function () { - test("get project coverage", async () => { - const reports = await getMultipleReports(); - const coverage = process.getOverallCoverage(reports); - expect(coverage.project).toBeCloseTo(25.32, 1); - }); - }); -}); + describe('multiple reports', function () { + test('get project coverage', async () => { + const reports = await getMultipleReports() + const coverage = process.getOverallCoverage(reports) + expect(coverage.project).toBeCloseTo(25.32, 1) + }) + }) + }) -describe("get file coverage", function () { - describe("single report", function () { - it("no files changed", async () => { - const v = getSingleReport(); - const reports = await v; - const changedFiles = []; - const actual = process.getFileCoverage(reports, changedFiles); - expect(actual.files).toEqual([]); - }); + describe('get file coverage', function () { + describe('single report', function () { + it('no files changed', async () => { + const v = getSingleReport() + const reports = await v + const changedFiles = [] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [], + isMultiModule: false, + 'coverage-changed-files': 100, + }) + }) - it("one file changed", async () => { - const reports = await getSingleReport(); - const changedFiles = [ - { - filePath: "src/main/java/com/madrapps/jacoco/operation/StringOp.java", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java", - }, - ]; - const actual = process.getFileCoverage(reports, changedFiles); - expect(actual).toEqual({ - files: [ + it('one file changed', async () => { + const reports = await getSingleReport() + const changedFiles = [ { filePath: - "src/main/java/com/madrapps/jacoco/operation/StringOp.java", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java", - name: "StringOp.java", - covered: 7, - missed: 0, - percentage: 100, + 'src/main/java/com/madrapps/jacoco/operation/StringOp.java', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java', }, - ], - percentage: 100, - }); - }); + ] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [ + { + name: 'jacoco-playground', + files: [ + { + filePath: + 'src/main/java/com/madrapps/jacoco/operation/StringOp.java', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java', + name: 'StringOp.java', + covered: 7, + missed: 0, + percentage: 100, + }, + ], + percentage: 49.02, + }, + ], + isMultiModule: false, + 'coverage-changed-files': 100, + }) + }) - it("multiple files changed", async () => { - const reports = await getSingleReport(); - const changedFiles = [ - { - filePath: "src/main/java/com/madrapps/jacoco/operation/StringOp.java", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java", - }, - { - filePath: "src/main/kotlin/com/madrapps/jacoco/Math.kt", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt", - }, - { - filePath: - "src/test/java/com/madrapps/jacoco/operation/StringOpTest.java", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/test/java/com/madrapps/jacoco/operation/StringOpTest.java", - }, - ]; - const actual = process.getFileCoverage(reports, changedFiles); - expect(actual).toEqual({ - files: [ + it('multiple files changed', async () => { + const reports = await getSingleReport() + const changedFiles = [ { filePath: - "src/main/java/com/madrapps/jacoco/operation/StringOp.java", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java", - name: "StringOp.java", - covered: 7, - missed: 0, - percentage: 100, + 'src/main/java/com/madrapps/jacoco/operation/StringOp.java', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java', + }, + { + filePath: 'src/main/kotlin/com/madrapps/jacoco/Math.kt', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt', }, { - covered: 7, - missed: 8, - percentage: 46.67, - filePath: "src/main/kotlin/com/madrapps/jacoco/Math.kt", - name: "Math.kt", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt", + filePath: + 'src/test/java/com/madrapps/jacoco/operation/StringOpTest.java', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/test/java/com/madrapps/jacoco/operation/StringOpTest.java', }, - ], - percentage: 63.64, - }); - }); - }); + ] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [ + { + name: 'jacoco-playground', + files: [ + { + filePath: + 'src/main/java/com/madrapps/jacoco/operation/StringOp.java', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java', + name: 'StringOp.java', + covered: 7, + missed: 0, + percentage: 100, + }, + { + covered: 7, + missed: 8, + percentage: 46.67, + filePath: 'src/main/kotlin/com/madrapps/jacoco/Math.kt', + name: 'Math.kt', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt', + }, + ], + percentage: 49.02, + }, + ], + isMultiModule: false, + 'coverage-changed-files': 63.64, + }) + }) + }) - describe("multiple reports", function () { - it("no files changed", async () => { - const reports = await getMultipleReports(); - const changedFiles = []; - const actual = process.getFileCoverage(reports, changedFiles); - expect(actual.files).toEqual([]); - }); + describe('multiple reports', function () { + it('no files changed', async () => { + const reports = await getMultipleReports() + const changedFiles = [] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [], + isMultiModule: true, + 'coverage-changed-files': 100, + }) + }) - it("one file changed", async () => { - const reports = await getMultipleReports(); - const changedFiles = [ - { - filePath: "src/main/java/com/madrapps/playground/MainViewModel.kt", - url: "https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt", - }, - ]; - const actual = process.getFileCoverage(reports, changedFiles); - expect(actual).toEqual({ - files: [ + it('one file changed', async () => { + const reports = await getMultipleReports() + const changedFiles = [ { - filePath: "src/main/java/com/madrapps/playground/MainViewModel.kt", - url: "https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt", - name: "MainViewModel.kt", - covered: 10, - missed: 7, - percentage: 58.82, + filePath: 'src/main/java/com/madrapps/playground/MainViewModel.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', }, - ], - percentage: 58.82, - }); - }); + ] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [ + { + files: [ + { + covered: 10, + filePath: + 'src/main/java/com/madrapps/playground/MainViewModel.kt', + missed: 7, + name: 'MainViewModel.kt', + percentage: 58.82, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', + }, + ], + name: 'app', + percentage: 8.33, + }, + ], + isMultiModule: true, + 'coverage-changed-files': 58.82, + }) + }) - it("multiple files changed", async () => { - const reports = await getMultipleReports(); - const changedFiles = [ - { - filePath: "src/main/java/com/madrapps/playground/MainViewModel.kt", - url: "https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt", - }, - { - filePath: "src/main/java/com/madrapps/math/Math.kt", - url: "https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt", - }, - { - filePath: "src/test/java/com/madrapps/math/MathTest.kt", - url: "https://github.com/thsaravana/jacoco-android-playground/src/test/java/com/madrapps/math/MathTest.kt", - }, - ]; - const actual = process.getFileCoverage(reports, changedFiles); - expect(actual).toEqual({ - files: [ + it('multiple files changed', async () => { + const reports = await getMultipleReports() + const changedFiles = [ { - covered: 19, - missed: 8, - percentage: 70.37, - filePath: "src/main/java/com/madrapps/math/Math.kt", - name: "Math.kt", - url: "https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt", + filePath: 'src/main/java/com/madrapps/playground/MainViewModel.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', }, { - filePath: "src/main/java/com/madrapps/playground/MainViewModel.kt", - url: "https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt", - name: "MainViewModel.kt", - covered: 10, - missed: 7, - percentage: 58.82, + filePath: 'src/main/java/com/madrapps/math/Math.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt', }, - ], - percentage: 65.91, - }); - }); - }); -}); + { + filePath: 'src/test/java/com/madrapps/math/MathTest.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/test/java/com/madrapps/math/MathTest.kt', + }, + ] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [ + { + files: [ + { + covered: 19, + filePath: 'src/main/java/com/madrapps/math/Math.kt', + missed: 8, + name: 'Math.kt', + percentage: 70.37, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt', + }, + ], + name: 'math', + percentage: 70.37, + }, + { + name: 'app', + percentage: 8.33, + files: [ + { + covered: 10, + filePath: + 'src/main/java/com/madrapps/playground/MainViewModel.kt', + missed: 7, + name: 'MainViewModel.kt', + percentage: 58.82, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', + }, + ], + }, + ], + isMultiModule: true, + 'coverage-changed-files': 65.91, + }) + }) + }) + + describe('aggregate reports', function () { + it('no files changed', async () => { + const reports = await getAggregateReport() + const changedFiles = [] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [], + isMultiModule: true, + 'coverage-changed-files': 100, + }) + }) + + it('one file changed', async () => { + const reports = await getAggregateReport() + const changedFiles = [ + { + filePath: 'src/main/java/com/madrapps/playground/MainViewModel.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', + }, + ] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [ + { + files: [ + { + covered: 10, + filePath: + 'src/main/java/com/madrapps/playground/MainViewModel.kt', + missed: 7, + name: 'MainViewModel.kt', + percentage: 58.82, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', + }, + ], + name: 'module-3', + percentage: 8.33, + }, + ], + isMultiModule: true, + 'coverage-changed-files': 58.82, + }) + }) + + it('multiple files changed', async () => { + const reports = await getAggregateReport() + const changedFiles = [ + { + filePath: 'src/main/java/com/madrapps/playground/MainViewModel.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', + }, + { + filePath: 'src/main/java/com/madrapps/math/Math.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt', + }, + { + filePath: 'src/test/java/com/madrapps/math/MathTest.kt', + url: 'https://github.com/thsaravana/jacoco-android-playground/src/test/java/com/madrapps/math/MathTest.kt', + }, + ] + const actual = process.getProjectCoverage(reports, changedFiles) + expect(actual).toEqual({ + modules: [ + { + files: [ + { + covered: 19, + filePath: 'src/main/java/com/madrapps/math/Math.kt', + missed: 8, + name: 'Math.kt', + percentage: 70.37, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt', + }, + ], + name: 'module-2', + percentage: 70.37, + }, + { + files: [ + { + covered: 10, + filePath: + 'src/main/java/com/madrapps/playground/MainViewModel.kt', + missed: 7, + name: 'MainViewModel.kt', + percentage: 58.82, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', + }, + ], + name: 'module-3', + percentage: 8.33, + }, + ], + isMultiModule: true, + 'coverage-changed-files': 65.91, + }) + }) + }) + }) +}) + +async function getAggregateReport() { + const reportPath = './__tests__/__fixtures__/aggregate-report.xml' + const report = await getReport(reportPath) + return [report] +} async function getMultipleReports() { - const testFolder = "./__tests__/__fixtures__/multi_module"; + const testFolder = './__tests__/__fixtures__/multi_module' return Promise.all( fs.readdirSync(testFolder).map(async (file) => { - const reportPath = testFolder + "/" + file; - const report = await getReport(reportPath); - return report; + const reportPath = testFolder + '/' + file + return await getReport(reportPath) }) - ); + ) } async function getSingleReport() { - const reportPath = "./__tests__/__fixtures__/report.xml"; - const report = await getReport(reportPath); - return [report]; + const reportPath = './__tests__/__fixtures__/report.xml' + const report = await getReport(reportPath) + return [report] } async function getReport(path) { - const reportXml = await fs.promises.readFile(path, "utf-8"); - const json = await parser.parseStringPromise(reportXml); - return json["report"]; + const reportXml = await fs.promises.readFile(path, 'utf-8') + const json = await parser.parseStringPromise(reportXml) + return json['report'] } diff --git a/__tests__/render.test.js b/__tests__/render.test.js index 3b3265a..24e558f 100644 --- a/__tests__/render.test.js +++ b/__tests__/render.test.js @@ -1,129 +1,305 @@ -const render = require("../src/render"); - -describe("get PR Comment", function () { - describe("no files", function () { - const files = { - files: [], - }; - it("coverage greater than min coverage", function () { - const comment = render.getPRComment(49.23, files, 30, 50); +const render = require('../src/render') + +describe('get PR Comment', function () { + describe('no modules', function () { + const project = { + modules: [], + 'coverage-changed-files': 100, + } + it('coverage greater than min coverage', function () { + const comment = render.getPRComment(49.23, project, 30, 50) expect(comment).toEqual( - `> There is no coverage information present for the Files changed + `|Total Project Coverage|49.23%|:green_apple:| +|:-|:-:|:-:| -|Total Project Coverage|49.23%|:green_apple:| -|:-|:-:|:-:|` - ); - }); +> There is no coverage information present for the Files changed` + ) + }) - it("coverage lesser than min coverage", function () { - const comment = render.getPRComment(49.23, files, 70, 50); + it('coverage lesser than min coverage', function () { + const comment = render.getPRComment(49.23, project, 70, 50) expect(comment).toEqual( - `> There is no coverage information present for the Files changed + `|Total Project Coverage|49.23%|:x:| +|:-|:-:|:-:| -|Total Project Coverage|49.23%|:x:| -|:-|:-:|:-:|` - ); - }); +> There is no coverage information present for the Files changed` + ) + }) - it("with title", function () { - const comment = render.getPRComment(49.23, files, 70, 50, "Coverage"); + it('with title', function () { + const comment = render.getPRComment(49.23, project, 70, 50, 'Coverage') expect(comment).toEqual( `### Coverage -> There is no coverage information present for the Files changed - |Total Project Coverage|49.23%|:x:| -|:-|:-:|:-:|` - ); - }); - }); - - describe("multiple files", function () { - const files = { - files: [ - { - filePath: "src/main/java/com/madrapps/jacoco/operation/StringOp.java", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java", - name: "StringOp.java", - covered: 7, - missed: 0, - percentage: 100, - }, +|:-|:-:|:-:| + +> There is no coverage information present for the Files changed` + ) + }) + }) + + describe('single module', function () { + const project = { + modules: [ { - covered: 7, - missed: 8, - percentage: 46.67, - filePath: "src/main/kotlin/com/madrapps/jacoco/Math.kt", - name: "Math.kt", - url: "https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt", + name: 'jacoco-playground', + percentage: 49.23, + files: [ + { + filePath: + 'src/main/java/com/madrapps/jacoco/operation/StringOp.java', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java', + name: 'StringOp.java', + covered: 7, + missed: 0, + percentage: 100, + }, + { + covered: 7, + missed: 8, + percentage: 46.67, + filePath: 'src/main/kotlin/com/madrapps/jacoco/Math.kt', + name: 'Math.kt', + url: 'https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt', + }, + ], }, ], - percentage: 63.64, - }; + isMultiModule: false, + 'coverage-changed-files': 63.64, + } - it("coverage greater than min coverage for overall project", function () { - const comment = render.getPRComment(49.23, files, 30, 60); + it('coverage greater than min coverage for overall project', function () { + const comment = render.getPRComment(49.23, project, 30, 60) expect(comment).toEqual( - `|File|Coverage [63.64%]|:green_apple:| + `|Total Project Coverage|49.23%|:green_apple:| +|:-|:-:|:-:| + +|File|Coverage [63.64%]|| +|:-|:-:|:-:| +|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| +|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:|` + ) + }) + + it('coverage lesser than min coverage for overall project', function () { + const comment = render.getPRComment(49.23, project, 50, 64) + expect(comment).toEqual( + `|Total Project Coverage|49.23%|:x:| +|:-|:-:|:-:| + +|File|Coverage [63.64%]|| |:-|:-:|:-:| |[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| -|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:| +|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:|` + ) + }) -|Total Project Coverage|49.23%|:green_apple:| -|:-|:-:|:-:|` - ); - }); + it('coverage lesser than min coverage for changed files', function () { + const comment = render.getPRComment(49.23, project, 30, 80) + expect(comment).toEqual( + `|Total Project Coverage|49.23%|:green_apple:| +|:-|:-:|:-:| + +|File|Coverage [63.64%]|| +|:-|:-:|:-:| +|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| +|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:|` + ) + }) - it("coverage lesser than min coverage for overall project", function () { - const comment = render.getPRComment(49.23, files, 50, 64); + it('coverage greater than min coverage for changed files', function () { + const comment = render.getPRComment(49.23, project, 50, 20) expect(comment).toEqual( - `|File|Coverage [63.64%]|:x:| + `|Total Project Coverage|49.23%|:x:| +|:-|:-:|:-:| + +|File|Coverage [63.64%]|| |:-|:-:|:-:| |[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| -|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:| +|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:green_apple:|` + ) + }) + it('with title', function () { + const comment = render.getPRComment(49.23, project, 50, 20, 'Coverage') + expect(comment).toEqual( + `### Coverage |Total Project Coverage|49.23%|:x:| -|:-|:-:|:-:|` - ); - }); +|:-|:-:|:-:| - it("coverage greater than min coverage for changed files", function () { - const comment = render.getPRComment(49.23, files, 30, 80); - expect(comment).toEqual( - `|File|Coverage [63.64%]|:x:| +|File|Coverage [63.64%]|| |:-|:-:|:-:| |[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| -|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:x:| +|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:green_apple:|` + ) + }) + }) -|Total Project Coverage|49.23%|:green_apple:| -|:-|:-:|:-:|` - ); - }); + describe('multi module', function () { + const project = { + modules: [ + { + name: 'math', + percentage: 70.37, + files: [ + { + covered: 19, + filePath: 'src/main/java/com/madrapps/math/Math.kt', + missed: 8, + name: 'Math.kt', + percentage: 70.37, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt', + }, + ], + }, + { + name: 'app', + percentage: 8.33, + files: [ + { + covered: 10, + filePath: + 'src/main/java/com/madrapps/playground/MainViewModel.kt', + missed: 7, + name: 'MainViewModel.kt', + percentage: 58.82, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt', + }, + { + covered: 10, + filePath: 'src/main/java/com/madrapps/playground/StringOp.kt', + missed: 21, + name: 'StringOp.kt', + percentage: 32.25, + url: 'https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/StringOp.kt', + }, + ], + }, + ], + isMultiModule: true, + 'coverage-changed-files': 63.64, + } - it("coverage lesser than min coverage for overall project", function () { - const comment = render.getPRComment(49.23, files, 50, 20); + it('coverage greater than min coverage for overall project', function () { + const comment = render.getPRComment(49.23, project, 30, 60) expect(comment).toEqual( - `|File|Coverage [63.64%]|:green_apple:| + `|Total Project Coverage|49.23%|:green_apple:| |:-|:-:|:-:| -|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| -|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:green_apple:| -|Total Project Coverage|49.23%|:x:| -|:-|:-:|:-:|` - ); - }); +|Module|Coverage|| +|:-|:-:|:-:| +|math|70.37%|:green_apple:| +|app|8.33%|:x:| + +
+Files + +|Module|File|Coverage [63.64%]|| +|:-|:-|:-:|:-:| +|math|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| +|app|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:x:| +||[StringOp.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/StringOp.kt)|32.25%|:x:| - it("with title", function () { - const comment = render.getPRComment(49.23, files, 50, 20, "Coverage"); +
` + ) + }) + + it('coverage lesser than min coverage for overall project', function () { + const comment = render.getPRComment(49.23, project, 50, 64) expect(comment).toEqual( - `### Coverage -|File|Coverage [63.64%]|:green_apple:| + `|Total Project Coverage|49.23%|:x:| |:-|:-:|:-:| -|[StringOp.java](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/java/com/madrapps/jacoco/operation/StringOp.java)|100%|:green_apple:| -|[Math.kt](https://github.com/thsaravana/jacoco-playground/blob/77b14eb61efcd211ee93a7d8bac80cf292d207cc/src/main/kotlin/com/madrapps/jacoco/Math.kt)|46.67%|:green_apple:| +|Module|Coverage|| +|:-|:-:|:-:| +|math|70.37%|:green_apple:| +|app|8.33%|:x:| + +
+Files + +|Module|File|Coverage [63.64%]|| +|:-|:-|:-:|:-:| +|math|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| +|app|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:x:| +||[StringOp.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/StringOp.kt)|32.25%|:x:| + +
` + ) + }) + + it('coverage lesser than min coverage for changed files', function () { + const comment = render.getPRComment(49.23, project, 30, 80) + expect(comment).toEqual( + `|Total Project Coverage|49.23%|:green_apple:| +|:-|:-:|:-:| + +|Module|Coverage|| +|:-|:-:|:-:| +|math|70.37%|:x:| +|app|8.33%|:x:| + +
+Files + +|Module|File|Coverage [63.64%]|| +|:-|:-|:-:|:-:| +|math|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt)|70.37%|:x:| +|app|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:x:| +||[StringOp.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/StringOp.kt)|32.25%|:x:| + +
` + ) + }) + + it('coverage greater than min coverage for changed files', function () { + const comment = render.getPRComment(49.23, project, 50, 20) + expect(comment).toEqual( + `|Total Project Coverage|49.23%|:x:| +|:-|:-:|:-:| + +|Module|Coverage|| +|:-|:-:|:-:| +|math|70.37%|:green_apple:| +|app|8.33%|:x:| + +
+Files + +|Module|File|Coverage [63.64%]|| +|:-|:-|:-:|:-:| +|math|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| +|app|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:green_apple:| +||[StringOp.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/StringOp.kt)|32.25%|:green_apple:| + +
` + ) + }) + + it('with title', function () { + const comment = render.getPRComment(49.23, project, 50, 20, 'Coverage') + expect(comment).toEqual( + `### Coverage |Total Project Coverage|49.23%|:x:| -|:-|:-:|:-:|` - ); - }); - }); -}); +|:-|:-:|:-:| + +|Module|Coverage|| +|:-|:-:|:-:| +|math|70.37%|:green_apple:| +|app|8.33%|:x:| + +
+Files + +|Module|File|Coverage [63.64%]|| +|:-|:-|:-:|:-:| +|math|[Math.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/math/Math.kt)|70.37%|:green_apple:| +|app|[MainViewModel.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/MainViewModel.kt)|58.82%|:green_apple:| +||[StringOp.kt](https://github.com/thsaravana/jacoco-android-playground/src/main/java/com/madrapps/playground/StringOp.kt)|32.25%|:green_apple:| + +
` + ) + }) + }) +}) diff --git a/action.yml b/action.yml index d854af7..53cb1dc 100644 --- a/action.yml +++ b/action.yml @@ -1,46 +1,46 @@ -name: "JaCoCo Report" -description: "Publishes the JaCoCo report as a comment in the Pull Request" +name: 'JaCoCo Report' +description: 'Publishes the JaCoCo report as a comment in the Pull Request' inputs: paths: - description: "Comma separated paths of the generated jacoco xml files" + description: 'Comma separated paths of the generated jacoco xml files (supports wildcard glob pattern)' required: true token: - description: "Github personal token to add commits to Pull Request" + description: 'Github personal token to add commits to Pull Request' required: true min-coverage-overall: - description: "The minimum code coverage that is required to pass for overall project" + description: 'The minimum code coverage that is required to pass for overall project' required: false - default: "80" + default: '80' min-coverage-changed-files: - description: "The minimum code coverage that is required to pass for changed files" + description: 'The minimum code coverage that is required to pass for changed files' required: false - default: "80" + default: '80' title: - description: "Optional title for the Pull Request comment" + description: 'Optional title for the Pull Request comment' required: false update-comment: - description: "Update the coverage report comment instead of creating new ones. Requires title to works properly." + description: 'Update the coverage report comment instead of creating new ones. Requires title to works properly.' required: false - default: "false" + default: 'false' skip-if-no-changes: description: "Comment won't be added if there is no coverage information present for the files changed" required: false - default: "false" + default: 'false' debug-mode: - description: "Run the action in debug mode and get debug logs printed in console" + description: 'Run the action in debug mode and get debug logs printed in console' required: false - default: "false" + default: 'false' outputs: coverage-overall: - description: "The overall coverage of the project" + description: 'The overall coverage of the project' coverage-changed-files: - description: "The total coverage of all changed files" + description: 'The total coverage of all changed files' runs: - using: "node16" - main: "dist/index.js" + using: 'node16' + main: 'dist/index.js' branding: - icon: "percent" - color: "green" + icon: 'percent' + color: 'green' diff --git a/dist/index.js b/dist/index.js index 8a5e964..feebfda 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1973,1252 +1973,1864 @@ exports.getOctokitOptions = getOctokitOptions; /***/ }), -/***/ 9628: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +/***/ 2723: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -const http = __nccwpck_require__(3685); -const https = __nccwpck_require__(5687); -const pm = __nccwpck_require__(6305); -let tunnel; -var HttpCodes; -(function (HttpCodes) { - HttpCodes[HttpCodes["OK"] = 200] = "OK"; - HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; - HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; - HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; - HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; - HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; - HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; - HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; - HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; - HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; - HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); -var Headers; -(function (Headers) { - Headers["Accept"] = "accept"; - Headers["ContentType"] = "content-type"; -})(Headers = exports.Headers || (exports.Headers = {})); -var MediaTypes; -(function (MediaTypes) { - MediaTypes["ApplicationJson"] = "application/json"; -})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); +exports.hashFiles = exports.create = void 0; +const internal_globber_1 = __nccwpck_require__(4581); +const internal_hash_files_1 = __nccwpck_require__(7907); /** - * Returns the proxy URL, depending upon the supplied url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + * Constructs a globber + * + * @param patterns Patterns separated by newlines + * @param options Glob options */ -function getProxyUrl(serverUrl) { - let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); - return proxyUrl ? proxyUrl.href : ''; +function create(patterns, options) { + return __awaiter(this, void 0, void 0, function* () { + return yield internal_globber_1.DefaultGlobber.create(patterns, options); + }); } -exports.getProxyUrl = getProxyUrl; -const HttpRedirectCodes = [ - HttpCodes.MovedPermanently, - HttpCodes.ResourceMoved, - HttpCodes.SeeOther, - HttpCodes.TemporaryRedirect, - HttpCodes.PermanentRedirect -]; -const HttpResponseRetryCodes = [ - HttpCodes.BadGateway, - HttpCodes.ServiceUnavailable, - HttpCodes.GatewayTimeout -]; -const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; -const ExponentialBackoffCeiling = 10; -const ExponentialBackoffTimeSlice = 5; -class HttpClientError extends Error { - constructor(message, statusCode) { - super(message); - this.name = 'HttpClientError'; - this.statusCode = statusCode; - Object.setPrototypeOf(this, HttpClientError.prototype); - } +exports.create = create; +/** + * Computes the sha256 hash of a glob + * + * @param patterns Patterns separated by newlines + * @param currentWorkspace Workspace used when matching files + * @param options Glob options + * @param verbose Enables verbose logging + */ +function hashFiles(patterns, currentWorkspace = '', options, verbose = false) { + return __awaiter(this, void 0, void 0, function* () { + let followSymbolicLinks = true; + if (options && typeof options.followSymbolicLinks === 'boolean') { + followSymbolicLinks = options.followSymbolicLinks; + } + const globber = yield create(patterns, { followSymbolicLinks }); + return internal_hash_files_1.hashFiles(globber, currentWorkspace, verbose); + }); } -exports.HttpClientError = HttpClientError; -class HttpClientResponse { - constructor(message) { - this.message = message; - } - readBody() { - return new Promise(async (resolve, reject) => { - let output = Buffer.alloc(0); - this.message.on('data', (chunk) => { - output = Buffer.concat([output, chunk]); - }); - this.message.on('end', () => { - resolve(output.toString()); - }); - }); +exports.hashFiles = hashFiles; +//# sourceMappingURL=glob.js.map + +/***/ }), + +/***/ 9897: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getOptions = void 0; +const core = __importStar(__nccwpck_require__(6024)); +/** + * Returns a copy with defaults filled in. + */ +function getOptions(copy) { + const result = { + followSymbolicLinks: true, + implicitDescendants: true, + matchDirectories: true, + omitBrokenSymbolicLinks: true + }; + if (copy) { + if (typeof copy.followSymbolicLinks === 'boolean') { + result.followSymbolicLinks = copy.followSymbolicLinks; + core.debug(`followSymbolicLinks '${result.followSymbolicLinks}'`); + } + if (typeof copy.implicitDescendants === 'boolean') { + result.implicitDescendants = copy.implicitDescendants; + core.debug(`implicitDescendants '${result.implicitDescendants}'`); + } + if (typeof copy.matchDirectories === 'boolean') { + result.matchDirectories = copy.matchDirectories; + core.debug(`matchDirectories '${result.matchDirectories}'`); + } + if (typeof copy.omitBrokenSymbolicLinks === 'boolean') { + result.omitBrokenSymbolicLinks = copy.omitBrokenSymbolicLinks; + core.debug(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`); + } } + return result; } -exports.HttpClientResponse = HttpClientResponse; -function isHttps(requestUrl) { - let parsedUrl = new URL(requestUrl); - return parsedUrl.protocol === 'https:'; -} -exports.isHttps = isHttps; -class HttpClient { - constructor(userAgent, handlers, requestOptions) { - this._ignoreSslError = false; - this._allowRedirects = true; - this._allowRedirectDowngrade = false; - this._maxRedirects = 50; - this._allowRetries = false; - this._maxRetries = 1; - this._keepAlive = false; - this._disposed = false; - this.userAgent = userAgent; - this.handlers = handlers || []; - this.requestOptions = requestOptions; - if (requestOptions) { - if (requestOptions.ignoreSslError != null) { - this._ignoreSslError = requestOptions.ignoreSslError; +exports.getOptions = getOptions; +//# sourceMappingURL=internal-glob-options-helper.js.map + +/***/ }), + +/***/ 4581: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __asyncValues = (this && this.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DefaultGlobber = void 0; +const core = __importStar(__nccwpck_require__(6024)); +const fs = __importStar(__nccwpck_require__(7147)); +const globOptionsHelper = __importStar(__nccwpck_require__(9897)); +const path = __importStar(__nccwpck_require__(1017)); +const patternHelper = __importStar(__nccwpck_require__(7676)); +const internal_match_kind_1 = __nccwpck_require__(7119); +const internal_pattern_1 = __nccwpck_require__(8339); +const internal_search_state_1 = __nccwpck_require__(7001); +const IS_WINDOWS = process.platform === 'win32'; +class DefaultGlobber { + constructor(options) { + this.patterns = []; + this.searchPaths = []; + this.options = globOptionsHelper.getOptions(options); + } + getSearchPaths() { + // Return a copy + return this.searchPaths.slice(); + } + glob() { + var e_1, _a; + return __awaiter(this, void 0, void 0, function* () { + const result = []; + try { + for (var _b = __asyncValues(this.globGenerator()), _c; _c = yield _b.next(), !_c.done;) { + const itemPath = _c.value; + result.push(itemPath); + } } - this._socketTimeout = requestOptions.socketTimeout; - if (requestOptions.allowRedirects != null) { - this._allowRedirects = requestOptions.allowRedirects; + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b); + } + finally { if (e_1) throw e_1.error; } } - if (requestOptions.allowRedirectDowngrade != null) { - this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + return result; + }); + } + globGenerator() { + return __asyncGenerator(this, arguments, function* globGenerator_1() { + // Fill in defaults options + const options = globOptionsHelper.getOptions(this.options); + // Implicit descendants? + const patterns = []; + for (const pattern of this.patterns) { + patterns.push(pattern); + if (options.implicitDescendants && + (pattern.trailingSeparator || + pattern.segments[pattern.segments.length - 1] !== '**')) { + patterns.push(new internal_pattern_1.Pattern(pattern.negate, true, pattern.segments.concat('**'))); + } } - if (requestOptions.maxRedirects != null) { - this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + // Push the search paths + const stack = []; + for (const searchPath of patternHelper.getSearchPaths(patterns)) { + core.debug(`Search path '${searchPath}'`); + // Exists? + try { + // Intentionally using lstat. Detection for broken symlink + // will be performed later (if following symlinks). + yield __await(fs.promises.lstat(searchPath)); + } + catch (err) { + if (err.code === 'ENOENT') { + continue; + } + throw err; + } + stack.unshift(new internal_search_state_1.SearchState(searchPath, 1)); } - if (requestOptions.keepAlive != null) { - this._keepAlive = requestOptions.keepAlive; + // Search + const traversalChain = []; // used to detect cycles + while (stack.length) { + // Pop + const item = stack.pop(); + // Match? + const match = patternHelper.match(patterns, item.path); + const partialMatch = !!match || patternHelper.partialMatch(patterns, item.path); + if (!match && !partialMatch) { + continue; + } + // Stat + const stats = yield __await(DefaultGlobber.stat(item, options, traversalChain) + // Broken symlink, or symlink cycle detected, or no longer exists + ); + // Broken symlink, or symlink cycle detected, or no longer exists + if (!stats) { + continue; + } + // Directory + if (stats.isDirectory()) { + // Matched + if (match & internal_match_kind_1.MatchKind.Directory && options.matchDirectories) { + yield yield __await(item.path); + } + // Descend? + else if (!partialMatch) { + continue; + } + // Push the child items in reverse + const childLevel = item.level + 1; + const childItems = (yield __await(fs.promises.readdir(item.path))).map(x => new internal_search_state_1.SearchState(path.join(item.path, x), childLevel)); + stack.push(...childItems.reverse()); + } + // File + else if (match & internal_match_kind_1.MatchKind.File) { + yield yield __await(item.path); + } } - if (requestOptions.allowRetries != null) { - this._allowRetries = requestOptions.allowRetries; + }); + } + /** + * Constructs a DefaultGlobber + */ + static create(patterns, options) { + return __awaiter(this, void 0, void 0, function* () { + const result = new DefaultGlobber(options); + if (IS_WINDOWS) { + patterns = patterns.replace(/\r\n/g, '\n'); + patterns = patterns.replace(/\r/g, '\n'); } - if (requestOptions.maxRetries != null) { - this._maxRetries = requestOptions.maxRetries; + const lines = patterns.split('\n').map(x => x.trim()); + for (const line of lines) { + // Empty or comment + if (!line || line.startsWith('#')) { + continue; + } + // Pattern + else { + result.patterns.push(new internal_pattern_1.Pattern(line)); + } } - } - } - options(requestUrl, additionalHeaders) { - return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); - } - get(requestUrl, additionalHeaders) { - return this.request('GET', requestUrl, null, additionalHeaders || {}); - } - del(requestUrl, additionalHeaders) { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + result.searchPaths.push(...patternHelper.getSearchPaths(result.patterns)); + return result; + }); } - post(requestUrl, data, additionalHeaders) { - return this.request('POST', requestUrl, data, additionalHeaders || {}); + static stat(item, options, traversalChain) { + return __awaiter(this, void 0, void 0, function* () { + // Note: + // `stat` returns info about the target of a symlink (or symlink chain) + // `lstat` returns info about a symlink itself + let stats; + if (options.followSymbolicLinks) { + try { + // Use `stat` (following symlinks) + stats = yield fs.promises.stat(item.path); + } + catch (err) { + if (err.code === 'ENOENT') { + if (options.omitBrokenSymbolicLinks) { + core.debug(`Broken symlink '${item.path}'`); + return undefined; + } + throw new Error(`No information found for the path '${item.path}'. This may indicate a broken symbolic link.`); + } + throw err; + } + } + else { + // Use `lstat` (not following symlinks) + stats = yield fs.promises.lstat(item.path); + } + // Note, isDirectory() returns false for the lstat of a symlink + if (stats.isDirectory() && options.followSymbolicLinks) { + // Get the realpath + const realPath = yield fs.promises.realpath(item.path); + // Fixup the traversal chain to match the item level + while (traversalChain.length >= item.level) { + traversalChain.pop(); + } + // Test for a cycle + if (traversalChain.some((x) => x === realPath)) { + core.debug(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`); + return undefined; + } + // Update the traversal chain + traversalChain.push(realPath); + } + return stats; + }); } - patch(requestUrl, data, additionalHeaders) { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); +} +exports.DefaultGlobber = DefaultGlobber; +//# sourceMappingURL=internal-globber.js.map + +/***/ }), + +/***/ 7907: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __asyncValues = (this && this.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.hashFiles = void 0; +const crypto = __importStar(__nccwpck_require__(6113)); +const core = __importStar(__nccwpck_require__(6024)); +const fs = __importStar(__nccwpck_require__(7147)); +const stream = __importStar(__nccwpck_require__(2781)); +const util = __importStar(__nccwpck_require__(3837)); +const path = __importStar(__nccwpck_require__(1017)); +function hashFiles(globber, currentWorkspace, verbose = false) { + var e_1, _a; + var _b; + return __awaiter(this, void 0, void 0, function* () { + const writeDelegate = verbose ? core.info : core.debug; + let hasMatch = false; + const githubWorkspace = currentWorkspace + ? currentWorkspace + : (_b = process.env['GITHUB_WORKSPACE']) !== null && _b !== void 0 ? _b : process.cwd(); + const result = crypto.createHash('sha256'); + let count = 0; + try { + for (var _c = __asyncValues(globber.globGenerator()), _d; _d = yield _c.next(), !_d.done;) { + const file = _d.value; + writeDelegate(file); + if (!file.startsWith(`${githubWorkspace}${path.sep}`)) { + writeDelegate(`Ignore '${file}' since it is not under GITHUB_WORKSPACE.`); + continue; + } + if (fs.statSync(file).isDirectory()) { + writeDelegate(`Skip directory '${file}'.`); + continue; + } + const hash = crypto.createHash('sha256'); + const pipeline = util.promisify(stream.pipeline); + yield pipeline(fs.createReadStream(file), hash); + result.write(hash.digest()); + count++; + if (!hasMatch) { + hasMatch = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + result.end(); + if (hasMatch) { + writeDelegate(`Found ${count} files to hash.`); + return result.digest('hex'); + } + else { + writeDelegate(`No matches found for glob`); + return ''; + } + }); +} +exports.hashFiles = hashFiles; +//# sourceMappingURL=internal-hash-files.js.map + +/***/ }), + +/***/ 7119: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.MatchKind = void 0; +/** + * Indicates whether a pattern matches a path + */ +var MatchKind; +(function (MatchKind) { + /** Not matched */ + MatchKind[MatchKind["None"] = 0] = "None"; + /** Matched if the path is a directory */ + MatchKind[MatchKind["Directory"] = 1] = "Directory"; + /** Matched if the path is a regular file */ + MatchKind[MatchKind["File"] = 2] = "File"; + /** Matched */ + MatchKind[MatchKind["All"] = 3] = "All"; +})(MatchKind = exports.MatchKind || (exports.MatchKind = {})); +//# sourceMappingURL=internal-match-kind.js.map + +/***/ }), + +/***/ 3011: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.safeTrimTrailingSeparator = exports.normalizeSeparators = exports.hasRoot = exports.hasAbsoluteRoot = exports.ensureAbsoluteRoot = exports.dirname = void 0; +const path = __importStar(__nccwpck_require__(1017)); +const assert_1 = __importDefault(__nccwpck_require__(9491)); +const IS_WINDOWS = process.platform === 'win32'; +/** + * Similar to path.dirname except normalizes the path separators and slightly better handling for Windows UNC paths. + * + * For example, on Linux/macOS: + * - `/ => /` + * - `/hello => /` + * + * For example, on Windows: + * - `C:\ => C:\` + * - `C:\hello => C:\` + * - `C: => C:` + * - `C:hello => C:` + * - `\ => \` + * - `\hello => \` + * - `\\hello => \\hello` + * - `\\hello\world => \\hello\world` + */ +function dirname(p) { + // Normalize slashes and trim unnecessary trailing slash + p = safeTrimTrailingSeparator(p); + // Windows UNC root, e.g. \\hello or \\hello\world + if (IS_WINDOWS && /^\\\\[^\\]+(\\[^\\]+)?$/.test(p)) { + return p; + } + // Get dirname + let result = path.dirname(p); + // Trim trailing slash for Windows UNC root, e.g. \\hello\world\ + if (IS_WINDOWS && /^\\\\[^\\]+\\[^\\]+\\$/.test(result)) { + result = safeTrimTrailingSeparator(result); } - put(requestUrl, data, additionalHeaders) { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); + return result; +} +exports.dirname = dirname; +/** + * Roots the path if not already rooted. On Windows, relative roots like `\` + * or `C:` are expanded based on the current working directory. + */ +function ensureAbsoluteRoot(root, itemPath) { + assert_1.default(root, `ensureAbsoluteRoot parameter 'root' must not be empty`); + assert_1.default(itemPath, `ensureAbsoluteRoot parameter 'itemPath' must not be empty`); + // Already rooted + if (hasAbsoluteRoot(itemPath)) { + return itemPath; + } + // Windows + if (IS_WINDOWS) { + // Check for itemPath like C: or C:foo + if (itemPath.match(/^[A-Z]:[^\\/]|^[A-Z]:$/i)) { + let cwd = process.cwd(); + assert_1.default(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`); + // Drive letter matches cwd? Expand to cwd + if (itemPath[0].toUpperCase() === cwd[0].toUpperCase()) { + // Drive only, e.g. C: + if (itemPath.length === 2) { + // Preserve specified drive letter case (upper or lower) + return `${itemPath[0]}:\\${cwd.substr(3)}`; + } + // Drive + path, e.g. C:foo + else { + if (!cwd.endsWith('\\')) { + cwd += '\\'; + } + // Preserve specified drive letter case (upper or lower) + return `${itemPath[0]}:\\${cwd.substr(3)}${itemPath.substr(2)}`; + } + } + // Different drive + else { + return `${itemPath[0]}:\\${itemPath.substr(2)}`; + } + } + // Check for itemPath like \ or \foo + else if (normalizeSeparators(itemPath).match(/^\\$|^\\[^\\]/)) { + const cwd = process.cwd(); + assert_1.default(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`); + return `${cwd[0]}:\\${itemPath.substr(1)}`; + } } - head(requestUrl, additionalHeaders) { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + assert_1.default(hasAbsoluteRoot(root), `ensureAbsoluteRoot parameter 'root' must have an absolute root`); + // Otherwise ensure root ends with a separator + if (root.endsWith('/') || (IS_WINDOWS && root.endsWith('\\'))) { + // Intentionally empty } - sendStream(verb, requestUrl, stream, additionalHeaders) { - return this.request(verb, requestUrl, stream, additionalHeaders); + else { + // Append separator + root += path.sep; } - /** - * Gets a typed object from an endpoint - * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise - */ - async getJson(requestUrl, additionalHeaders = {}) { - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - let res = await this.get(requestUrl, additionalHeaders); - return this._processResponse(res, this.requestOptions); + return root + itemPath; +} +exports.ensureAbsoluteRoot = ensureAbsoluteRoot; +/** + * On Linux/macOS, true if path starts with `/`. On Windows, true for paths like: + * `\\hello\share` and `C:\hello` (and using alternate separator). + */ +function hasAbsoluteRoot(itemPath) { + assert_1.default(itemPath, `hasAbsoluteRoot parameter 'itemPath' must not be empty`); + // Normalize separators + itemPath = normalizeSeparators(itemPath); + // Windows + if (IS_WINDOWS) { + // E.g. \\hello\share or C:\hello + return itemPath.startsWith('\\\\') || /^[A-Z]:\\/i.test(itemPath); + } + // E.g. /hello + return itemPath.startsWith('/'); +} +exports.hasAbsoluteRoot = hasAbsoluteRoot; +/** + * On Linux/macOS, true if path starts with `/`. On Windows, true for paths like: + * `\`, `\hello`, `\\hello\share`, `C:`, and `C:\hello` (and using alternate separator). + */ +function hasRoot(itemPath) { + assert_1.default(itemPath, `isRooted parameter 'itemPath' must not be empty`); + // Normalize separators + itemPath = normalizeSeparators(itemPath); + // Windows + if (IS_WINDOWS) { + // E.g. \ or \hello or \\hello + // E.g. C: or C:\hello + return itemPath.startsWith('\\') || /^[A-Z]:/i.test(itemPath); + } + // E.g. /hello + return itemPath.startsWith('/'); +} +exports.hasRoot = hasRoot; +/** + * Removes redundant slashes and converts `/` to `\` on Windows + */ +function normalizeSeparators(p) { + p = p || ''; + // Windows + if (IS_WINDOWS) { + // Convert slashes on Windows + p = p.replace(/\//g, '\\'); + // Remove redundant slashes + const isUnc = /^\\\\+[^\\]/.test(p); // e.g. \\hello + return (isUnc ? '\\' : '') + p.replace(/\\\\+/g, '\\'); // preserve leading \\ for UNC + } + // Remove redundant slashes + return p.replace(/\/\/+/g, '/'); +} +exports.normalizeSeparators = normalizeSeparators; +/** + * Normalizes the path separators and trims the trailing separator (when safe). + * For example, `/foo/ => /foo` but `/ => /` + */ +function safeTrimTrailingSeparator(p) { + // Short-circuit if empty + if (!p) { + return ''; } - async postJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.post(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); + // Normalize separators + p = normalizeSeparators(p); + // No trailing slash + if (!p.endsWith(path.sep)) { + return p; } - async putJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.put(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); + // Check '/' on Linux/macOS and '\' on Windows + if (p === path.sep) { + return p; } - async patchJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.patch(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); + // On Windows check if drive root. E.g. C:\ + if (IS_WINDOWS && /^[A-Z]:\\$/i.test(p)) { + return p; } + // Otherwise trim trailing slash + return p.substr(0, p.length - 1); +} +exports.safeTrimTrailingSeparator = safeTrimTrailingSeparator; +//# sourceMappingURL=internal-path-helper.js.map + +/***/ }), + +/***/ 2288: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Path = void 0; +const path = __importStar(__nccwpck_require__(1017)); +const pathHelper = __importStar(__nccwpck_require__(3011)); +const assert_1 = __importDefault(__nccwpck_require__(9491)); +const IS_WINDOWS = process.platform === 'win32'; +/** + * Helper class for parsing paths into segments + */ +class Path { /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch + * Constructs a Path + * @param itemPath Path or array of segments */ - async request(verb, requestUrl, data, headers) { - if (this._disposed) { - throw new Error('Client has already been disposed.'); - } - let parsedUrl = new URL(requestUrl); - let info = this._prepareRequest(verb, parsedUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 - ? this._maxRetries + 1 - : 1; - let numTries = 0; - let response; - while (numTries < maxTries) { - response = await this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && - response.message && - response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (let i = 0; i < this.handlers.length; i++) { - if (this.handlers[i].canHandleAuthentication(response)) { - authenticationHandler = this.handlers[i]; - break; - } + constructor(itemPath) { + this.segments = []; + // String + if (typeof itemPath === 'string') { + assert_1.default(itemPath, `Parameter 'itemPath' must not be empty`); + // Normalize slashes and trim unnecessary trailing slash + itemPath = pathHelper.safeTrimTrailingSeparator(itemPath); + // Not rooted + if (!pathHelper.hasRoot(itemPath)) { + this.segments = itemPath.split(path.sep); + } + // Rooted + else { + // Add all segments, while not at the root + let remaining = itemPath; + let dir = pathHelper.dirname(remaining); + while (dir !== remaining) { + // Add the segment + const basename = path.basename(remaining); + this.segments.unshift(basename); + // Truncate the last segment + remaining = dir; + dir = pathHelper.dirname(remaining); } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); + // Remainder is the root + this.segments.unshift(remaining); + } + } + // Array + else { + // Must not be empty + assert_1.default(itemPath.length > 0, `Parameter 'itemPath' must not be an empty array`); + // Each segment + for (let i = 0; i < itemPath.length; i++) { + let segment = itemPath[i]; + // Must not be empty + assert_1.default(segment, `Parameter 'itemPath' must not contain any empty segments`); + // Normalize slashes + segment = pathHelper.normalizeSeparators(itemPath[i]); + // Root segment + if (i === 0 && pathHelper.hasRoot(segment)) { + segment = pathHelper.safeTrimTrailingSeparator(segment); + assert_1.default(segment === pathHelper.dirname(segment), `Parameter 'itemPath' root segment contains information for multiple segments`); + this.segments.push(segment); } + // All other segments else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. - return response; + // Must not contain slash + assert_1.default(!segment.includes(path.sep), `Parameter 'itemPath' contains unexpected path separators`); + this.segments.push(segment); } } - let redirectsRemaining = this._maxRedirects; - while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && - this._allowRedirects && - redirectsRemaining > 0) { - const redirectUrl = response.message.headers['location']; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - let parsedRedirectUrl = new URL(redirectUrl); - if (parsedUrl.protocol == 'https:' && - parsedUrl.protocol != parsedRedirectUrl.protocol && - !this._allowRedirectDowngrade) { - throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - await response.readBody(); - // strip authorization header if redirected to a different hostname - if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { - for (let header in headers) { - // header names are case insensitive - if (header.toLowerCase() === 'authorization') { - delete headers[header]; - } - } - } - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, parsedRedirectUrl, headers); - response = await this.requestRaw(info, data); - redirectsRemaining--; + } + } + /** + * Converts the path to it's string representation + */ + toString() { + // First segment + let result = this.segments[0]; + // All others + let skipSlash = result.endsWith(path.sep) || (IS_WINDOWS && /^[A-Z]:$/i.test(result)); + for (let i = 1; i < this.segments.length; i++) { + if (skipSlash) { + skipSlash = false; } - if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { - // If not a retry code, return immediately instead of retrying - return response; + else { + result += path.sep; } - numTries += 1; - if (numTries < maxTries) { - await response.readBody(); - await this._performExponentialBackoff(numTries); + result += this.segments[i]; + } + return result; + } +} +exports.Path = Path; +//# sourceMappingURL=internal-path.js.map + +/***/ }), + +/***/ 7676: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.partialMatch = exports.match = exports.getSearchPaths = void 0; +const pathHelper = __importStar(__nccwpck_require__(3011)); +const internal_match_kind_1 = __nccwpck_require__(7119); +const IS_WINDOWS = process.platform === 'win32'; +/** + * Given an array of patterns, returns an array of paths to search. + * Duplicates and paths under other included paths are filtered out. + */ +function getSearchPaths(patterns) { + // Ignore negate patterns + patterns = patterns.filter(x => !x.negate); + // Create a map of all search paths + const searchPathMap = {}; + for (const pattern of patterns) { + const key = IS_WINDOWS + ? pattern.searchPath.toUpperCase() + : pattern.searchPath; + searchPathMap[key] = 'candidate'; + } + const result = []; + for (const pattern of patterns) { + // Check if already included + const key = IS_WINDOWS + ? pattern.searchPath.toUpperCase() + : pattern.searchPath; + if (searchPathMap[key] === 'included') { + continue; + } + // Check for an ancestor search path + let foundAncestor = false; + let tempKey = key; + let parent = pathHelper.dirname(tempKey); + while (parent !== tempKey) { + if (searchPathMap[parent]) { + foundAncestor = true; + break; } + tempKey = parent; + parent = pathHelper.dirname(tempKey); } - return response; + // Include the search pattern in the result + if (!foundAncestor) { + result.push(pattern.searchPath); + searchPathMap[key] = 'included'; + } + } + return result; +} +exports.getSearchPaths = getSearchPaths; +/** + * Matches the patterns against the path + */ +function match(patterns, itemPath) { + let result = internal_match_kind_1.MatchKind.None; + for (const pattern of patterns) { + if (pattern.negate) { + result &= ~pattern.match(itemPath); + } + else { + result |= pattern.match(itemPath); + } + } + return result; +} +exports.match = match; +/** + * Checks whether to descend further into the directory + */ +function partialMatch(patterns, itemPath) { + return patterns.some(x => !x.negate && x.partialMatch(itemPath)); +} +exports.partialMatch = partialMatch; +//# sourceMappingURL=internal-pattern-helper.js.map + +/***/ }), + +/***/ 8339: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Pattern = void 0; +const os = __importStar(__nccwpck_require__(2037)); +const path = __importStar(__nccwpck_require__(1017)); +const pathHelper = __importStar(__nccwpck_require__(3011)); +const assert_1 = __importDefault(__nccwpck_require__(9491)); +const minimatch_1 = __nccwpck_require__(2959); +const internal_match_kind_1 = __nccwpck_require__(7119); +const internal_path_1 = __nccwpck_require__(2288); +const IS_WINDOWS = process.platform === 'win32'; +class Pattern { + constructor(patternOrNegate, isImplicitPattern = false, segments, homedir) { + /** + * Indicates whether matches should be excluded from the result set + */ + this.negate = false; + // Pattern overload + let pattern; + if (typeof patternOrNegate === 'string') { + pattern = patternOrNegate.trim(); + } + // Segments overload + else { + // Convert to pattern + segments = segments || []; + assert_1.default(segments.length, `Parameter 'segments' must not empty`); + const root = Pattern.getLiteral(segments[0]); + assert_1.default(root && pathHelper.hasAbsoluteRoot(root), `Parameter 'segments' first element must be a root path`); + pattern = new internal_path_1.Path(segments).toString().trim(); + if (patternOrNegate) { + pattern = `!${pattern}`; + } + } + // Negate + while (pattern.startsWith('!')) { + this.negate = !this.negate; + pattern = pattern.substr(1).trim(); + } + // Normalize slashes and ensures absolute root + pattern = Pattern.fixupPattern(pattern, homedir); + // Segments + this.segments = new internal_path_1.Path(pattern).segments; + // Trailing slash indicates the pattern should only match directories, not regular files + this.trailingSeparator = pathHelper + .normalizeSeparators(pattern) + .endsWith(path.sep); + pattern = pathHelper.safeTrimTrailingSeparator(pattern); + // Search path (literal path prior to the first glob segment) + let foundGlob = false; + const searchSegments = this.segments + .map(x => Pattern.getLiteral(x)) + .filter(x => !foundGlob && !(foundGlob = x === '')); + this.searchPath = new internal_path_1.Path(searchSegments).toString(); + // Root RegExp (required when determining partial match) + this.rootRegExp = new RegExp(Pattern.regExpEscape(searchSegments[0]), IS_WINDOWS ? 'i' : ''); + this.isImplicitPattern = isImplicitPattern; + // Create minimatch + const minimatchOptions = { + dot: true, + nobrace: true, + nocase: IS_WINDOWS, + nocomment: true, + noext: true, + nonegate: true + }; + pattern = IS_WINDOWS ? pattern.replace(/\\/g, '/') : pattern; + this.minimatch = new minimatch_1.Minimatch(pattern, minimatchOptions); } /** - * Needs to be called if keepAlive is set to true in request options. + * Matches the pattern against the specified path */ - dispose() { - if (this._agent) { - this._agent.destroy(); + match(itemPath) { + // Last segment is globstar? + if (this.segments[this.segments.length - 1] === '**') { + // Normalize slashes + itemPath = pathHelper.normalizeSeparators(itemPath); + // Append a trailing slash. Otherwise Minimatch will not match the directory immediately + // preceding the globstar. For example, given the pattern `/foo/**`, Minimatch returns + // false for `/foo` but returns true for `/foo/`. Append a trailing slash to handle that quirk. + if (!itemPath.endsWith(path.sep) && this.isImplicitPattern === false) { + // Note, this is safe because the constructor ensures the pattern has an absolute root. + // For example, formats like C: and C:foo on Windows are resolved to an absolute root. + itemPath = `${itemPath}${path.sep}`; + } } - this._disposed = true; + else { + // Normalize slashes and trim unnecessary trailing slash + itemPath = pathHelper.safeTrimTrailingSeparator(itemPath); + } + // Match + if (this.minimatch.match(itemPath)) { + return this.trailingSeparator ? internal_match_kind_1.MatchKind.Directory : internal_match_kind_1.MatchKind.All; + } + return internal_match_kind_1.MatchKind.None; } /** - * Raw request. - * @param info - * @param data + * Indicates whether the pattern may match descendants of the specified path */ - requestRaw(info, data) { - return new Promise((resolve, reject) => { - let callbackForResult = function (err, res) { - if (err) { - reject(err); - } - resolve(res); - }; - this.requestRawWithCallback(info, data, callbackForResult); - }); + partialMatch(itemPath) { + // Normalize slashes and trim unnecessary trailing slash + itemPath = pathHelper.safeTrimTrailingSeparator(itemPath); + // matchOne does not handle root path correctly + if (pathHelper.dirname(itemPath) === itemPath) { + return this.rootRegExp.test(itemPath); + } + return this.minimatch.matchOne(itemPath.split(IS_WINDOWS ? /\\+/ : /\/+/), this.minimatch.set[0], true); } /** - * Raw request with callback. - * @param info - * @param data - * @param onResult + * Escapes glob patterns within a path */ - requestRawWithCallback(info, data, onResult) { - let socket; - if (typeof data === 'string') { - info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + static globEscape(s) { + return (IS_WINDOWS ? s : s.replace(/\\/g, '\\\\')) // escape '\' on Linux/macOS + .replace(/(\[)(?=[^/]+\])/g, '[[]') // escape '[' when ']' follows within the path segment + .replace(/\?/g, '[?]') // escape '?' + .replace(/\*/g, '[*]'); // escape '*' + } + /** + * Normalizes slashes and ensures absolute root + */ + static fixupPattern(pattern, homedir) { + // Empty + assert_1.default(pattern, 'pattern cannot be empty'); + // Must not contain `.` segment, unless first segment + // Must not contain `..` segment + const literalSegments = new internal_path_1.Path(pattern).segments.map(x => Pattern.getLiteral(x)); + assert_1.default(literalSegments.every((x, i) => (x !== '.' || i === 0) && x !== '..'), `Invalid pattern '${pattern}'. Relative pathing '.' and '..' is not allowed.`); + // Must not contain globs in root, e.g. Windows UNC path \\foo\b*r + assert_1.default(!pathHelper.hasRoot(pattern) || literalSegments[0], `Invalid pattern '${pattern}'. Root segment must not contain globs.`); + // Normalize slashes + pattern = pathHelper.normalizeSeparators(pattern); + // Replace leading `.` segment + if (pattern === '.' || pattern.startsWith(`.${path.sep}`)) { + pattern = Pattern.globEscape(process.cwd()) + pattern.substr(1); } - let callbackCalled = false; - let handleResult = (err, res) => { - if (!callbackCalled) { - callbackCalled = true; - onResult(err, res); - } - }; - let req = info.httpModule.request(info.options, (msg) => { - let res = new HttpClientResponse(msg); - handleResult(null, res); - }); - req.on('socket', sock => { - socket = sock; - }); - // If we ever get disconnected, we want the socket to timeout eventually - req.setTimeout(this._socketTimeout || 3 * 60000, () => { - if (socket) { - socket.end(); + // Replace leading `~` segment + else if (pattern === '~' || pattern.startsWith(`~${path.sep}`)) { + homedir = homedir || os.homedir(); + assert_1.default(homedir, 'Unable to determine HOME directory'); + assert_1.default(pathHelper.hasAbsoluteRoot(homedir), `Expected HOME directory to be a rooted path. Actual '${homedir}'`); + pattern = Pattern.globEscape(homedir) + pattern.substr(1); + } + // Replace relative drive root, e.g. pattern is C: or C:foo + else if (IS_WINDOWS && + (pattern.match(/^[A-Z]:$/i) || pattern.match(/^[A-Z]:[^\\]/i))) { + let root = pathHelper.ensureAbsoluteRoot('C:\\dummy-root', pattern.substr(0, 2)); + if (pattern.length > 2 && !root.endsWith('\\')) { + root += '\\'; } - handleResult(new Error('Request timeout: ' + info.options.path), null); - }); - req.on('error', function (err) { - // err has statusCode property - // res should have headers - handleResult(err, null); - }); - if (data && typeof data === 'string') { - req.write(data, 'utf8'); + pattern = Pattern.globEscape(root) + pattern.substr(2); } - if (data && typeof data !== 'string') { - data.on('close', function () { - req.end(); - }); - data.pipe(req); + // Replace relative root, e.g. pattern is \ or \foo + else if (IS_WINDOWS && (pattern === '\\' || pattern.match(/^\\[^\\]/))) { + let root = pathHelper.ensureAbsoluteRoot('C:\\dummy-root', '\\'); + if (!root.endsWith('\\')) { + root += '\\'; + } + pattern = Pattern.globEscape(root) + pattern.substr(1); } + // Otherwise ensure absolute root else { - req.end(); + pattern = pathHelper.ensureAbsoluteRoot(Pattern.globEscape(process.cwd()), pattern); } + return pathHelper.normalizeSeparators(pattern); } /** - * Gets an http agent. This function is useful when you need an http agent that handles - * routing through a proxy server - depending upon the url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + * Attempts to unescape a pattern segment to create a literal path segment. + * Otherwise returns empty string. */ - getAgent(serverUrl) { - let parsedUrl = new URL(serverUrl); - return this._getAgent(parsedUrl); - } - _prepareRequest(method, requestUrl, headers) { - const info = {}; - info.parsedUrl = requestUrl; - const usingSsl = info.parsedUrl.protocol === 'https:'; - info.httpModule = usingSsl ? https : http; - const defaultPort = usingSsl ? 443 : 80; - info.options = {}; - info.options.host = info.parsedUrl.hostname; - info.options.port = info.parsedUrl.port - ? parseInt(info.parsedUrl.port) - : defaultPort; - info.options.path = - (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); - info.options.method = method; - info.options.headers = this._mergeHeaders(headers); - if (this.userAgent != null) { - info.options.headers['user-agent'] = this.userAgent; - } - info.options.agent = this._getAgent(info.parsedUrl); - // gives handlers an opportunity to participate - if (this.handlers) { - this.handlers.forEach(handler => { - handler.prepareRequest(info.options); - }); + static getLiteral(segment) { + let literal = ''; + for (let i = 0; i < segment.length; i++) { + const c = segment[i]; + // Escape + if (c === '\\' && !IS_WINDOWS && i + 1 < segment.length) { + literal += segment[++i]; + continue; + } + // Wildcard + else if (c === '*' || c === '?') { + return ''; + } + // Character set + else if (c === '[' && i + 1 < segment.length) { + let set = ''; + let closed = -1; + for (let i2 = i + 1; i2 < segment.length; i2++) { + const c2 = segment[i2]; + // Escape + if (c2 === '\\' && !IS_WINDOWS && i2 + 1 < segment.length) { + set += segment[++i2]; + continue; + } + // Closed + else if (c2 === ']') { + closed = i2; + break; + } + // Otherwise + else { + set += c2; + } + } + // Closed? + if (closed >= 0) { + // Cannot convert + if (set.length > 1) { + return ''; + } + // Convert to literal + if (set) { + literal += set; + i = closed; + continue; + } + } + // Otherwise fall thru + } + // Append + literal += c; } - return info; + return literal; } - _mergeHeaders(headers) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); - if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); - } - return lowercaseKeys(headers || {}); + /** + * Escapes regexp special characters + * https://javascript.info/regexp-escaping + */ + static regExpEscape(s) { + return s.replace(/[[\\^$.|?*+()]/g, '\\$&'); } - _getExistingOrDefaultHeader(additionalHeaders, header, _default) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); - let clientHeader; - if (this.requestOptions && this.requestOptions.headers) { - clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; - } - return additionalHeaders[header] || clientHeader || _default; - } - _getAgent(parsedUrl) { - let agent; - let proxyUrl = pm.getProxyUrl(parsedUrl); - let useProxy = proxyUrl && proxyUrl.hostname; - if (this._keepAlive && useProxy) { - agent = this._proxyAgent; - } - if (this._keepAlive && !useProxy) { - agent = this._agent; - } - // if agent is already assigned use that agent. - if (!!agent) { - return agent; - } - const usingSsl = parsedUrl.protocol === 'https:'; - let maxSockets = 100; - if (!!this.requestOptions) { - maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; - } - if (useProxy) { - // If using proxy, need tunnel - if (!tunnel) { - tunnel = __nccwpck_require__(9958); - } - const agentOptions = { - maxSockets: maxSockets, - keepAlive: this._keepAlive, - proxy: { - proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`, - host: proxyUrl.hostname, - port: proxyUrl.port - } - }; - let tunnelAgent; - const overHttps = proxyUrl.protocol === 'https:'; - if (usingSsl) { - tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; - } - else { - tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; - } - agent = tunnelAgent(agentOptions); - this._proxyAgent = agent; - } - // if reusing agent across request and tunneling agent isn't assigned create a new agent - if (this._keepAlive && !agent) { - const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; - agent = usingSsl ? new https.Agent(options) : new http.Agent(options); - this._agent = agent; - } - // if not using private agent and tunnel agent isn't setup then use global agent - if (!agent) { - agent = usingSsl ? https.globalAgent : http.globalAgent; - } - if (usingSsl && this._ignoreSslError) { - // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process - // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options - // we have to cast it to any and change it directly - agent.options = Object.assign(agent.options || {}, { - rejectUnauthorized: false - }); - } - return agent; - } - _performExponentialBackoff(retryNumber) { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); - } - static dateTimeDeserializer(key, value) { - if (typeof value === 'string') { - let a = new Date(value); - if (!isNaN(a.valueOf())) { - return a; - } - } - return value; - } - async _processResponse(res, options) { - return new Promise(async (resolve, reject) => { - const statusCode = res.message.statusCode; - const response = { - statusCode: statusCode, - result: null, - headers: {} - }; - // not found leads to null obj returned - if (statusCode == HttpCodes.NotFound) { - resolve(response); - } - let obj; - let contents; - // get the result from the body - try { - contents = await res.readBody(); - if (contents && contents.length > 0) { - if (options && options.deserializeDates) { - obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); - } - else { - obj = JSON.parse(contents); - } - response.result = obj; - } - response.headers = res.message.headers; - } - catch (err) { - // Invalid resource (contents not json); leaving result obj null - } - // note that 3xx redirects are handled by the http layer. - if (statusCode > 299) { - let msg; - // if exception/error in body, attempt to get better error - if (obj && obj.message) { - msg = obj.message; - } - else if (contents && contents.length > 0) { - // it may be the case that the exception is in the body message as string - msg = contents; - } - else { - msg = 'Failed request: (' + statusCode + ')'; - } - let err = new HttpClientError(msg, statusCode); - err.result = response.result; - reject(err); - } - else { - resolve(response); - } - }); +} +exports.Pattern = Pattern; +//# sourceMappingURL=internal-pattern.js.map + +/***/ }), + +/***/ 7001: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SearchState = void 0; +class SearchState { + constructor(path, level) { + this.path = path; + this.level = level; } } -exports.HttpClient = HttpClient; - +exports.SearchState = SearchState; +//# sourceMappingURL=internal-search-state.js.map /***/ }), -/***/ 6305: -/***/ ((__unused_webpack_module, exports) => { +/***/ 9628: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -function getProxyUrl(reqUrl) { - let usingSsl = reqUrl.protocol === 'https:'; - let proxyUrl; - if (checkBypass(reqUrl)) { - return proxyUrl; - } - let proxyVar; - if (usingSsl) { - proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; - } - else { - proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; - } - if (proxyVar) { - proxyUrl = new URL(proxyVar); - } - return proxyUrl; +const http = __nccwpck_require__(3685); +const https = __nccwpck_require__(5687); +const pm = __nccwpck_require__(6305); +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers = exports.Headers || (exports.Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); +/** + * Returns the proxy URL, depending upon the supplied url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ +function getProxyUrl(serverUrl) { + let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + return proxyUrl ? proxyUrl.href : ''; } exports.getProxyUrl = getProxyUrl; -function checkBypass(reqUrl) { - if (!reqUrl.hostname) { - return false; - } - let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; - if (!noProxy) { - return false; - } - // Determine the request port - let reqPort; - if (reqUrl.port) { - reqPort = Number(reqUrl.port); +const HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +const HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; +const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; +const ExponentialBackoffCeiling = 10; +const ExponentialBackoffTimeSlice = 5; +class HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = 'HttpClientError'; + this.statusCode = statusCode; + Object.setPrototypeOf(this, HttpClientError.prototype); } - else if (reqUrl.protocol === 'http:') { - reqPort = 80; +} +exports.HttpClientError = HttpClientError; +class HttpClientResponse { + constructor(message) { + this.message = message; } - else if (reqUrl.protocol === 'https:') { - reqPort = 443; + readBody() { + return new Promise(async (resolve, reject) => { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + }); } - // Format the request hostname and hostname with port - let upperReqHosts = [reqUrl.hostname.toUpperCase()]; - if (typeof reqPort === 'number') { - upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); - } - // Compare request host against noproxy - for (let upperNoProxyItem of noProxy - .split(',') - .map(x => x.trim().toUpperCase()) - .filter(x => x)) { - if (upperReqHosts.some(x => x === upperNoProxyItem)) { - return true; - } - } - return false; -} -exports.checkBypass = checkBypass; - - -/***/ }), - -/***/ 3948: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -async function auth(token) { - const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth"; - return { - type: "token", - token: token, - tokenType - }; -} - -/** - * Prefix token for usage in the Authorization header - * - * @param token OAuth token or JSON Web Token - */ -function withAuthorizationPrefix(token) { - if (token.split(/\./).length === 3) { - return `bearer ${token}`; - } - - return `token ${token}`; } - -async function hook(token, request, route, parameters) { - const endpoint = request.endpoint.merge(route, parameters); - endpoint.headers.authorization = withAuthorizationPrefix(token); - return request(endpoint); -} - -const createTokenAuth = function createTokenAuth(token) { - if (!token) { - throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); - } - - if (typeof token !== "string") { - throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); - } - - token = token.replace(/^(token|bearer) +/i, ""); - return Object.assign(auth.bind(null, token), { - hook: hook.bind(null, token) - }); -}; - -exports.createTokenAuth = createTokenAuth; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 7196: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var universalUserAgent = __nccwpck_require__(7163); -var beforeAfterHook = __nccwpck_require__(3850); -var request = __nccwpck_require__(2364); -var graphql = __nccwpck_require__(1660); -var authToken = __nccwpck_require__(3948); - -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let parsedUrl = new URL(requestUrl); + return parsedUrl.protocol === 'https:'; } - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; +exports.isHttps = isHttps; +class HttpClient { + constructor(userAgent, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = userAgent; + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } } - } - - return target; -} - -const VERSION = "3.2.5"; - -class Octokit { - constructor(options = {}) { - const hook = new beforeAfterHook.Collection(); - const requestDefaults = { - baseUrl: request.request.endpoint.DEFAULTS.baseUrl, - headers: {}, - request: Object.assign({}, options.request, { - hook: hook.bind(null, "request") - }), - mediaType: { - previews: [], - format: "" - } - }; // prepend default user agent with `options.userAgent` if set - - requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" "); - - if (options.baseUrl) { - requestDefaults.baseUrl = options.baseUrl; + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); } - - if (options.previews) { - requestDefaults.mediaType.previews = options.previews; + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); } - - if (options.timeZone) { - requestDefaults.headers["time-zone"] = options.timeZone; + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); } - - this.request = request.request.defaults(requestDefaults); - this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults); - this.log = Object.assign({ - debug: () => {}, - info: () => {}, - warn: console.warn.bind(console), - error: console.error.bind(console) - }, options.log); - this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance - // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered. - // (2) If only `options.auth` is set, use the default token authentication strategy. - // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance. - // TODO: type `options.auth` based on `options.authStrategy`. - - if (!options.authStrategy) { - if (!options.auth) { - // (1) - this.auth = async () => ({ - type: "unauthenticated" - }); - } else { - // (2) - const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\_(ツ)_/¯ - - hook.wrap("request", auth.hook); - this.auth = auth; - } - } else { - const { - authStrategy - } = options, - otherOptions = _objectWithoutProperties(options, ["authStrategy"]); - - const auth = authStrategy(Object.assign({ - request: this.request, - log: this.log, - // we pass the current octokit instance as well as its constructor options - // to allow for authentication strategies that return a new octokit instance - // that shares the same internal state as the current one. The original - // requirement for this was the "event-octokit" authentication strategy - // of https://github.com/probot/octokit-auth-probot. - octokit: this, - octokitOptions: otherOptions - }, options.auth)); // @ts-ignore ¯\_(ツ)_/¯ - - hook.wrap("request", auth.hook); - this.auth = auth; - } // apply plugins - // https://stackoverflow.com/a/16345172 - - - const classConstructor = this.constructor; - classConstructor.plugins.forEach(plugin => { - Object.assign(this, plugin(this, options)); - }); - } - - static defaults(defaults) { - const OctokitWithDefaults = class extends this { - constructor(...args) { - const options = args[0] || {}; - - if (typeof defaults === "function") { - super(defaults(options)); - return; - } - - super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? { - userAgent: `${options.userAgent} ${defaults.userAgent}` - } : null)); - } - - }; - return OctokitWithDefaults; - } - /** - * Attach a plugin (or many) to your Octokit instance. - * - * @example - * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) - */ - - - static plugin(...newPlugins) { - var _a; - - const currentPlugins = this.plugins; - const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a); - return NewOctokit; - } - -} -Octokit.VERSION = VERSION; -Octokit.plugins = []; - -exports.Octokit = Octokit; -//# sourceMappingURL=index.js.map - - -/***/ }), - -/***/ 7509: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -var isPlainObject = __nccwpck_require__(987); -var universalUserAgent = __nccwpck_require__(7163); - -function lowercaseKeys(object) { - if (!object) { - return {}; - } - - return Object.keys(object).reduce((newObj, key) => { - newObj[key.toLowerCase()] = object[key]; - return newObj; - }, {}); -} - -function mergeDeep(defaults, options) { - const result = Object.assign({}, defaults); - Object.keys(options).forEach(key => { - if (isPlainObject.isPlainObject(options[key])) { - if (!(key in defaults)) Object.assign(result, { - [key]: options[key] - });else result[key] = mergeDeep(defaults[key], options[key]); - } else { - Object.assign(result, { - [key]: options[key] - }); + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); } - }); - return result; -} - -function removeUndefinedProperties(obj) { - for (const key in obj) { - if (obj[key] === undefined) { - delete obj[key]; + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); } - } - - return obj; -} - -function merge(defaults, route, options) { - if (typeof route === "string") { - let [method, url] = route.split(" "); - options = Object.assign(url ? { - method, - url - } : { - url: method - }, options); - } else { - options = Object.assign({}, route); - } // lowercase header names before merging with defaults to avoid duplicates - - - options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging - - removeUndefinedProperties(options); - removeUndefinedProperties(options.headers); - const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten - - if (defaults && defaults.mediaType.previews.length) { - mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); - } - - mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); - return mergedOptions; -} - -function addQueryParameters(url, parameters) { - const separator = /\?/.test(url) ? "&" : "?"; - const names = Object.keys(parameters); - - if (names.length === 0) { - return url; - } - - return url + separator + names.map(name => { - if (name === "q") { - return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); } - - return `${name}=${encodeURIComponent(parameters[name])}`; - }).join("&"); -} - -const urlVariableRegex = /\{[^}]+\}/g; - -function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); -} - -function extractUrlVariableNames(url) { - const matches = url.match(urlVariableRegex); - - if (!matches) { - return []; - } - - return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); -} - -function omit(object, keysToOmit) { - return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { - obj[key] = object[key]; - return obj; - }, {}); -} - -// Based on https://github.com/bramstein/url-template, licensed under BSD -// TODO: create separate package. -// -// Copyright (c) 2012-2014, Bram Stein -// All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// 3. The name of the author may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/* istanbul ignore file */ -function encodeReserved(str) { - return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { - if (!/%[0-9A-Fa-f]/.test(part)) { - part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); } - - return part; - }).join(""); -} - -function encodeUnreserved(str) { - return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { - return "%" + c.charCodeAt(0).toString(16).toUpperCase(); - }); -} - -function encodeValue(operator, value, key) { - value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); - - if (key) { - return encodeUnreserved(key) + "=" + value; - } else { - return value; - } -} - -function isDefined(value) { - return value !== undefined && value !== null; -} - -function isKeyOperator(operator) { - return operator === ";" || operator === "&" || operator === "?"; -} - -function getValues(context, operator, key, modifier) { - var value = context[key], - result = []; - - if (isDefined(value) && value !== "") { - if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { - value = value.toString(); - - if (modifier && modifier !== "*") { - value = value.substring(0, parseInt(modifier, 10)); - } - - result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); - } else { - if (modifier === "*") { - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function (value) { - result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); - }); - } else { - Object.keys(value).forEach(function (k) { - if (isDefined(value[k])) { - result.push(encodeValue(operator, value[k], k)); - } - }); - } - } else { - const tmp = []; - - if (Array.isArray(value)) { - value.filter(isDefined).forEach(function (value) { - tmp.push(encodeValue(operator, value)); - }); - } else { - Object.keys(value).forEach(function (k) { - if (isDefined(value[k])) { - tmp.push(encodeUnreserved(k)); - tmp.push(encodeValue(operator, value[k].toString())); + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); + } + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + async getJson(requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + let res = await this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async postJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async putJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async patchJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + async request(verb, requestUrl, data, headers) { + if (this._disposed) { + throw new Error('Client has already been disposed.'); + } + let parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + response = await this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + let parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol == 'https:' && + parsedUrl.protocol != parsedRedirectUrl.protocol && + !this._allowRedirectDowngrade) { + throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + await response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (let header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } + } + } + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = await this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + await response.readBody(); + await this._performExponentialBackoff(numTries); } - }); } - - if (isKeyOperator(operator)) { - result.push(encodeUnreserved(key) + "=" + tmp.join(",")); - } else if (tmp.length !== 0) { - result.push(tmp.join(",")); + return response; + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); } - } + this._disposed = true; } - } else { - if (operator === ";") { - if (isDefined(value)) { - result.push(encodeUnreserved(key)); - } - } else if (value === "" && (operator === "&" || operator === "?")) { - result.push(encodeUnreserved(key) + "="); - } else if (value === "") { - result.push(""); + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); } - } - - return result; -} - -function parseUrl(template) { - return { - expand: expand.bind(null, template) - }; -} - -function expand(template, context) { - var operators = ["+", "#", ".", "/", ";", "?", "&"]; - return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { - if (expression) { - let operator = ""; - const values = []; - - if (operators.indexOf(expression.charAt(0)) !== -1) { - operator = expression.charAt(0); - expression = expression.substr(1); - } - - expression.split(/,/g).forEach(function (variable) { - var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); - values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); - }); - - if (operator && operator !== "+") { - var separator = ","; - - if (operator === "?") { - separator = "&"; - } else if (operator !== "#") { - separator = operator; + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + let socket; + if (typeof data === 'string') { + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', sock => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); + } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof data === 'string') { + req.write(data, 'utf8'); + } + if (data && typeof data !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); + } + else { + req.end(); } - - return (values.length !== 0 ? operator : "") + values.join(separator); - } else { - return values.join(","); - } - } else { - return encodeReserved(literal); } - }); -} - -function parse(options) { - // https://fetch.spec.whatwg.org/#methods - let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible - - let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); - let headers = Object.assign({}, options.headers); - let body; - let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later - - const urlVariableNames = extractUrlVariableNames(url); - url = parseUrl(url).expand(parameters); - - if (!/^http/.test(url)) { - url = options.baseUrl + url; - } - - const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); - const remainingParameters = omit(parameters, omittedParameters); - const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); - - if (!isBinaryRequest) { - if (options.mediaType.format) { - // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw - headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + let parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); } - - if (options.mediaType.previews.length) { - const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; - headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { - const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; - return `application/vnd.github.${preview}-preview${format}`; - }).join(","); + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port + ? parseInt(info.parsedUrl.port) + : defaultPort; + info.options.path = + (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers['user-agent'] = this.userAgent; + } + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers) { + this.handlers.forEach(handler => { + handler.prepareRequest(info.options); + }); + } + return info; } - } // for GET/HEAD requests, set URL query parameters from remaining parameters - // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters - - - if (["GET", "HEAD"].includes(method)) { - url = addQueryParameters(url, remainingParameters); - } else { - if ("data" in remainingParameters) { - body = remainingParameters.data; - } else { - if (Object.keys(remainingParameters).length) { - body = remainingParameters; - } else { - headers["content-length"] = 0; - } + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + } + return lowercaseKeys(headers || {}); } - } // default content-type for JSON if body is set - - - if (!headers["content-type"] && typeof body !== "undefined") { - headers["content-type"] = "application/json; charset=utf-8"; - } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. - // fetch does not allow to set `content-length` header, but we can set body to an empty string - + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; + } + return additionalHeaders[header] || clientHeader || _default; + } + _getAgent(parsedUrl) { + let agent; + let proxyUrl = pm.getProxyUrl(parsedUrl); + let useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (this._keepAlive && !useProxy) { + agent = this._agent; + } + // if agent is already assigned use that agent. + if (!!agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = __nccwpck_require__(9958); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`, + host: proxyUrl.hostname, + port: proxyUrl.port + } + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === 'https:'; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } + else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + // if reusing agent across request and tunneling agent isn't assigned create a new agent + if (this._keepAlive && !agent) { + const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; + } + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + async _processResponse(res, options) { + return new Promise(async (resolve, reject) => { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = await res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = 'Failed request: (' + statusCode + ')'; + } + let err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } + else { + resolve(response); + } + }); + } +} +exports.HttpClient = HttpClient; - if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { - body = ""; - } // Only return body/request keys if present +/***/ }), - return Object.assign({ - method, - url, - headers - }, typeof body !== "undefined" ? { - body - } : null, options.request ? { - request: options.request - } : null); -} +/***/ 6305: +/***/ ((__unused_webpack_module, exports) => { -function endpointWithDefaults(defaults, route, options) { - return parse(merge(defaults, route, options)); -} +"use strict"; -function withDefaults(oldDefaults, newDefaults) { - const DEFAULTS = merge(oldDefaults, newDefaults); - const endpoint = endpointWithDefaults.bind(null, DEFAULTS); - return Object.assign(endpoint, { - DEFAULTS, - defaults: withDefaults.bind(null, DEFAULTS), - merge: merge.bind(null, DEFAULTS), - parse - }); +Object.defineProperty(exports, "__esModule", ({ value: true })); +function getProxyUrl(reqUrl) { + let usingSsl = reqUrl.protocol === 'https:'; + let proxyUrl; + if (checkBypass(reqUrl)) { + return proxyUrl; + } + let proxyVar; + if (usingSsl) { + proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + if (proxyVar) { + proxyUrl = new URL(proxyVar); + } + return proxyUrl; +} +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + if (!noProxy) { + return false; + } + // Determine the request port + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } + else if (reqUrl.protocol === 'http:') { + reqPort = 80; + } + else if (reqUrl.protocol === 'https:') { + reqPort = 443; + } + // Format the request hostname and hostname with port + let upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (let upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperReqHosts.some(x => x === upperNoProxyItem)) { + return true; + } + } + return false; } +exports.checkBypass = checkBypass; -const VERSION = "6.0.11"; -const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. -// So we use RequestParameters and add method as additional required property. +/***/ }), -const DEFAULTS = { - method: "GET", - baseUrl: "https://api.github.com", - headers: { - accept: "application/vnd.github.v3+json", - "user-agent": userAgent - }, - mediaType: { - format: "", - previews: [] +/***/ 3948: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +async function auth(token) { + const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth"; + return { + type: "token", + token: token, + tokenType + }; +} + +/** + * Prefix token for usage in the Authorization header + * + * @param token OAuth token or JSON Web Token + */ +function withAuthorizationPrefix(token) { + if (token.split(/\./).length === 3) { + return `bearer ${token}`; } -}; -const endpoint = withDefaults(null, DEFAULTS); + return `token ${token}`; +} -exports.endpoint = endpoint; +async function hook(token, request, route, parameters) { + const endpoint = request.endpoint.merge(route, parameters); + endpoint.headers.authorization = withAuthorizationPrefix(token); + return request(endpoint); +} + +const createTokenAuth = function createTokenAuth(token) { + if (!token) { + throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); + } + + if (typeof token !== "string") { + throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); + } + + token = token.replace(/^(token|bearer) +/i, ""); + return Object.assign(auth.bind(null, token), { + hook: hook.bind(null, token) + }); +}; + +exports.createTokenAuth = createTokenAuth; //# sourceMappingURL=index.js.map /***/ }), -/***/ 1660: +/***/ 7196: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -3226,749 +3838,1329 @@ exports.endpoint = endpoint; Object.defineProperty(exports, "__esModule", ({ value: true })); -var request = __nccwpck_require__(2364); var universalUserAgent = __nccwpck_require__(7163); +var beforeAfterHook = __nccwpck_require__(3850); +var request = __nccwpck_require__(2364); +var graphql = __nccwpck_require__(1660); +var authToken = __nccwpck_require__(3948); -const VERSION = "4.6.0"; - -class GraphqlError extends Error { - constructor(request, response) { - const message = response.data.errors[0].message; - super(message); - Object.assign(this, response.data); - Object.assign(this, { - headers: response.headers - }); - this.name = "GraphqlError"; - this.request = request; // Maintains proper stack trace (only available on V8) - - /* istanbul ignore next */ +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; } + return target; } -const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"]; -const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; -function graphql(request, query, options) { - if (typeof query === "string" && options && "query" in options) { - return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); - } - - const parsedOptions = typeof query === "string" ? Object.assign({ - query - }, options) : query; - const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { - if (NON_VARIABLE_OPTIONS.includes(key)) { - result[key] = parsedOptions[key]; - return result; - } +function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; - if (!result.variables) { - result.variables = {}; - } + var target = _objectWithoutPropertiesLoose(source, excluded); - result.variables[key] = parsedOptions[key]; - return result; - }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix - // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451 + var key, i; - const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl; + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { - requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } } - return request(requestOptions).then(response => { - if (response.data.errors) { - const headers = {}; + return target; +} - for (const key of Object.keys(response.headers)) { - headers[key] = response.headers[key]; +const VERSION = "3.2.5"; + +class Octokit { + constructor(options = {}) { + const hook = new beforeAfterHook.Collection(); + const requestDefaults = { + baseUrl: request.request.endpoint.DEFAULTS.baseUrl, + headers: {}, + request: Object.assign({}, options.request, { + hook: hook.bind(null, "request") + }), + mediaType: { + previews: [], + format: "" } + }; // prepend default user agent with `options.userAgent` if set - throw new GraphqlError(requestOptions, { - headers, - data: response.data - }); + requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" "); + + if (options.baseUrl) { + requestDefaults.baseUrl = options.baseUrl; } - return response.data.data; - }); -} + if (options.previews) { + requestDefaults.mediaType.previews = options.previews; + } -function withDefaults(request$1, newDefaults) { - const newRequest = request$1.defaults(newDefaults); + if (options.timeZone) { + requestDefaults.headers["time-zone"] = options.timeZone; + } - const newApi = (query, options) => { - return graphql(newRequest, query, options); - }; + this.request = request.request.defaults(requestDefaults); + this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults); + this.log = Object.assign({ + debug: () => {}, + info: () => {}, + warn: console.warn.bind(console), + error: console.error.bind(console) + }, options.log); + this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance + // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered. + // (2) If only `options.auth` is set, use the default token authentication strategy. + // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance. + // TODO: type `options.auth` based on `options.authStrategy`. - return Object.assign(newApi, { - defaults: withDefaults.bind(null, newRequest), - endpoint: request.request.endpoint - }); -} - -const graphql$1 = withDefaults(request.request, { - headers: { - "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` - }, - method: "POST", - url: "/graphql" -}); -function withCustomRequest(customRequest) { - return withDefaults(customRequest, { - method: "POST", - url: "/graphql" - }); -} + if (!options.authStrategy) { + if (!options.auth) { + // (1) + this.auth = async () => ({ + type: "unauthenticated" + }); + } else { + // (2) + const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\_(ツ)_/¯ -exports.graphql = graphql$1; -exports.withCustomRequest = withCustomRequest; -//# sourceMappingURL=index.js.map + hook.wrap("request", auth.hook); + this.auth = auth; + } + } else { + const { + authStrategy + } = options, + otherOptions = _objectWithoutProperties(options, ["authStrategy"]); + const auth = authStrategy(Object.assign({ + request: this.request, + log: this.log, + // we pass the current octokit instance as well as its constructor options + // to allow for authentication strategies that return a new octokit instance + // that shares the same internal state as the current one. The original + // requirement for this was the "event-octokit" authentication strategy + // of https://github.com/probot/octokit-auth-probot. + octokit: this, + octokitOptions: otherOptions + }, options.auth)); // @ts-ignore ¯\_(ツ)_/¯ -/***/ }), + hook.wrap("request", auth.hook); + this.auth = auth; + } // apply plugins + // https://stackoverflow.com/a/16345172 -/***/ 9445: -/***/ ((__unused_webpack_module, exports) => { -"use strict"; + const classConstructor = this.constructor; + classConstructor.plugins.forEach(plugin => { + Object.assign(this, plugin(this, options)); + }); + } + static defaults(defaults) { + const OctokitWithDefaults = class extends this { + constructor(...args) { + const options = args[0] || {}; -Object.defineProperty(exports, "__esModule", ({ value: true })); + if (typeof defaults === "function") { + super(defaults(options)); + return; + } -const VERSION = "2.9.1"; + super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? { + userAgent: `${options.userAgent} ${defaults.userAgent}` + } : null)); + } -/** - * Some “list” response that can be paginated have a different response structure - * - * They have a `total_count` key in the response (search also has `incomplete_results`, - * /installation/repositories also has `repository_selection`), as well as a key with - * the list of the items which name varies from endpoint to endpoint. - * - * Octokit normalizes these responses so that paginated results are always returned following - * the same structure. One challenge is that if the list response has only one page, no Link - * header is provided, so this header alone is not sufficient to check wether a response is - * paginated or not. - * - * We check if a "total_count" key is present in the response data, but also make sure that - * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would - * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref - */ -function normalizePaginatedListResponse(response) { - const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); - if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way - // to retrieve the same information. + }; + return OctokitWithDefaults; + } + /** + * Attach a plugin (or many) to your Octokit instance. + * + * @example + * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) + */ - const incompleteResults = response.data.incomplete_results; - const repositorySelection = response.data.repository_selection; - const totalCount = response.data.total_count; - delete response.data.incomplete_results; - delete response.data.repository_selection; - delete response.data.total_count; - const namespaceKey = Object.keys(response.data)[0]; - const data = response.data[namespaceKey]; - response.data = data; - if (typeof incompleteResults !== "undefined") { - response.data.incomplete_results = incompleteResults; - } + static plugin(...newPlugins) { + var _a; - if (typeof repositorySelection !== "undefined") { - response.data.repository_selection = repositorySelection; + const currentPlugins = this.plugins; + const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a); + return NewOctokit; } - response.data.total_count = totalCount; - return response; } +Octokit.VERSION = VERSION; +Octokit.plugins = []; -function iterator(octokit, route, parameters) { - const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); - const requestMethod = typeof route === "function" ? route : octokit.request; - const method = options.method; - const headers = options.headers; - let url = options.url; - return { - [Symbol.asyncIterator]: () => ({ - async next() { - if (!url) return { - done: true - }; - const response = await requestMethod({ - method, - url, - headers - }); - const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format: - // '; rel="next", ; rel="last"' - // sets `url` to undefined if "next" URL is not present or `link` header is not set +exports.Octokit = Octokit; +//# sourceMappingURL=index.js.map - url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; - return { - value: normalizedResponse - }; - } - }) - }; -} +/***/ }), -function paginate(octokit, route, parameters, mapFn) { - if (typeof parameters === "function") { - mapFn = parameters; - parameters = undefined; - } +/***/ 7509: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); -} +"use strict"; -function gather(octokit, results, iterator, mapFn) { - return iterator.next().then(result => { - if (result.done) { - return results; - } - let earlyExit = false; +Object.defineProperty(exports, "__esModule", ({ value: true })); - function done() { - earlyExit = true; - } +var isPlainObject = __nccwpck_require__(987); +var universalUserAgent = __nccwpck_require__(7163); - results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); +function lowercaseKeys(object) { + if (!object) { + return {}; + } - if (earlyExit) { - return results; - } + return Object.keys(object).reduce((newObj, key) => { + newObj[key.toLowerCase()] = object[key]; + return newObj; + }, {}); +} - return gather(octokit, results, iterator, mapFn); +function mergeDeep(defaults, options) { + const result = Object.assign({}, defaults); + Object.keys(options).forEach(key => { + if (isPlainObject.isPlainObject(options[key])) { + if (!(key in defaults)) Object.assign(result, { + [key]: options[key] + });else result[key] = mergeDeep(defaults[key], options[key]); + } else { + Object.assign(result, { + [key]: options[key] + }); + } }); + return result; } -const composePaginateRest = Object.assign(paginate, { - iterator -}); - -/** - * @param octokit Octokit instance - * @param options Options passed to Octokit constructor - */ +function removeUndefinedProperties(obj) { + for (const key in obj) { + if (obj[key] === undefined) { + delete obj[key]; + } + } -function paginateRest(octokit) { - return { - paginate: Object.assign(paginate.bind(null, octokit), { - iterator: iterator.bind(null, octokit) - }) - }; + return obj; } -paginateRest.VERSION = VERSION; -exports.composePaginateRest = composePaginateRest; -exports.paginateRest = paginateRest; -//# sourceMappingURL=index.js.map +function merge(defaults, route, options) { + if (typeof route === "string") { + let [method, url] = route.split(" "); + options = Object.assign(url ? { + method, + url + } : { + url: method + }, options); + } else { + options = Object.assign({}, route); + } // lowercase header names before merging with defaults to avoid duplicates -/***/ }), + options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging -/***/ 6865: -/***/ ((__unused_webpack_module, exports) => { + removeUndefinedProperties(options); + removeUndefinedProperties(options.headers); + const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten -"use strict"; + if (defaults && defaults.mediaType.previews.length) { + mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); + } + mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); + return mergedOptions; +} -Object.defineProperty(exports, "__esModule", ({ value: true })); +function addQueryParameters(url, parameters) { + const separator = /\?/.test(url) ? "&" : "?"; + const names = Object.keys(parameters); -const Endpoints = { - actions: { - addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], - cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"], - createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], - createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"], - createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"], - createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], - createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"], - createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"], - deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], - deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"], - deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"], - deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], - deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], - disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"], - disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"], - downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"], - downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"], - downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], - enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"], - enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"], - getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"], - getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"], - getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"], - getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"], - getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], - getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], - getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], - getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, { - renamed: ["actions", "getGithubActionsPermissionsRepository"] - }], - getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], - getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], - getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], - getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"], - getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], - getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], - getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"], - getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"], - listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], - listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"], - listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], - listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], - listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], - listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], - listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"], - listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"], - listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"], - listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], - listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], - listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"], - listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"], - listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], - reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], - removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], - setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"], - setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"], - setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"], - setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"], - setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"], - setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"] - }, - activity: { - checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], - deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], - deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"], - getFeeds: ["GET /feeds"], - getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], - getThread: ["GET /notifications/threads/{thread_id}"], - getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"], - listEventsForAuthenticatedUser: ["GET /users/{username}/events"], - listNotificationsForAuthenticatedUser: ["GET /notifications"], - listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"], - listPublicEvents: ["GET /events"], - listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], - listPublicEventsForUser: ["GET /users/{username}/events/public"], - listPublicOrgEvents: ["GET /orgs/{org}/events"], - listReceivedEventsForUser: ["GET /users/{username}/received_events"], - listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"], - listRepoEvents: ["GET /repos/{owner}/{repo}/events"], - listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"], - listReposStarredByAuthenticatedUser: ["GET /user/starred"], - listReposStarredByUser: ["GET /users/{username}/starred"], - listReposWatchedByUser: ["GET /users/{username}/subscriptions"], - listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], - listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], - listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], - markNotificationsAsRead: ["PUT /notifications"], - markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], - markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], - setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], - setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"], - starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], - unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] - }, - apps: { - addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"], - checkToken: ["POST /applications/{client_id}/token"], - createContentAttachment: ["POST /content_references/{content_reference_id}/attachments", { - mediaType: { - previews: ["corsair"] + if (names.length === 0) { + return url; + } + + return url + separator + names.map(name => { + if (name === "q") { + return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + } + + return `${name}=${encodeURIComponent(parameters[name])}`; + }).join("&"); +} + +const urlVariableRegex = /\{[^}]+\}/g; + +function removeNonChars(variableName) { + return variableName.replace(/^\W+|\W+$/g, "").split(/,/); +} + +function extractUrlVariableNames(url) { + const matches = url.match(urlVariableRegex); + + if (!matches) { + return []; + } + + return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); +} + +function omit(object, keysToOmit) { + return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { + obj[key] = object[key]; + return obj; + }, {}); +} + +// Based on https://github.com/bramstein/url-template, licensed under BSD +// TODO: create separate package. +// +// Copyright (c) 2012-2014, Bram Stein +// All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* istanbul ignore file */ +function encodeReserved(str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + } + + return part; + }).join(""); +} + +function encodeUnreserved(str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return "%" + c.charCodeAt(0).toString(16).toUpperCase(); + }); +} + +function encodeValue(operator, value, key) { + value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); + + if (key) { + return encodeUnreserved(key) + "=" + value; + } else { + return value; + } +} + +function isDefined(value) { + return value !== undefined && value !== null; +} + +function isKeyOperator(operator) { + return operator === ";" || operator === "&" || operator === "?"; +} + +function getValues(context, operator, key, modifier) { + var value = context[key], + result = []; + + if (isDefined(value) && value !== "") { + if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + value = value.toString(); + + if (modifier && modifier !== "*") { + value = value.substring(0, parseInt(modifier, 10)); } - }], - createFromManifest: ["POST /app-manifests/{code}/conversions"], - createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"], - deleteAuthorization: ["DELETE /applications/{client_id}/grant"], - deleteInstallation: ["DELETE /app/installations/{installation_id}"], - deleteToken: ["DELETE /applications/{client_id}/token"], - getAuthenticated: ["GET /app"], - getBySlug: ["GET /apps/{app_slug}"], - getInstallation: ["GET /app/installations/{installation_id}"], - getOrgInstallation: ["GET /orgs/{org}/installation"], - getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], - getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"], - getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"], - getUserInstallation: ["GET /users/{username}/installation"], - getWebhookConfigForApp: ["GET /app/hook/config"], - listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], - listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"], - listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"], - listInstallations: ["GET /app/installations"], - listInstallationsForAuthenticatedUser: ["GET /user/installations"], - listPlans: ["GET /marketplace_listing/plans"], - listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], - listReposAccessibleToInstallation: ["GET /installation/repositories"], - listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], - listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"], - removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"], - resetToken: ["PATCH /applications/{client_id}/token"], - revokeInstallationAccessToken: ["DELETE /installation/token"], - scopeToken: ["POST /applications/{client_id}/token/scoped"], - suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], - unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"], - updateWebhookConfigForApp: ["PATCH /app/hook/config"] - }, - billing: { - getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], - getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"], - getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], - getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"], - getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"], - getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"] - }, - checks: { - create: ["POST /repos/{owner}/{repo}/check-runs"], - createSuite: ["POST /repos/{owner}/{repo}/check-suites"], - get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], - getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], - listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"], - listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], - listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"], - listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], - rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"], - setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"], - update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] - }, - codeScanning: { - getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, { - renamedParameters: { - alert_id: "alert_number" + + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); + } else { + if (modifier === "*") { + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + result.push(encodeValue(operator, value[k], k)); + } + }); + } + } else { + const tmp = []; + + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + tmp.push(encodeValue(operator, value)); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + tmp.push(encodeUnreserved(k)); + tmp.push(encodeValue(operator, value[k].toString())); + } + }); + } + + if (isKeyOperator(operator)) { + result.push(encodeUnreserved(key) + "=" + tmp.join(",")); + } else if (tmp.length !== 0) { + result.push(tmp.join(",")); + } } - }], - listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], - listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], - updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"], - uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] - }, - codesOfConduct: { - getAllCodesOfConduct: ["GET /codes_of_conduct", { - mediaType: { - previews: ["scarlet-witch"] + } + } else { + if (operator === ";") { + if (isDefined(value)) { + result.push(encodeUnreserved(key)); } - }], - getConductCode: ["GET /codes_of_conduct/{key}", { - mediaType: { - previews: ["scarlet-witch"] + } else if (value === "" && (operator === "&" || operator === "?")) { + result.push(encodeUnreserved(key) + "="); + } else if (value === "") { + result.push(""); + } + } + + return result; +} + +function parseUrl(template) { + return { + expand: expand.bind(null, template) + }; +} + +function expand(template, context) { + var operators = ["+", "#", ".", "/", ";", "?", "&"]; + return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { + if (expression) { + let operator = ""; + const values = []; + + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); } - }], - getForRepo: ["GET /repos/{owner}/{repo}/community/code_of_conduct", { - mediaType: { - previews: ["scarlet-witch"] + + expression.split(/,/g).forEach(function (variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); + }); + + if (operator && operator !== "+") { + var separator = ","; + + if (operator === "?") { + separator = "&"; + } else if (operator !== "#") { + separator = operator; + } + + return (values.length !== 0 ? operator : "") + values.join(separator); + } else { + return values.join(","); } - }] - }, - emojis: { - get: ["GET /emojis"] - }, - enterpriseAdmin: { - disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], - enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], - getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"], - getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"], - listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"], - setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"], - setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"], - setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"] + } else { + return encodeReserved(literal); + } + }); +} + +function parse(options) { + // https://fetch.spec.whatwg.org/#methods + let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible + + let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); + let headers = Object.assign({}, options.headers); + let body; + let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later + + const urlVariableNames = extractUrlVariableNames(url); + url = parseUrl(url).expand(parameters); + + if (!/^http/.test(url)) { + url = options.baseUrl + url; + } + + const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); + const remainingParameters = omit(parameters, omittedParameters); + const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); + + if (!isBinaryRequest) { + if (options.mediaType.format) { + // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw + headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); + } + + if (options.mediaType.previews.length) { + const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; + headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { + const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; + return `application/vnd.github.${preview}-preview${format}`; + }).join(","); + } + } // for GET/HEAD requests, set URL query parameters from remaining parameters + // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters + + + if (["GET", "HEAD"].includes(method)) { + url = addQueryParameters(url, remainingParameters); + } else { + if ("data" in remainingParameters) { + body = remainingParameters.data; + } else { + if (Object.keys(remainingParameters).length) { + body = remainingParameters; + } else { + headers["content-length"] = 0; + } + } + } // default content-type for JSON if body is set + + + if (!headers["content-type"] && typeof body !== "undefined") { + headers["content-type"] = "application/json; charset=utf-8"; + } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. + // fetch does not allow to set `content-length` header, but we can set body to an empty string + + + if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { + body = ""; + } // Only return body/request keys if present + + + return Object.assign({ + method, + url, + headers + }, typeof body !== "undefined" ? { + body + } : null, options.request ? { + request: options.request + } : null); +} + +function endpointWithDefaults(defaults, route, options) { + return parse(merge(defaults, route, options)); +} + +function withDefaults(oldDefaults, newDefaults) { + const DEFAULTS = merge(oldDefaults, newDefaults); + const endpoint = endpointWithDefaults.bind(null, DEFAULTS); + return Object.assign(endpoint, { + DEFAULTS, + defaults: withDefaults.bind(null, DEFAULTS), + merge: merge.bind(null, DEFAULTS), + parse + }); +} + +const VERSION = "6.0.11"; + +const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. +// So we use RequestParameters and add method as additional required property. + +const DEFAULTS = { + method: "GET", + baseUrl: "https://api.github.com", + headers: { + accept: "application/vnd.github.v3+json", + "user-agent": userAgent }, - gists: { - checkIsStarred: ["GET /gists/{gist_id}/star"], - create: ["POST /gists"], - createComment: ["POST /gists/{gist_id}/comments"], - delete: ["DELETE /gists/{gist_id}"], - deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], - fork: ["POST /gists/{gist_id}/forks"], - get: ["GET /gists/{gist_id}"], - getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], - getRevision: ["GET /gists/{gist_id}/{sha}"], - list: ["GET /gists"], - listComments: ["GET /gists/{gist_id}/comments"], - listCommits: ["GET /gists/{gist_id}/commits"], - listForUser: ["GET /users/{username}/gists"], - listForks: ["GET /gists/{gist_id}/forks"], - listPublic: ["GET /gists/public"], - listStarred: ["GET /gists/starred"], - star: ["PUT /gists/{gist_id}/star"], - unstar: ["DELETE /gists/{gist_id}/star"], - update: ["PATCH /gists/{gist_id}"], - updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] - }, - git: { - createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], - createCommit: ["POST /repos/{owner}/{repo}/git/commits"], - createRef: ["POST /repos/{owner}/{repo}/git/refs"], - createTag: ["POST /repos/{owner}/{repo}/git/tags"], - createTree: ["POST /repos/{owner}/{repo}/git/trees"], - deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], - getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], - getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], - getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], - getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], - getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], - listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], - updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] - }, - gitignore: { - getAllTemplates: ["GET /gitignore/templates"], - getTemplate: ["GET /gitignore/templates/{name}"] - }, - interactions: { - getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], - getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], - getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], - getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, { - renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] - }], - removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], - removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], - removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"], - removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, { - renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] - }], - setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], - setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], - setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], - setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, { - renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] - }] - }, - issues: { - addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"], - addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], - checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], - create: ["POST /repos/{owner}/{repo}/issues"], - createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"], - createLabel: ["POST /repos/{owner}/{repo}/labels"], - createMilestone: ["POST /repos/{owner}/{repo}/milestones"], - deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"], - deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], - deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"], - get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], - getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], - getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], - getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], - getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], - list: ["GET /issues"], - listAssignees: ["GET /repos/{owner}/{repo}/assignees"], - listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], - listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], - listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], - listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], - listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", { - mediaType: { - previews: ["mockingbird"] - } - }], - listForAuthenticatedUser: ["GET /user/issues"], - listForOrg: ["GET /orgs/{org}/issues"], - listForRepo: ["GET /repos/{owner}/{repo}/issues"], - listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"], - listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], - listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"], - listMilestones: ["GET /repos/{owner}/{repo}/milestones"], - lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], - removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"], - removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"], - removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"], - setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], - unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], - update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], - updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], - updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], - updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"] - }, - licenses: { - get: ["GET /licenses/{license}"], - getAllCommonlyUsed: ["GET /licenses"], - getForRepo: ["GET /repos/{owner}/{repo}/license"] - }, - markdown: { - render: ["POST /markdown"], - renderRaw: ["POST /markdown/raw", { - headers: { - "content-type": "text/plain; charset=utf-8" + mediaType: { + format: "", + previews: [] + } +}; + +const endpoint = withDefaults(null, DEFAULTS); + +exports.endpoint = endpoint; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 1660: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var request = __nccwpck_require__(2364); +var universalUserAgent = __nccwpck_require__(7163); + +const VERSION = "4.6.0"; + +class GraphqlError extends Error { + constructor(request, response) { + const message = response.data.errors[0].message; + super(message); + Object.assign(this, response.data); + Object.assign(this, { + headers: response.headers + }); + this.name = "GraphqlError"; + this.request = request; // Maintains proper stack trace (only available on V8) + + /* istanbul ignore next */ + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + +} + +const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"]; +const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; +function graphql(request, query, options) { + if (typeof query === "string" && options && "query" in options) { + return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); + } + + const parsedOptions = typeof query === "string" ? Object.assign({ + query + }, options) : query; + const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { + if (NON_VARIABLE_OPTIONS.includes(key)) { + result[key] = parsedOptions[key]; + return result; + } + + if (!result.variables) { + result.variables = {}; + } + + result.variables[key] = parsedOptions[key]; + return result; + }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix + // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451 + + const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl; + + if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { + requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); + } + + return request(requestOptions).then(response => { + if (response.data.errors) { + const headers = {}; + + for (const key of Object.keys(response.headers)) { + headers[key] = response.headers[key]; } - }] - }, - meta: { - get: ["GET /meta"], - getOctocat: ["GET /octocat"], - getZen: ["GET /zen"], - root: ["GET /"] + + throw new GraphqlError(requestOptions, { + headers, + data: response.data + }); + } + + return response.data.data; + }); +} + +function withDefaults(request$1, newDefaults) { + const newRequest = request$1.defaults(newDefaults); + + const newApi = (query, options) => { + return graphql(newRequest, query, options); + }; + + return Object.assign(newApi, { + defaults: withDefaults.bind(null, newRequest), + endpoint: request.request.endpoint + }); +} + +const graphql$1 = withDefaults(request.request, { + headers: { + "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` }, - migrations: { - cancelImport: ["DELETE /repos/{owner}/{repo}/import"], - deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive", { - mediaType: { - previews: ["wyandotte"] - } - }], - deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive", { - mediaType: { - previews: ["wyandotte"] - } - }], - downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive", { - mediaType: { - previews: ["wyandotte"] - } - }], - getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive", { - mediaType: { - previews: ["wyandotte"] - } - }], - getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"], - getImportStatus: ["GET /repos/{owner}/{repo}/import"], - getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"], - getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}", { - mediaType: { - previews: ["wyandotte"] - } - }], - getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}", { - mediaType: { - previews: ["wyandotte"] - } - }], - listForAuthenticatedUser: ["GET /user/migrations", { - mediaType: { - previews: ["wyandotte"] - } - }], - listForOrg: ["GET /orgs/{org}/migrations", { - mediaType: { - previews: ["wyandotte"] - } - }], - listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories", { - mediaType: { - previews: ["wyandotte"] - } - }], - listReposForUser: ["GET /user/migrations/{migration_id}/repositories", { - mediaType: { - previews: ["wyandotte"] - } - }], - mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"], - setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"], - startForAuthenticatedUser: ["POST /user/migrations"], - startForOrg: ["POST /orgs/{org}/migrations"], - startImport: ["PUT /repos/{owner}/{repo}/import"], - unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock", { - mediaType: { - previews: ["wyandotte"] - } - }], - unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock", { - mediaType: { - previews: ["wyandotte"] + method: "POST", + url: "/graphql" +}); +function withCustomRequest(customRequest) { + return withDefaults(customRequest, { + method: "POST", + url: "/graphql" + }); +} + +exports.graphql = graphql$1; +exports.withCustomRequest = withCustomRequest; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9445: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +const VERSION = "2.9.1"; + +/** + * Some “list” response that can be paginated have a different response structure + * + * They have a `total_count` key in the response (search also has `incomplete_results`, + * /installation/repositories also has `repository_selection`), as well as a key with + * the list of the items which name varies from endpoint to endpoint. + * + * Octokit normalizes these responses so that paginated results are always returned following + * the same structure. One challenge is that if the list response has only one page, no Link + * header is provided, so this header alone is not sufficient to check wether a response is + * paginated or not. + * + * We check if a "total_count" key is present in the response data, but also make sure that + * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would + * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref + */ +function normalizePaginatedListResponse(response) { + const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); + if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way + // to retrieve the same information. + + const incompleteResults = response.data.incomplete_results; + const repositorySelection = response.data.repository_selection; + const totalCount = response.data.total_count; + delete response.data.incomplete_results; + delete response.data.repository_selection; + delete response.data.total_count; + const namespaceKey = Object.keys(response.data)[0]; + const data = response.data[namespaceKey]; + response.data = data; + + if (typeof incompleteResults !== "undefined") { + response.data.incomplete_results = incompleteResults; + } + + if (typeof repositorySelection !== "undefined") { + response.data.repository_selection = repositorySelection; + } + + response.data.total_count = totalCount; + return response; +} + +function iterator(octokit, route, parameters) { + const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); + const requestMethod = typeof route === "function" ? route : octokit.request; + const method = options.method; + const headers = options.headers; + let url = options.url; + return { + [Symbol.asyncIterator]: () => ({ + async next() { + if (!url) return { + done: true + }; + const response = await requestMethod({ + method, + url, + headers + }); + const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format: + // '; rel="next", ; rel="last"' + // sets `url` to undefined if "next" URL is not present or `link` header is not set + + url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; + return { + value: normalizedResponse + }; } + + }) + }; +} + +function paginate(octokit, route, parameters, mapFn) { + if (typeof parameters === "function") { + mapFn = parameters; + parameters = undefined; + } + + return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); +} + +function gather(octokit, results, iterator, mapFn) { + return iterator.next().then(result => { + if (result.done) { + return results; + } + + let earlyExit = false; + + function done() { + earlyExit = true; + } + + results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); + + if (earlyExit) { + return results; + } + + return gather(octokit, results, iterator, mapFn); + }); +} + +const composePaginateRest = Object.assign(paginate, { + iterator +}); + +/** + * @param octokit Octokit instance + * @param options Options passed to Octokit constructor + */ + +function paginateRest(octokit) { + return { + paginate: Object.assign(paginate.bind(null, octokit), { + iterator: iterator.bind(null, octokit) + }) + }; +} +paginateRest.VERSION = VERSION; + +exports.composePaginateRest = composePaginateRest; +exports.paginateRest = paginateRest; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 6865: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +const Endpoints = { + actions: { + addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], + cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"], + createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], + createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"], + createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"], + createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"], + createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], + createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"], + createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"], + deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], + deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"], + deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"], + deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"], + deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], + deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], + disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"], + disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"], + downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"], + downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"], + downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], + enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"], + enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"], + getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"], + getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"], + getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"], + getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"], + getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], + getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], + getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, { + renamed: ["actions", "getGithubActionsPermissionsRepository"] }], - updateImport: ["PATCH /repos/{owner}/{repo}/import"] - }, - orgs: { - blockUser: ["PUT /orgs/{org}/blocks/{username}"], - cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], - checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], - checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], - checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], - convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"], - createInvitation: ["POST /orgs/{org}/invitations"], - createWebhook: ["POST /orgs/{org}/hooks"], - deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], - get: ["GET /orgs/{org}"], - getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], - getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], - getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], - getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], - list: ["GET /organizations"], - listAppInstallations: ["GET /orgs/{org}/installations"], - listBlockedUsers: ["GET /orgs/{org}/blocks"], - listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], - listForAuthenticatedUser: ["GET /user/orgs"], - listForUser: ["GET /users/{username}/orgs"], - listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], - listMembers: ["GET /orgs/{org}/members"], - listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], - listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], - listPendingInvitations: ["GET /orgs/{org}/invitations"], - listPublicMembers: ["GET /orgs/{org}/public_members"], - listWebhooks: ["GET /orgs/{org}/hooks"], - pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], - removeMember: ["DELETE /orgs/{org}/members/{username}"], - removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], - removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"], - removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"], - setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], - setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"], - unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], - update: ["PATCH /orgs/{org}"], - updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"], - updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], - updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] + getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], + getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], + getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], + getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"], + getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], + getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], + getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"], + getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"], + listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], + listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"], + listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], + listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], + listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], + listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], + listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"], + listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"], + listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"], + listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], + listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], + listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"], + listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"], + listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], + reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], + removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], + setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"], + setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"], + setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"], + setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"], + setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"], + setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"] }, - projects: { - addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}", { - mediaType: { - previews: ["inertia"] - } - }], - createCard: ["POST /projects/columns/{column_id}/cards", { - mediaType: { - previews: ["inertia"] - } - }], - createColumn: ["POST /projects/{project_id}/columns", { - mediaType: { - previews: ["inertia"] - } - }], - createForAuthenticatedUser: ["POST /user/projects", { + activity: { + checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], + deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], + deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"], + getFeeds: ["GET /feeds"], + getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], + getThread: ["GET /notifications/threads/{thread_id}"], + getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"], + listEventsForAuthenticatedUser: ["GET /users/{username}/events"], + listNotificationsForAuthenticatedUser: ["GET /notifications"], + listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"], + listPublicEvents: ["GET /events"], + listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], + listPublicEventsForUser: ["GET /users/{username}/events/public"], + listPublicOrgEvents: ["GET /orgs/{org}/events"], + listReceivedEventsForUser: ["GET /users/{username}/received_events"], + listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"], + listRepoEvents: ["GET /repos/{owner}/{repo}/events"], + listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"], + listReposStarredByAuthenticatedUser: ["GET /user/starred"], + listReposStarredByUser: ["GET /users/{username}/starred"], + listReposWatchedByUser: ["GET /users/{username}/subscriptions"], + listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], + listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], + listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], + markNotificationsAsRead: ["PUT /notifications"], + markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], + markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], + setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], + setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"], + starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], + unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] + }, + apps: { + addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"], + checkToken: ["POST /applications/{client_id}/token"], + createContentAttachment: ["POST /content_references/{content_reference_id}/attachments", { mediaType: { - previews: ["inertia"] + previews: ["corsair"] } }], - createForOrg: ["POST /orgs/{org}/projects", { - mediaType: { - previews: ["inertia"] + createFromManifest: ["POST /app-manifests/{code}/conversions"], + createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"], + deleteAuthorization: ["DELETE /applications/{client_id}/grant"], + deleteInstallation: ["DELETE /app/installations/{installation_id}"], + deleteToken: ["DELETE /applications/{client_id}/token"], + getAuthenticated: ["GET /app"], + getBySlug: ["GET /apps/{app_slug}"], + getInstallation: ["GET /app/installations/{installation_id}"], + getOrgInstallation: ["GET /orgs/{org}/installation"], + getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], + getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"], + getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"], + getUserInstallation: ["GET /users/{username}/installation"], + getWebhookConfigForApp: ["GET /app/hook/config"], + listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], + listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"], + listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"], + listInstallations: ["GET /app/installations"], + listInstallationsForAuthenticatedUser: ["GET /user/installations"], + listPlans: ["GET /marketplace_listing/plans"], + listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], + listReposAccessibleToInstallation: ["GET /installation/repositories"], + listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], + listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"], + removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"], + resetToken: ["PATCH /applications/{client_id}/token"], + revokeInstallationAccessToken: ["DELETE /installation/token"], + scopeToken: ["POST /applications/{client_id}/token/scoped"], + suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], + unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"], + updateWebhookConfigForApp: ["PATCH /app/hook/config"] + }, + billing: { + getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], + getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"], + getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], + getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"], + getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"], + getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"] + }, + checks: { + create: ["POST /repos/{owner}/{repo}/check-runs"], + createSuite: ["POST /repos/{owner}/{repo}/check-suites"], + get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], + getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], + listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"], + listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], + listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"], + listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], + rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"], + setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"], + update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] + }, + codeScanning: { + getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, { + renamedParameters: { + alert_id: "alert_number" } }], - createForRepo: ["POST /repos/{owner}/{repo}/projects", { + listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], + listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], + updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"], + uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] + }, + codesOfConduct: { + getAllCodesOfConduct: ["GET /codes_of_conduct", { mediaType: { - previews: ["inertia"] + previews: ["scarlet-witch"] } }], - delete: ["DELETE /projects/{project_id}", { + getConductCode: ["GET /codes_of_conduct/{key}", { mediaType: { - previews: ["inertia"] + previews: ["scarlet-witch"] } }], - deleteCard: ["DELETE /projects/columns/cards/{card_id}", { + getForRepo: ["GET /repos/{owner}/{repo}/community/code_of_conduct", { mediaType: { - previews: ["inertia"] + previews: ["scarlet-witch"] } + }] + }, + emojis: { + get: ["GET /emojis"] + }, + enterpriseAdmin: { + disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], + enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], + getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"], + getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"], + listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"], + setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"], + setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"], + setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"] + }, + gists: { + checkIsStarred: ["GET /gists/{gist_id}/star"], + create: ["POST /gists"], + createComment: ["POST /gists/{gist_id}/comments"], + delete: ["DELETE /gists/{gist_id}"], + deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], + fork: ["POST /gists/{gist_id}/forks"], + get: ["GET /gists/{gist_id}"], + getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], + getRevision: ["GET /gists/{gist_id}/{sha}"], + list: ["GET /gists"], + listComments: ["GET /gists/{gist_id}/comments"], + listCommits: ["GET /gists/{gist_id}/commits"], + listForUser: ["GET /users/{username}/gists"], + listForks: ["GET /gists/{gist_id}/forks"], + listPublic: ["GET /gists/public"], + listStarred: ["GET /gists/starred"], + star: ["PUT /gists/{gist_id}/star"], + unstar: ["DELETE /gists/{gist_id}/star"], + update: ["PATCH /gists/{gist_id}"], + updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] + }, + git: { + createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], + createCommit: ["POST /repos/{owner}/{repo}/git/commits"], + createRef: ["POST /repos/{owner}/{repo}/git/refs"], + createTag: ["POST /repos/{owner}/{repo}/git/tags"], + createTree: ["POST /repos/{owner}/{repo}/git/trees"], + deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], + getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], + getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], + getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], + getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], + getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], + listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], + updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] + }, + gitignore: { + getAllTemplates: ["GET /gitignore/templates"], + getTemplate: ["GET /gitignore/templates/{name}"] + }, + interactions: { + getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], + getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], + getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], + getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, { + renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] }], - deleteColumn: ["DELETE /projects/columns/{column_id}", { - mediaType: { - previews: ["inertia"] - } + removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], + removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], + removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"], + removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, { + renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] }], - get: ["GET /projects/{project_id}", { + setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], + setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], + setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], + setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, { + renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] + }] + }, + issues: { + addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"], + addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], + checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], + create: ["POST /repos/{owner}/{repo}/issues"], + createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"], + createLabel: ["POST /repos/{owner}/{repo}/labels"], + createMilestone: ["POST /repos/{owner}/{repo}/milestones"], + deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"], + deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], + deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"], + get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], + getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], + getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], + getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], + getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], + list: ["GET /issues"], + listAssignees: ["GET /repos/{owner}/{repo}/assignees"], + listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], + listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], + listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], + listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], + listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", { + mediaType: { + previews: ["mockingbird"] + } + }], + listForAuthenticatedUser: ["GET /user/issues"], + listForOrg: ["GET /orgs/{org}/issues"], + listForRepo: ["GET /repos/{owner}/{repo}/issues"], + listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"], + listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], + listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"], + listMilestones: ["GET /repos/{owner}/{repo}/milestones"], + lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], + removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"], + removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"], + removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"], + setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], + unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], + update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], + updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], + updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], + updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"] + }, + licenses: { + get: ["GET /licenses/{license}"], + getAllCommonlyUsed: ["GET /licenses"], + getForRepo: ["GET /repos/{owner}/{repo}/license"] + }, + markdown: { + render: ["POST /markdown"], + renderRaw: ["POST /markdown/raw", { + headers: { + "content-type": "text/plain; charset=utf-8" + } + }] + }, + meta: { + get: ["GET /meta"], + getOctocat: ["GET /octocat"], + getZen: ["GET /zen"], + root: ["GET /"] + }, + migrations: { + cancelImport: ["DELETE /repos/{owner}/{repo}/import"], + deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive", { + mediaType: { + previews: ["wyandotte"] + } + }], + deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive", { + mediaType: { + previews: ["wyandotte"] + } + }], + downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive", { + mediaType: { + previews: ["wyandotte"] + } + }], + getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive", { + mediaType: { + previews: ["wyandotte"] + } + }], + getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"], + getImportStatus: ["GET /repos/{owner}/{repo}/import"], + getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"], + getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}", { + mediaType: { + previews: ["wyandotte"] + } + }], + getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}", { + mediaType: { + previews: ["wyandotte"] + } + }], + listForAuthenticatedUser: ["GET /user/migrations", { + mediaType: { + previews: ["wyandotte"] + } + }], + listForOrg: ["GET /orgs/{org}/migrations", { + mediaType: { + previews: ["wyandotte"] + } + }], + listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories", { + mediaType: { + previews: ["wyandotte"] + } + }], + listReposForUser: ["GET /user/migrations/{migration_id}/repositories", { + mediaType: { + previews: ["wyandotte"] + } + }], + mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"], + setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"], + startForAuthenticatedUser: ["POST /user/migrations"], + startForOrg: ["POST /orgs/{org}/migrations"], + startImport: ["PUT /repos/{owner}/{repo}/import"], + unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock", { + mediaType: { + previews: ["wyandotte"] + } + }], + unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock", { + mediaType: { + previews: ["wyandotte"] + } + }], + updateImport: ["PATCH /repos/{owner}/{repo}/import"] + }, + orgs: { + blockUser: ["PUT /orgs/{org}/blocks/{username}"], + cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], + checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], + checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], + checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], + convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"], + createInvitation: ["POST /orgs/{org}/invitations"], + createWebhook: ["POST /orgs/{org}/hooks"], + deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], + get: ["GET /orgs/{org}"], + getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], + getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], + getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], + getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], + list: ["GET /organizations"], + listAppInstallations: ["GET /orgs/{org}/installations"], + listBlockedUsers: ["GET /orgs/{org}/blocks"], + listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], + listForAuthenticatedUser: ["GET /user/orgs"], + listForUser: ["GET /users/{username}/orgs"], + listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], + listMembers: ["GET /orgs/{org}/members"], + listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], + listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], + listPendingInvitations: ["GET /orgs/{org}/invitations"], + listPublicMembers: ["GET /orgs/{org}/public_members"], + listWebhooks: ["GET /orgs/{org}/hooks"], + pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], + removeMember: ["DELETE /orgs/{org}/members/{username}"], + removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], + removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"], + removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"], + setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], + setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"], + unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], + update: ["PATCH /orgs/{org}"], + updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"], + updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], + updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] + }, + projects: { + addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}", { + mediaType: { + previews: ["inertia"] + } + }], + createCard: ["POST /projects/columns/{column_id}/cards", { + mediaType: { + previews: ["inertia"] + } + }], + createColumn: ["POST /projects/{project_id}/columns", { + mediaType: { + previews: ["inertia"] + } + }], + createForAuthenticatedUser: ["POST /user/projects", { + mediaType: { + previews: ["inertia"] + } + }], + createForOrg: ["POST /orgs/{org}/projects", { + mediaType: { + previews: ["inertia"] + } + }], + createForRepo: ["POST /repos/{owner}/{repo}/projects", { + mediaType: { + previews: ["inertia"] + } + }], + delete: ["DELETE /projects/{project_id}", { + mediaType: { + previews: ["inertia"] + } + }], + deleteCard: ["DELETE /projects/columns/cards/{card_id}", { + mediaType: { + previews: ["inertia"] + } + }], + deleteColumn: ["DELETE /projects/columns/{column_id}", { + mediaType: { + previews: ["inertia"] + } + }], + get: ["GET /projects/{project_id}", { mediaType: { previews: ["inertia"] } @@ -4521,133 +5713,814 @@ const Endpoints = { unfollow: ["DELETE /user/following/{username}"], updateAuthenticated: ["PATCH /user"] } -}; +}; + +const VERSION = "4.10.1"; + +function endpointsToMethods(octokit, endpointsMap) { + const newMethods = {}; + + for (const [scope, endpoints] of Object.entries(endpointsMap)) { + for (const [methodName, endpoint] of Object.entries(endpoints)) { + const [route, defaults, decorations] = endpoint; + const [method, url] = route.split(/ /); + const endpointDefaults = Object.assign({ + method, + url + }, defaults); + + if (!newMethods[scope]) { + newMethods[scope] = {}; + } + + const scopeMethods = newMethods[scope]; + + if (decorations) { + scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations); + continue; + } + + scopeMethods[methodName] = octokit.request.defaults(endpointDefaults); + } + } + + return newMethods; +} + +function decorate(octokit, scope, methodName, defaults, decorations) { + const requestWithDefaults = octokit.request.defaults(defaults); + /* istanbul ignore next */ + + function withDecorations(...args) { + // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 + let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData` + + if (decorations.mapToData) { + options = Object.assign({}, options, { + data: options[decorations.mapToData], + [decorations.mapToData]: undefined + }); + return requestWithDefaults(options); + } + + if (decorations.renamed) { + const [newScope, newMethodName] = decorations.renamed; + octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`); + } + + if (decorations.deprecated) { + octokit.log.warn(decorations.deprecated); + } + + if (decorations.renamedParameters) { + // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 + const options = requestWithDefaults.endpoint.merge(...args); + + for (const [name, alias] of Object.entries(decorations.renamedParameters)) { + if (name in options) { + octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`); + + if (!(alias in options)) { + options[alias] = options[name]; + } + + delete options[name]; + } + } + + return requestWithDefaults(options); + } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 + + + return requestWithDefaults(...args); + } + + return Object.assign(withDecorations, requestWithDefaults); +} + +/** + * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary + * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is + * done, we will remove the registerEndpoints methods and return the methods + * directly as with the other plugins. At that point we will also remove the + * legacy workarounds and deprecations. + * + * See the plan at + * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1 + */ + +function restEndpointMethods(octokit) { + return endpointsToMethods(octokit, Endpoints); +} +restEndpointMethods.VERSION = VERSION; + +exports.restEndpointMethods = restEndpointMethods; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 1042: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var deprecation = __nccwpck_require__(2280); +var once = _interopDefault(__nccwpck_require__(8953)); + +const logOnce = once(deprecation => console.warn(deprecation)); +/** + * Error with extra properties to help with debugging + */ + +class RequestError extends Error { + constructor(message, statusCode, options) { + super(message); // Maintains proper stack trace (only available on V8) + + /* istanbul ignore next */ + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + + this.name = "HttpError"; + this.status = statusCode; + Object.defineProperty(this, "code", { + get() { + logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); + return statusCode; + } + + }); + this.headers = options.headers || {}; // redact request credentials without mutating original request options + + const requestCopy = Object.assign({}, options.request); + + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") + }); + } + + requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit + // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications + .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended + // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header + .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } + +} + +exports.RequestError = RequestError; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 2364: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var endpoint = __nccwpck_require__(7509); +var universalUserAgent = __nccwpck_require__(7163); +var isPlainObject = __nccwpck_require__(987); +var nodeFetch = _interopDefault(__nccwpck_require__(2460)); +var requestError = __nccwpck_require__(1042); + +const VERSION = "5.4.14"; + +function getBufferResponse(response) { + return response.arrayBuffer(); +} + +function fetchWrapper(requestOptions) { + if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { + requestOptions.body = JSON.stringify(requestOptions.body); + } + + let headers = {}; + let status; + let url; + const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; + return fetch(requestOptions.url, Object.assign({ + method: requestOptions.method, + body: requestOptions.body, + headers: requestOptions.headers, + redirect: requestOptions.redirect + }, requestOptions.request)).then(response => { + url = response.url; + status = response.status; + + for (const keyAndValue of response.headers) { + headers[keyAndValue[0]] = keyAndValue[1]; + } + + if (status === 204 || status === 205) { + return; + } // GitHub API returns 200 for HEAD requests + + + if (requestOptions.method === "HEAD") { + if (status < 400) { + return; + } + + throw new requestError.RequestError(response.statusText, status, { + headers, + request: requestOptions + }); + } + + if (status === 304) { + throw new requestError.RequestError("Not modified", status, { + headers, + request: requestOptions + }); + } + + if (status >= 400) { + return response.text().then(message => { + const error = new requestError.RequestError(message, status, { + headers, + request: requestOptions + }); + + try { + let responseBody = JSON.parse(error.message); + Object.assign(error, responseBody); + let errors = responseBody.errors; // Assumption `errors` would always be in Array format + + error.message = error.message + ": " + errors.map(JSON.stringify).join(", "); + } catch (e) {// ignore, see octokit/rest.js#684 + } + + throw error; + }); + } + + const contentType = response.headers.get("content-type"); + + if (/application\/json/.test(contentType)) { + return response.json(); + } + + if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { + return response.text(); + } + + return getBufferResponse(response); + }).then(data => { + return { + status, + url, + headers, + data + }; + }).catch(error => { + if (error instanceof requestError.RequestError) { + throw error; + } + + throw new requestError.RequestError(error.message, 500, { + headers, + request: requestOptions + }); + }); +} + +function withDefaults(oldEndpoint, newDefaults) { + const endpoint = oldEndpoint.defaults(newDefaults); + + const newApi = function (route, parameters) { + const endpointOptions = endpoint.merge(route, parameters); + + if (!endpointOptions.request || !endpointOptions.request.hook) { + return fetchWrapper(endpoint.parse(endpointOptions)); + } + + const request = (route, parameters) => { + return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); + }; + + Object.assign(request, { + endpoint, + defaults: withDefaults.bind(null, endpoint) + }); + return endpointOptions.request.hook(request, endpointOptions); + }; + + return Object.assign(newApi, { + endpoint, + defaults: withDefaults.bind(null, endpoint) + }); +} + +const request = withDefaults(endpoint.endpoint, { + headers: { + "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` + } +}); + +exports.request = request; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 2522: +/***/ ((module) => { + +"use strict"; + +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} + + +/***/ }), + +/***/ 3850: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var register = __nccwpck_require__(435) +var addHook = __nccwpck_require__(1339) +var removeHook = __nccwpck_require__(3468) + +// bind with array of arguments: https://stackoverflow.com/a/21792913 +var bind = Function.bind +var bindable = bind.bind(bind) + +function bindApi (hook, state, name) { + var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]) + hook.api = { remove: removeHookRef } + hook.remove = removeHookRef + + ;['before', 'error', 'after', 'wrap'].forEach(function (kind) { + var args = name ? [state, kind, name] : [state, kind] + hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args) + }) +} + +function HookSingular () { + var singularHookName = 'h' + var singularHookState = { + registry: {} + } + var singularHook = register.bind(null, singularHookState, singularHookName) + bindApi(singularHook, singularHookState, singularHookName) + return singularHook +} + +function HookCollection () { + var state = { + registry: {} + } + + var hook = register.bind(null, state) + bindApi(hook, state) + + return hook +} + +var collectionHookDeprecationMessageDisplayed = false +function Hook () { + if (!collectionHookDeprecationMessageDisplayed) { + console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4') + collectionHookDeprecationMessageDisplayed = true + } + return HookCollection() +} + +Hook.Singular = HookSingular.bind() +Hook.Collection = HookCollection.bind() + +module.exports = Hook +// expose constructors as a named property for TypeScript +module.exports.Hook = Hook +module.exports.Singular = Hook.Singular +module.exports.Collection = Hook.Collection + + +/***/ }), + +/***/ 1339: +/***/ ((module) => { + +module.exports = addHook; + +function addHook(state, kind, name, hook) { + var orig = hook; + if (!state.registry[name]) { + state.registry[name] = []; + } + + if (kind === "before") { + hook = function (method, options) { + return Promise.resolve() + .then(orig.bind(null, options)) + .then(method.bind(null, options)); + }; + } + + if (kind === "after") { + hook = function (method, options) { + var result; + return Promise.resolve() + .then(method.bind(null, options)) + .then(function (result_) { + result = result_; + return orig(result, options); + }) + .then(function () { + return result; + }); + }; + } + + if (kind === "error") { + hook = function (method, options) { + return Promise.resolve() + .then(method.bind(null, options)) + .catch(function (error) { + return orig(error, options); + }); + }; + } -const VERSION = "4.10.1"; + state.registry[name].push({ + hook: hook, + orig: orig, + }); +} -function endpointsToMethods(octokit, endpointsMap) { - const newMethods = {}; - for (const [scope, endpoints] of Object.entries(endpointsMap)) { - for (const [methodName, endpoint] of Object.entries(endpoints)) { - const [route, defaults, decorations] = endpoint; - const [method, url] = route.split(/ /); - const endpointDefaults = Object.assign({ - method, - url - }, defaults); +/***/ }), - if (!newMethods[scope]) { - newMethods[scope] = {}; - } +/***/ 435: +/***/ ((module) => { - const scopeMethods = newMethods[scope]; +module.exports = register; - if (decorations) { - scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations); - continue; - } +function register(state, name, method, options) { + if (typeof method !== "function") { + throw new Error("method for before hook must be a function"); + } - scopeMethods[methodName] = octokit.request.defaults(endpointDefaults); + if (!options) { + options = {}; + } + + if (Array.isArray(name)) { + return name.reverse().reduce(function (callback, name) { + return register.bind(null, state, name, callback, options); + }, method)(); + } + + return Promise.resolve().then(function () { + if (!state.registry[name]) { + return method(options); } + + return state.registry[name].reduce(function (method, registered) { + return registered.hook.bind(null, method, options); + }, method)(); + }); +} + + +/***/ }), + +/***/ 3468: +/***/ ((module) => { + +module.exports = removeHook; + +function removeHook(state, name, method) { + if (!state.registry[name]) { + return; } - return newMethods; + var index = state.registry[name] + .map(function (registered) { + return registered.orig; + }) + .indexOf(method); + + if (index === -1) { + return; + } + + state.registry[name].splice(index, 1); } -function decorate(octokit, scope, methodName, defaults, decorations) { - const requestWithDefaults = octokit.request.defaults(defaults); - /* istanbul ignore next */ - function withDecorations(...args) { - // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 - let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData` +/***/ }), - if (decorations.mapToData) { - options = Object.assign({}, options, { - data: options[decorations.mapToData], - [decorations.mapToData]: undefined - }); - return requestWithDefaults(options); - } +/***/ 308: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - if (decorations.renamed) { - const [newScope, newMethodName] = decorations.renamed; - octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`); - } +var concatMap = __nccwpck_require__(388); +var balanced = __nccwpck_require__(2522); - if (decorations.deprecated) { - octokit.log.warn(decorations.deprecated); - } +module.exports = expandTop; - if (decorations.renamedParameters) { - // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 - const options = requestWithDefaults.endpoint.merge(...args); +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; - for (const [name, alias] of Object.entries(decorations.renamedParameters)) { - if (name in options) { - octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`); +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} - if (!(alias in options)) { - options[alias] = options[name]; - } +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} - delete options[name]; - } - } +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} - return requestWithDefaults(options); - } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; - return requestWithDefaults(...args); + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); } - return Object.assign(withDecorations, requestWithDefaults); + parts.push.apply(parts, p); + + return parts; } -/** - * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary - * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is - * done, we will remove the registerEndpoints methods and return the methods - * directly as with the other plugins. At that point we will also remove the - * legacy workarounds and deprecations. - * - * See the plan at - * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1 - */ +function expandTop(str) { + if (!str) + return []; -function restEndpointMethods(octokit) { - return endpointsToMethods(octokit, Endpoints); + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; } -restEndpointMethods.VERSION = VERSION; -exports.restEndpointMethods = restEndpointMethods; -//# sourceMappingURL=index.js.map /***/ }), -/***/ 1042: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +/***/ 388: +/***/ ((module) => { -"use strict"; +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } +/***/ }), -var deprecation = __nccwpck_require__(2280); -var once = _interopDefault(__nccwpck_require__(8953)); +/***/ 2280: +/***/ ((__unused_webpack_module, exports) => { -const logOnce = once(deprecation => console.warn(deprecation)); -/** - * Error with extra properties to help with debugging - */ +"use strict"; -class RequestError extends Error { - constructor(message, statusCode, options) { + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +class Deprecation extends Error { + constructor(message) { super(message); // Maintains proper stack trace (only available on V8) /* istanbul ignore next */ @@ -4656,444 +6529,1012 @@ class RequestError extends Error { Error.captureStackTrace(this, this.constructor); } - this.name = "HttpError"; - this.status = statusCode; - Object.defineProperty(this, "code", { - get() { - logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); - return statusCode; - } + this.name = 'Deprecation'; + } - }); - this.headers = options.headers || {}; // redact request credentials without mutating original request options +} - const requestCopy = Object.assign({}, options.request); +exports.Deprecation = Deprecation; - if (options.request.headers.authorization) { - requestCopy.headers = Object.assign({}, options.request.headers, { - authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") - }); - } - requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit - // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications - .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended - // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header - .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); - this.request = requestCopy; +/***/ }), + +/***/ 987: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +/*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +function isObject(o) { + return Object.prototype.toString.call(o) === '[object Object]'; +} + +function isPlainObject(o) { + var ctor,prot; + + if (isObject(o) === false) return false; + + // If has modified constructor + ctor = o.constructor; + if (ctor === undefined) return true; + + // If has modified prototype + prot = ctor.prototype; + if (isObject(prot) === false) return false; + + // If constructor does not have an Object-specific method + if (prot.hasOwnProperty('isPrototypeOf') === false) { + return false; } + // Most likely a plain Object + return true; } -exports.RequestError = RequestError; -//# sourceMappingURL=index.js.map +exports.isPlainObject = isPlainObject; /***/ }), -/***/ 2364: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +/***/ 2959: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -"use strict"; +module.exports = minimatch +minimatch.Minimatch = Minimatch +var path = (function () { try { return __nccwpck_require__(1017) } catch (e) {}}()) || { + sep: '/' +} +minimatch.sep = path.sep -Object.defineProperty(exports, "__esModule", ({ value: true })); +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = __nccwpck_require__(308) -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} -var endpoint = __nccwpck_require__(7509); -var universalUserAgent = __nccwpck_require__(7163); -var isPlainObject = __nccwpck_require__(987); -var nodeFetch = _interopDefault(__nccwpck_require__(2460)); -var requestError = __nccwpck_require__(1042); +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' -const VERSION = "5.4.14"; +// * => any number of characters +var star = qmark + '*?' -function getBufferResponse(response) { - return response.arrayBuffer(); +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) } -function fetchWrapper(requestOptions) { - if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { - requestOptions.body = JSON.stringify(requestOptions.body); +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) } +} - let headers = {}; - let status; - let url; - const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; - return fetch(requestOptions.url, Object.assign({ - method: requestOptions.method, - body: requestOptions.body, - headers: requestOptions.headers, - redirect: requestOptions.redirect - }, requestOptions.request)).then(response => { - url = response.url; - status = response.status; +function ext (a, b) { + b = b || {} + var t = {} + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + return t +} - for (const keyAndValue of response.headers) { - headers[keyAndValue[0]] = keyAndValue[1]; - } +minimatch.defaults = function (def) { + if (!def || typeof def !== 'object' || !Object.keys(def).length) { + return minimatch + } - if (status === 204 || status === 205) { - return; - } // GitHub API returns 200 for HEAD requests + var orig = minimatch + var m = function minimatch (p, pattern, options) { + return orig(p, pattern, ext(def, options)) + } - if (requestOptions.method === "HEAD") { - if (status < 400) { - return; - } + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + m.Minimatch.defaults = function defaults (options) { + return orig.defaults(ext(def, options)).Minimatch + } - throw new requestError.RequestError(response.statusText, status, { - headers, - request: requestOptions - }); - } + m.filter = function filter (pattern, options) { + return orig.filter(pattern, ext(def, options)) + } - if (status === 304) { - throw new requestError.RequestError("Not modified", status, { - headers, - request: requestOptions - }); - } + m.defaults = function defaults (options) { + return orig.defaults(ext(def, options)) + } - if (status >= 400) { - return response.text().then(message => { - const error = new requestError.RequestError(message, status, { - headers, - request: requestOptions - }); + m.makeRe = function makeRe (pattern, options) { + return orig.makeRe(pattern, ext(def, options)) + } - try { - let responseBody = JSON.parse(error.message); - Object.assign(error, responseBody); - let errors = responseBody.errors; // Assumption `errors` would always be in Array format + m.braceExpand = function braceExpand (pattern, options) { + return orig.braceExpand(pattern, ext(def, options)) + } - error.message = error.message + ": " + errors.map(JSON.stringify).join(", "); - } catch (e) {// ignore, see octokit/rest.js#684 - } + m.match = function (list, pattern, options) { + return orig.match(list, pattern, ext(def, options)) + } - throw error; - }); - } + return m +} - const contentType = response.headers.get("content-type"); +Minimatch.defaults = function (def) { + return minimatch.defaults(def).Minimatch +} - if (/application\/json/.test(contentType)) { - return response.json(); - } +function minimatch (p, pattern, options) { + assertValidPattern(pattern) - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); - } + if (!options) options = {} - return getBufferResponse(response); - }).then(data => { - return { - status, - url, - headers, - data - }; - }).catch(error => { - if (error instanceof requestError.RequestError) { - throw error; - } + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } - throw new requestError.RequestError(error.message, 500, { - headers, - request: requestOptions - }); - }); + return new Minimatch(pattern, options).match(p) } -function withDefaults(oldEndpoint, newDefaults) { - const endpoint = oldEndpoint.defaults(newDefaults); +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } - const newApi = function (route, parameters) { - const endpointOptions = endpoint.merge(route, parameters); + assertValidPattern(pattern) - if (!endpointOptions.request || !endpointOptions.request.hook) { - return fetchWrapper(endpoint.parse(endpointOptions)); - } + if (!options) options = {} - const request = (route, parameters) => { - return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); - }; + pattern = pattern.trim() - Object.assign(request, { - endpoint, - defaults: withDefaults.bind(null, endpoint) - }); - return endpointOptions.request.hook(request, endpointOptions); - }; + // windows support: need to use /, not \ + if (!options.allowWindowsEscape && path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } - return Object.assign(newApi, { - endpoint, - defaults: withDefaults.bind(null, endpoint) - }); + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + this.partial = !!options.partial + + // make the set of regexps etc. + this.make() } -const request = withDefaults(endpoint.endpoint, { - headers: { - "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return } -}); -exports.request = request; -//# sourceMappingURL=index.js.map + // step 1: figure out negation, etc. + this.parseNegate() + // step 2: expand braces + var set = this.globSet = this.braceExpand() -/***/ }), + if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) } -/***/ 3850: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + this.debug(this.pattern, set) -var register = __nccwpck_require__(435) -var addHook = __nccwpck_require__(1339) -var removeHook = __nccwpck_require__(3468) + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) -// bind with array of arguments: https://stackoverflow.com/a/21792913 -var bind = Function.bind -var bindable = bind.bind(bind) + this.debug(this.pattern, set) -function bindApi (hook, state, name) { - var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]) - hook.api = { remove: removeHookRef } - hook.remove = removeHookRef + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) - ;['before', 'error', 'after', 'wrap'].forEach(function (kind) { - var args = name ? [state, kind, name] : [state, kind] - hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args) + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 }) + + this.debug(this.pattern, set) + + this.set = set } -function HookSingular () { - var singularHookName = 'h' - var singularHookState = { - registry: {} +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ } - var singularHook = register.bind(null, singularHookState, singularHookName) - bindApi(singularHook, singularHookState, singularHookName) - return singularHook + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate } -function HookCollection () { - var state = { - registry: {} +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } } - var hook = register.bind(null, state) - bindApi(hook, state) + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern - return hook + assertValidPattern(pattern) + + // Thanks to Yeting Li for + // improving this regexp to avoid a ReDOS vulnerability. + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) } -var collectionHookDeprecationMessageDisplayed = false -function Hook () { - if (!collectionHookDeprecationMessageDisplayed) { - console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4') - collectionHookDeprecationMessageDisplayed = true +var MAX_PATTERN_LENGTH = 1024 * 64 +var assertValidPattern = function (pattern) { + if (typeof pattern !== 'string') { + throw new TypeError('invalid pattern') + } + + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError('pattern is too long') } - return HookCollection() } -Hook.Singular = HookSingular.bind() -Hook.Collection = HookCollection.bind() +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + assertValidPattern(pattern) + + var options = this.options + + // shortcuts + if (pattern === '**') { + if (!options.noglobstar) + return GLOBSTAR + else + pattern = '*' + } + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } -module.exports = Hook -// expose constructors as a named property for TypeScript -module.exports.Hook = Hook -module.exports.Singular = Hook.Singular -module.exports.Collection = Hook.Collection + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + /* istanbul ignore next */ + case '/': { + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + } + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } -/***/ }), + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } -/***/ 1339: -/***/ ((module) => { + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) -module.exports = addHook; + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type -function addHook(state, kind, name, hook) { - var orig = hook; - if (!state.registry[name]) { - state.registry[name] = []; + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail } - if (kind === "before") { - hook = function (method, options) { - return Promise.resolve() - .then(orig.bind(null, options)) - .then(method.bind(null, options)); - }; + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' } - if (kind === "after") { - hook = function (method, options) { - var result; - return Promise.resolve() - .then(method.bind(null, options)) - .then(function (result_) { - result = result_; - return orig(result, options); - }) - .then(function () { - return result; - }); - }; + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '[': case '.': case '(': addPatternStart = true } - if (kind === "error") { - hook = function (method, options) { - return Promise.resolve() - .then(method.bind(null, options)) - .catch(function (error) { - return orig(error, options); - }); - }; + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe } - state.registry[name].push({ - hook: hook, - orig: orig, - }); -} - - -/***/ }), - -/***/ 435: -/***/ ((module) => { + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } -module.exports = register; + if (addPatternStart) { + re = patternStart + re + } -function register(state, name, method, options) { - if (typeof method !== "function") { - throw new Error("method for before hook must be a function"); + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] } - if (!options) { - options = {}; + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) } - if (Array.isArray(name)) { - return name.reverse().reduce(function (callback, name) { - return register.bind(null, state, name, callback, options); - }, method)(); + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) /* istanbul ignore next - should be impossible */ { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') } - return Promise.resolve().then(function () { - if (!state.registry[name]) { - return method(options); - } + regExp._glob = pattern + regExp._src = re - return state.registry[name].reduce(function (method, registered) { - return registered.hook.bind(null, method, options); - }, method)(); - }); + return regExp } +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} -/***/ }), +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options -/***/ 3468: -/***/ ((module) => { + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' -module.exports = removeHook; + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') -function removeHook(state, name, method) { - if (!state.registry[name]) { - return; - } + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' - var index = state.registry[name] - .map(function (registered) { - return registered.orig; - }) - .indexOf(method); + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' - if (index === -1) { - return; + try { + this.regexp = new RegExp(re, flags) + } catch (ex) /* istanbul ignore next - should be impossible */ { + this.regexp = false } + return this.regexp +} - state.registry[name].splice(index, 1); +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list } +Minimatch.prototype.match = function match (f, partial) { + if (typeof partial === 'undefined') partial = this.partial + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' -/***/ }), + if (f === '/' && partial) return true -/***/ 2280: -/***/ ((__unused_webpack_module, exports) => { + var options = this.options -"use strict"; + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) -Object.defineProperty(exports, "__esModule", ({ value: true })); + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. -class Deprecation extends Error { - constructor(message) { - super(message); // Maintains proper stack trace (only available on V8) + var set = this.set + this.debug(this.pattern, 'set', set) - /* istanbul ignore next */ + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate } - - this.name = 'Deprecation'; } + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate } -exports.Deprecation = Deprecation; - - -/***/ }), - -/***/ 987: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) + + this.debug('matchOne', file.length, pattern.length) + + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + /* istanbul ignore if */ + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } -Object.defineProperty(exports, "__esModule", ({ value: true })); + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] -/*! - * is-plain-object - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) -function isObject(o) { - return Object.prototype.toString.call(o) === '[object Object]'; -} + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } -function isPlainObject(o) { - var ctor,prot; + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } - if (isObject(o) === false) return false; + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + /* istanbul ignore if */ + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } - // If has modified constructor - ctor = o.constructor; - if (ctor === undefined) return true; + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + hit = f === p + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } - // If has modified prototype - prot = ctor.prototype; - if (isObject(prot) === false) return false; + if (!hit) return false + } - // If constructor does not have an Object-specific method - if (prot.hasOwnProperty('isPrototypeOf') === false) { - return false; + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else /* istanbul ignore else */ if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + return (fi === fl - 1) && (file[fi] === '') } - // Most likely a plain Object - return true; + // should be unreachable. + /* istanbul ignore next */ + throw new Error('wtf?') } -exports.isPlainObject = isPlainObject; +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} /***/ }), @@ -16599,88 +19040,102 @@ function wrappy (fn, cb) { /***/ 8514: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const core = __nccwpck_require__(6024); -const github = __nccwpck_require__(5016); -const fs = __nccwpck_require__(7147); -const parser = __nccwpck_require__(9253); -const {parseBooleans} = __nccwpck_require__(6434); -const process = __nccwpck_require__(650); -const render = __nccwpck_require__(8183); +const core = __nccwpck_require__(6024) +const github = __nccwpck_require__(5016) +const fs = __nccwpck_require__(7147) +const parser = __nccwpck_require__(9253) +const { parseBooleans } = __nccwpck_require__(6434) +const process = __nccwpck_require__(650) +const render = __nccwpck_require__(8183) +const { debug } = __nccwpck_require__(4518) +const glob = __nccwpck_require__(2723) async function action() { try { - const pathsString = core.getInput("paths"); - const reportPaths = pathsString.split(","); - const minCoverageOverall = parseFloat( - core.getInput("min-coverage-overall") - ); + const token = core.getInput('token') + if (!token) { + core.setFailed("'token' is missing") + return + } + const pathsString = core.getInput('paths') + if (!pathsString) { + core.setFailed("'paths' is missing") + return + } + + const reportPaths = pathsString.split(',') + const minCoverageOverall = parseFloat(core.getInput('min-coverage-overall')) const minCoverageChangedFiles = parseFloat( - core.getInput("min-coverage-changed-files") - ); - const title = core.getInput("title"); - const updateComment = parseBooleans(core.getInput("update-comment")); - const debugMode = parseBooleans(core.getInput("debug-mode")); - const skipIfNoChanges = parseBooleans(core.getInput("skip-if-no-changes")); - - const event = github.context.eventName; - core.info(`Event is ${event}`); - - var base; - var head; - var prNumber; + core.getInput('min-coverage-changed-files') + ) + const title = core.getInput('title') + const updateComment = parseBooleans(core.getInput('update-comment')) + if (updateComment) { + if (!title) { + core.info( + "'title' is not set. 'update-comment' does not work without 'title'" + ) + } + } + const debugMode = parseBooleans(core.getInput('debug-mode')) + const skipIfNoChanges = parseBooleans(core.getInput('skip-if-no-changes')) + + const event = github.context.eventName + core.info(`Event is ${event}`) + + let base + let head + let prNumber switch (event) { - case "pull_request": - case "pull_request_target": - base = github.context.payload.pull_request.base.sha; - head = github.context.payload.pull_request.head.sha; - prNumber = github.context.payload.pull_request.number; - break; - case "push": - base = github.context.payload.before; - head = github.context.payload.after; - isPR = false; - break; + case 'pull_request': + case 'pull_request_target': + base = github.context.payload.pull_request.base.sha + head = github.context.payload.pull_request.head.sha + prNumber = github.context.payload.pull_request.number + break + case 'push': + base = github.context.payload.before + head = github.context.payload.after + break default: - throw `Only pull requests and pushes are supported, ${github.context.eventName} not supported.`; + core.setFailed( + `Only pull requests and pushes are supported, ${github.context.eventName} not supported.` + ) + return } - core.info(`base sha: ${base}`); - core.info(`head sha: ${head}`); + core.info(`base sha: ${base}`) + core.info(`head sha: ${head}`) - const client = github.getOctokit(core.getInput("token")); + const client = github.getOctokit(token) - if (debugMode) core.info(`reportPaths: ${reportPaths}`); - const reportsJsonAsync = getJsonReports(reportPaths); - const changedFiles = await getChangedFiles(base, head, client); - if (debugMode) core.info(`changedFiles: ${debug(changedFiles)}`); + if (debugMode) core.info(`reportPaths: ${reportPaths}`) + const reportsJsonAsync = getJsonReports(reportPaths, debugMode) + const changedFiles = await getChangedFiles(base, head, client) + if (debugMode) core.info(`changedFiles: ${debug(changedFiles)}`) - const reportsJson = await reportsJsonAsync; - if (debugMode) core.info(`report value: ${debug(reportsJson)}`); - const reports = reportsJson.map((report) => report["report"]); + const reportsJson = await reportsJsonAsync + if (debugMode) core.info(`report value: ${debug(reportsJson)}`) + const reports = reportsJson.map((report) => report['report']) - const overallCoverage = process.getOverallCoverage(reports); - if (debugMode) core.info(`overallCoverage: ${debug(overallCoverage)}`); + // TODO Replace this with the getProjectCoverage itself + const overallCoverage = process.getOverallCoverage(reports) + if (debugMode) core.info(`overallCoverage: ${debug(overallCoverage)}`) core.setOutput( - "coverage-overall", + 'coverage-overall', parseFloat(overallCoverage.project.toFixed(2)) - ); + ) - let filesCoverage - let groups = reports.map(report => report["group"]).filter(report => report !== undefined); - if (groups.length !== 0) { - groups.forEach((group) => { - filesCoverage = process.getFileCoverage(group, changedFiles); - }); - } else { - filesCoverage = process.getFileCoverage(reports, changedFiles); - } - if (debugMode) core.info(`filesCoverage: ${debug(filesCoverage)}`); + const project = process.getProjectCoverage(reports, changedFiles) + if (debugMode) core.info(`project: ${debug(project)}`) core.setOutput( - "coverage-changed-files", - parseFloat(filesCoverage.percentage.toFixed(2)) - ); + 'coverage-changed-files', + parseFloat(project['coverage-changed-files'].toFixed(2)) + ) - const skip = skipIfNoChanges && filesCoverage.files.length === 0; + const skip = skipIfNoChanges && project.modules.length === 0 + if (debugMode) core.info(`skip: ${skip}`) + if (debugMode) core.info(`prNumber: ${prNumber}`) if (prNumber != null && !skip) { await addComment( prNumber, @@ -16688,30 +19143,31 @@ async function action() { render.getTitle(title), render.getPRComment( overallCoverage.project, - filesCoverage, + project, minCoverageOverall, minCoverageChangedFiles, title ), - client - ); + client, + debugMode + ) } } catch (error) { - core.setFailed(error); + core.setFailed(error) } } -function debug(obj) { - return JSON.stringify(obj, " ", 4); -} +async function getJsonReports(xmlPaths, debugMode) { + const globber = await glob.create(xmlPaths.join('\n')) + const files = await globber.glob() + if (debugMode) core.info(`Resolved files: ${files}`) -async function getJsonReports(xmlPaths) { return Promise.all( - xmlPaths.map(async (xmlPath) => { - const reportXml = await fs.promises.readFile(xmlPath.trim(), "utf-8"); - return await parser.parseStringPromise(reportXml); + files.map(async (path) => { + const reportXml = await fs.promises.readFile(path.trim(), 'utf-8') + return await parser.parseStringPromise(reportXml) }) - ); + ) } async function getChangedFiles(base, head, client) { @@ -16720,53 +19176,60 @@ async function getChangedFiles(base, head, client) { head, owner: github.context.repo.owner, repo: github.context.repo.repo, - }); + }) - var changedFiles = []; + const changedFiles = [] response.data.files.forEach((file) => { - var changedFile = { + const changedFile = { filePath: file.filename, url: file.blob_url, - }; - changedFiles.push(changedFile); - }); - return changedFiles; + } + changedFiles.push(changedFile) + }) + return changedFiles } -async function addComment(prNumber, update, title, body, client) { - let commentUpdated = false; +async function addComment(prNumber, update, title, body, client, debugMode) { + let commentUpdated = false + if (debugMode) core.info(`update: ${update}`) + if (debugMode) core.info(`title: ${title}`) if (update && title) { const comments = await client.issues.listComments({ issue_number: prNumber, ...github.context.repo, - }); + }) const comment = comments.data.find((comment) => - comment.body.startsWith(title), - ); + comment.body.startsWith(title) + ) if (comment) { + if (debugMode) + core.info( + `Updating existing comment: id=${comment.id} \n body=${comment.body}` + ) await client.issues.updateComment({ comment_id: comment.id, - body: body, + body, ...github.context.repo, - }); - commentUpdated = true; + }) + commentUpdated = true } } if (!commentUpdated) { + if (debugMode) core.info('Creating a new comment') await client.issues.createComment({ issue_number: prNumber, - body: body, + body, ...github.context.repo, - }); + }) } } module.exports = { action, -}; +} /***/ }), @@ -16774,111 +19237,177 @@ module.exports = { /***/ 650: /***/ ((module) => { -function getFileCoverage(reports, files) { - const packages = reports.map((report) => report["package"]); - return getFileCoverageFromPackages([].concat(...packages), files); +const TAG_GROUP = 'group' +const TAG_PACKAGE = 'package' + +function getProjectCoverage(reports, files) { + const moduleCoverages = [] + const modules = getModulesFromReports(reports) + modules.forEach((module) => { + const filesCoverage = getFileCoverageFromPackages( + [].concat(...module.packages), + files + ) + if (filesCoverage.files.length !== 0) { + moduleCoverages.push({ + name: module.name, + percentage: getModuleCoverage(module.root), + files: filesCoverage.files, + }) + } + }) + moduleCoverages.sort((a, b) => b.percentage - a.percentage) + const totalFiles = moduleCoverages.flatMap((module) => { + return module.files + }) + const project = { + modules: moduleCoverages, + isMultiModule: reports.length > 1 || modules.length > 1, + } + const totalPercentage = getTotalPercentage(totalFiles) + if (totalPercentage) { + project['coverage-changed-files'] = totalPercentage + } else { + project['coverage-changed-files'] = 100 + } + return project +} + +function getModulesFromReports(reports) { + const modules = [] + reports.forEach((report) => { + const groupTag = report[TAG_GROUP] + if (groupTag) { + const groups = groupTag.filter((group) => group !== undefined) + groups.forEach((group) => { + const module = getModuleFromParent(group) + modules.push(module) + }) + } + const module = getModuleFromParent(report) + if (module) { + modules.push(module) + } + }) + return modules +} + +function getModuleFromParent(parent) { + const packageTag = parent[TAG_PACKAGE] + if (packageTag) { + const packages = packageTag.filter((pacage) => pacage !== undefined) + if (packages.length !== 0) { + return { + name: parent['$'].name, + packages, + root: parent, // TODO just pass array of 'counters' + } + } + } + return null } function getFileCoverageFromPackages(packages, files) { - const result = {}; - const resultFiles = []; + const result = {} + const resultFiles = [] packages.forEach((item) => { - const packageName = item["$"].name; - const sourceFiles = item.sourcefile; + const packageName = item['$'].name + const sourceFiles = item['sourcefile'] sourceFiles.forEach((sourceFile) => { - const sourceFileName = sourceFile["$"].name; - var file = files.find(function (f) { - return f.filePath.endsWith(`${packageName}/${sourceFileName}`); - }); + const sourceFileName = sourceFile['$'].name + const file = files.find(function (f) { + return f.filePath.endsWith(`${packageName}/${sourceFileName}`) + }) if (file != null) { - const fileName = sourceFile["$"].name; - const counters = sourceFile["counter"]; - if (counters != null && counters.length != 0) { - const coverage = getDetailedCoverage(counters, "INSTRUCTION"); - file["name"] = fileName; - file["missed"] = coverage.missed; - file["covered"] = coverage.covered; - file["percentage"] = coverage.percentage; - resultFiles.push(file); + const fileName = sourceFile['$'].name + const counters = sourceFile['counter'] + if (counters != null && counters.length !== 0) { + const coverage = getDetailedCoverage(counters, 'INSTRUCTION') + file['name'] = fileName + file['missed'] = coverage.missed + file['covered'] = coverage.covered + file['percentage'] = coverage.percentage + resultFiles.push(file) } } - }); - resultFiles.sort((a, b) => b.percentage - a.percentage); - }); - result.files = resultFiles; - if (resultFiles.length != 0) { - result.percentage = getTotalPercentage(resultFiles); + }) + resultFiles.sort((a, b) => b.percentage - a.percentage) + }) + result.files = resultFiles + if (resultFiles.length !== 0) { + result.percentage = getTotalPercentage(resultFiles) } else { - result.percentage = 100; + result.percentage = 100 } - return result; + return result } function getTotalPercentage(files) { - var missed = 0; - var covered = 0; - files.forEach((file) => { - missed += file.missed; - covered += file.covered; - }); - return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)); + let missed = 0 + let covered = 0 + if (files.length !== 0) { + files.forEach((file) => { + missed += file.missed + covered += file.covered + }) + return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)) + } else { + return null + } } function getOverallCoverage(reports) { - const coverage = {}; - const modules = []; + const coverage = {} + const modules = [] reports.forEach((report) => { - const moduleName = report["$"].name; - const moduleCoverage = getModuleCoverage(report); + const moduleName = report['$'].name + const moduleCoverage = getModuleCoverage(report) modules.push({ module: moduleName, coverage: moduleCoverage, - }); - }); - coverage.project = getProjectCoverage(reports); - coverage.modules = modules; - return coverage; + }) + }) + coverage.project = getOverallProjectCoverage(reports) + coverage.modules = modules + return coverage } function getModuleCoverage(report) { - const counters = report["counter"]; - const coverage = getDetailedCoverage(counters, "INSTRUCTION"); - return coverage.percentage; + const counters = report['counter'] + const coverage = getDetailedCoverage(counters, 'INSTRUCTION') + return coverage.percentage } -function getProjectCoverage(reports) { +function getOverallProjectCoverage(reports) { const coverages = reports.map((report) => - getDetailedCoverage(report["counter"], "INSTRUCTION") - ); - const covered = coverages.reduce( - (acc, coverage) => acc + coverage.covered, - 0 - ); - const missed = coverages.reduce((acc, coverage) => acc + coverage.missed, 0); - return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)); + getDetailedCoverage(report['counter'], 'INSTRUCTION') + ) + const covered = coverages.reduce((acc, coverage) => acc + coverage.covered, 0) + const missed = coverages.reduce((acc, coverage) => acc + coverage.missed, 0) + return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)) } function getDetailedCoverage(counters, type) { - const coverage = {}; + const coverage = {} counters.forEach((counter) => { - const attr = counter["$"]; - if (attr["type"] == type) { - const missed = parseFloat(attr["missed"]); - const covered = parseFloat(attr["covered"]); - coverage.missed = missed; - coverage.covered = covered; + const attr = counter['$'] + if (attr['type'] === type) { + const missed = parseFloat(attr['missed']) + const covered = parseFloat(attr['covered']) + coverage.missed = missed + coverage.covered = covered coverage.percentage = parseFloat( ((covered / (covered + missed)) * 100).toFixed(2) - ); + ) } - }); - return coverage; + }) + return coverage } module.exports = { - getFileCoverage, + getProjectCoverage, getOverallCoverage, -}; +} /***/ }), @@ -16888,83 +19417,132 @@ module.exports = { function getPRComment( overallCoverage, - filesCoverage, + project, minCoverageOverall, minCoverageChangedFiles, title ) { - const fileTable = getFileTable(filesCoverage, minCoverageChangedFiles); - const overallTable = getOverallTable(overallCoverage, minCoverageOverall); - const heading = getTitle(title); - return heading + fileTable + `\n\n` + overallTable; + const heading = getTitle(title) + const overallTable = getOverallTable(overallCoverage, minCoverageOverall) + const moduleTable = getModuleTable(project.modules, minCoverageChangedFiles) + const filesTable = getFileTable(project, minCoverageChangedFiles) + + const tables = + project.modules.length === 0 + ? '> There is no coverage information present for the Files changed' + : project.isMultiModule + ? moduleTable + '\n\n' + filesTable + : filesTable + + return heading + overallTable + '\n\n' + tables } -function getFileTable(filesCoverage, minCoverage) { - const files = filesCoverage.files; - if (files.length === 0) { - return `> There is no coverage information present for the Files changed`; - } - - const tableHeader = getHeader(filesCoverage.percentage); - const tableStructure = `|:-|:-:|:-:|`; - var table = tableHeader + `\n` + tableStructure; - files.forEach((file) => { - renderFileRow(`[${file.name}](${file.url})`, file.percentage); - }); - return table; +function getModuleTable(modules, minCoverage) { + const tableHeader = '|Module|Coverage||' + const tableStructure = '|:-|:-:|:-:|' + let table = tableHeader + '\n' + tableStructure + modules.forEach((module) => { + renderFileRow(module.name, module.percentage) + }) + return table function renderFileRow(name, coverage) { - addRow(getRow(name, coverage)); - } - - function getHeader(coverage) { - var status = getStatus(coverage, minCoverage); - return `|File|Coverage [${formatCoverage(coverage)}]|${status}|`; + addRow(getRow(name, coverage)) } function getRow(name, coverage) { - var status = getStatus(coverage, minCoverage); - return `|${name}|${formatCoverage(coverage)}|${status}|`; + const status = getStatus(coverage, minCoverage) + return `|${name}|${formatCoverage(coverage)}|${status}|` } function addRow(row) { - table = table + `\n` + row; + table = table + '\n' + row + } +} + +function getFileTable(project, minCoverage) { + const coverage = project['coverage-changed-files'] + const tableHeader = project.isMultiModule + ? `|Module|File|Coverage [${formatCoverage(coverage)}]||` + : `|File|Coverage [${formatCoverage(coverage)}]||` + const tableStructure = project.isMultiModule + ? '|:-|:-|:-:|:-:|' + : '|:-|:-:|:-:|' + let table = tableHeader + '\n' + tableStructure + project.modules.forEach((module) => { + module.files.forEach((file, index) => { + let moduleName = module.name + if (index !== 0) { + moduleName = '' + } + renderFileRow( + moduleName, + `[${file.name}](${file.url})`, + file.percentage, + project.isMultiModule + ) + }) + }) + return project.isMultiModule + ? '
\n' + 'Files\n\n' + table + '\n\n
' + : table + + function renderFileRow(moduleName, fileName, coverage, isMultiModule) { + const status = getStatus(coverage, minCoverage) + const row = isMultiModule + ? `|${moduleName}|${fileName}|${formatCoverage(coverage)}|${status}|` + : `|${fileName}|${formatCoverage(coverage)}|${status}|` + table = table + '\n' + row } } function getOverallTable(coverage, minCoverage) { - var status = getStatus(coverage, minCoverage); + const status = getStatus(coverage, minCoverage) const tableHeader = `|Total Project Coverage|${formatCoverage( coverage - )}|${status}|`; - const tableStructure = `|:-|:-:|:-:|`; - return tableHeader + `\n` + tableStructure; + )}|${status}|` + const tableStructure = '|:-|:-:|:-:|' + return tableHeader + '\n' + tableStructure } function getTitle(title) { if (title != null && title.length > 0) { - return "### " + title + `\n`; + return '### ' + title + '\n' } else { - return ""; + return '' } } function getStatus(coverage, minCoverage) { - var status = `:green_apple:`; + let status = ':green_apple:' if (coverage < minCoverage) { - status = `:x:`; + status = ':x:' } - return status; + return status } function formatCoverage(coverage) { - return `${parseFloat(coverage.toFixed(2))}%`; + return `${parseFloat(coverage.toFixed(2))}%` } module.exports = { getPRComment, getTitle, -}; +} + + +/***/ }), + +/***/ 4518: +/***/ ((module) => { + +function debug(obj) { + return JSON.stringify(obj, ' ', 4) +} + +module.exports = { + debug, +} /***/ }), @@ -17162,12 +19740,12 @@ module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"] var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. (() => { -const core = __nccwpck_require__(6024); -const action = __nccwpck_require__(8514); +const core = __nccwpck_require__(6024) +const action = __nccwpck_require__(8514) -action.action().catch(error => { - core.setFailed(error.message); -}); +action.action().catch((error) => { + core.setFailed(error.message) +}) })(); diff --git a/dist/licenses.txt b/dist/licenses.txt index b193498..10ba6be 100644 --- a/dist/licenses.txt +++ b/dist/licenses.txt @@ -13,6 +13,18 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI @actions/github MIT +@actions/glob +MIT +The MIT License (MIT) + +Copyright 2019 GitHub + +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. + @actions/http-client MIT Actions Http Client for Node.js @@ -220,6 +232,31 @@ The above copyright notice and this permission notice shall be included in all c 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. +balanced-match +MIT +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +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. + + before-after-hook Apache-2.0 Apache License @@ -425,6 +462,53 @@ Apache-2.0 limitations under the License. +brace-expansion +MIT +MIT License + +Copyright (c) 2013 Julian Gruber + +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. + + +concat-map +MIT +This software is released under the MIT license: + +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. + + deprecation ISC The ISC License @@ -469,6 +553,25 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +minimatch +ISC +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + node-fetch MIT The MIT License (MIT) @@ -559,6 +662,9 @@ License, as follows: WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +tr46 +MIT + tunnel MIT The MIT License (MIT) @@ -595,6 +701,60 @@ Permission to use, copy, modify, and/or distribute this software for any purpose THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +uuid +MIT +The MIT License (MIT) + +Copyright (c) 2010-2020 Robert Kieffer and other contributors + +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. + + +webidl-conversions +BSD-2-Clause +# The BSD 2-Clause License + +Copyright (c) 2014, Domenic Denicola +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +whatwg-url +MIT +The MIT License (MIT) + +Copyright (c) 2015–2016 Sebastian Mayr + +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. + + wrappy ISC The ISC License diff --git a/package-lock.json b/package-lock.json index f74952b..fffbe36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,16 +11,35 @@ "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^4.0.0", + "@actions/glob": "^0.4.0", "@types/jest": "^26.0.20", "xml2js": "^0.6.0", "xml2json": "^0.12.0" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.62.0", + "eslint": "^8.45.0", + "eslint-config-prettier": "^8.8.0", + "eslint-config-standard-with-typescript": "^37.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^16.0.1", + "eslint-plugin-promise": "^6.1.1", "jest": "^26.6.3", + "prettier": "^3.0.0", + "typescript": "^5.1.6", "webpack": "^5.74.0", "webpack-cli": "^4.10.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@actions/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", @@ -49,6 +68,15 @@ "@octokit/plugin-rest-endpoint-methods": "^4.0.0" } }, + "node_modules/@actions/glob": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.4.0.tgz", + "integrity": "sha512-+eKIGFhsFa4EBwaf/GMyzCdWrXWymGXfFmZU3FHQvYS8mPcHtTtZONbkcqqUMzw9mJ/pImEBFET1JNifhqGsAQ==", + "dependencies": { + "@actions/core": "^1.9.1", + "minimatch": "^3.0.4" + } + }, "node_modules/@actions/http-client": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.9.tgz", @@ -541,6 +569,157 @@ "node": ">=10.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.0.tgz", + "integrity": "sha512-uiPeRISaglZnaZk8vwrjQZ1CxogZeY/4IYft6gBOTqu1WhVXWmCmZMWxUv2Q/pxSvPdp1JPaO62kLOcOkMqWrw==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -850,6 +1029,41 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@octokit/auth-token": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", @@ -1092,6 +1306,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/node": { "version": "14.14.25", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", @@ -1109,6 +1329,12 @@ "integrity": "sha512-O3SQC6+6AySHwrspYn2UvC6tjo6jCTMMmylxZUFhE1CulVu5l3AxU6ca9lrJDTQDVllF62LIxVSx5fuYL6LiZg==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "node_modules/@types/stack-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", @@ -1128,113 +1354,414 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, @@ -1350,6 +1877,15 @@ "acorn-walk": "^7.1.1" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -1494,6 +2030,47 @@ "node": ">=0.10.0" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -1503,19 +2080,75 @@ "node": ">=0.10.0" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "node_modules/atob": { @@ -1530,6 +2163,18 @@ "node": ">= 4.5.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", @@ -1625,8 +2270,7 @@ "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "node_modules/base": { "version": "0.11.2", @@ -1713,7 +2357,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1780,6 +2423,30 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1800,6 +2467,19 @@ "node": ">=0.10.0" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2033,8 +2713,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/convert-source-map": { "version": "1.7.0", @@ -2164,6 +2843,22 @@ "node": ">=0.10.0" } }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -2246,6 +2941,30 @@ "node": ">= 10.14.2" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -2334,12 +3053,105 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-module-lexer": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2389,3525 +3201,3538 @@ "node": ">=4.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "eslint-config-prettier": "bin/cli.js" }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "engines": { - "node": ">=4" + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint-config-standard-with-typescript": { + "version": "37.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-37.0.0.tgz", + "integrity": "sha512-V8I/Q1eFf9tiOuFHkbksUdWO3p1crFmewecfBtRxXdnvb71BCJx+1xAknlIRZMwZioMX3/bPtMVCZsf1+AjjOw==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "@typescript-eslint/parser": "^5.52.0", + "eslint-config-standard": "17.1.0" }, - "engines": { - "node": ">=4.0" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.52.0", + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0", + "typescript": "*" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">=0.8.x" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/eslint-plugin-es-x": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", + "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", "dev": true, "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0" }, "engines": { - "node": ">=6" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/eslint-plugin-n": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", + "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.1.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 10.14.2" + "node": ">=8.0.0" } }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/extend-shallow/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "ms": "2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">= 4.9.1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { - "bser": "2.1.1" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "map-cache": "^0.2.2" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.8.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "node_modules/espree/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, "engines": { - "node": ">=4" + "node": ">=0.10" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "optional": true + "engines": { + "node": ">=4.0" + } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4.0" + "node": ">=4.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.x" } }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "ms": "2.0.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">=8.12.0" + "node": ">=0.10.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/import-local": { + "node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { - "node": ">=0.8.19" + "node": ">=0.10.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/extend-shallow/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/inherits": { + "node_modules/extglob": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "is-descriptor": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { - "ci-info": "^2.0.0" + "kind-of": "^6.0.0" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "dependencies": { - "has": "^1.0.3" + "kind-of": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6.0" } }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4.9.1" } }, - "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "bser": "2.1.1" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "is-callable": "^1.1.3" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-windows": { + "node_modules/for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, - "optional": true, "dependencies": { - "is-docker": "^2.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "dependencies": { - "punycode": "2.x.x" + "map-cache": "^0.2.2" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, "engines": { - "node": ">= 10.14.2" + "node": ">=8.0.0" } }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=6" } }, - "node_modules/jest-changed-files/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-changed-files/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-changed-files/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4.0" } }, - "node_modules/jest-changed-files/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, - "node_modules/jest-changed-files/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.4" }, - "peerDependencies": { - "ts-node": ">=9.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "node_modules/hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" + "whatwg-encoding": "^1.0.5" }, "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" + "node": ">=10" } }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 10.14.2" + "node": ">= 6" } }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 10.14.2" + "node": ">= 6" } }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, "engines": { - "node": ">= 10.14.2" + "node": ">=8.12.0" } }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, "engines": { - "node": ">= 10.14.2" + "node": ">= 4" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { "node": ">=6" }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { - "node": ">= 10.14.2" + "node": ">=4" } }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">= 10.14.2" + "node": ">=8" } }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.8.19" } }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.4" } }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">= 10.14.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" + "ci-info": "^2.0.0" }, - "engines": { - "node": ">= 10.14.2" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "has": "^1.0.3" }, - "engines": { - "node": ">= 10.13.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest/node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/joi/node_modules/hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "engines": { - "node": ">=8.9.0" + "node": ">=0.10.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "has-tostringtag": "^1.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "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.0", - "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" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", "dev": true, - "dependencies": { - "punycode": "^2.1.1" + "optional": true, + "bin": { + "is-docker": "cli.js" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "bin": { - "json5": "lib/cli.js" - }, "engines": { "node": ">=6" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.12.0" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "engines": { - "node": ">=6.11.5" + "node": ">=8" } }, - "node_modules/locate-path": { + "node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "tmpl": "1.0.x" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "optional": true, "dependencies": { - "object-visit": "^1.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, + "node_modules/isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "punycode": "2.x.x" }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, - "node_modules/mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, - "dependencies": { - "mime-db": "1.45.0" - }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/mixin-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-expat": { - "version": "2.3.18", - "resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz", - "integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.13.2" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "node_modules/jest-changed-files/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "optional": true, "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/jest-changed-files/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, - "optional": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "optional": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "pump": "^3.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "path-key": "^2.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/jest-changed-files/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/jest-changed-files/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/jest-changed-files/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/jest-changed-files/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "isobject": "^3.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">=6" + "node": ">= 10.14.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "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" + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 10.14.2" } }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "detect-newline": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "node_modules/jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, "engines": { - "node": ">=4" + "node": ">= 10.14.2" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.14.2" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "engines": { - "node": ">=6" + "node": ">= 10.14.2" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "^2.1.2" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", "dev": true, + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "dependencies": { - "node-modules-regexp": "^1.0.0" + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 10.14.2" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "@jest/types": "^26.6.2", + "@types/node": "*" }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">= 10.14.2" } }, - "node_modules/pretty-format": { + "node_modules/jest-resolve": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, "dependencies": { "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">= 10.14.2" } }, - "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", "dev": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" }, "engines": { - "node": ">= 6" + "node": ">= 10.14.2" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, "engines": { - "node": ">=6" + "node": ">= 10.14.2" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", "dev": true, "dependencies": { - "safe-buffer": "^5.1.0" + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "@types/node": "*", + "graceful-fs": "^4.2.4" }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", "dev": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.14.2" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "dependencies": { - "resolve": "^1.9.0" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.14.2" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, "engines": { - "node": ">=0.10" + "node": ">= 10.14.2" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "node_modules/jest/node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", "dev": true, "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, + "node_modules/joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", "dependencies": { - "resolve-from": "^5.0.0" + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" }, "engines": { - "node": ">=8" + "node": ">=8.9.0" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, + "node_modules/joi/node_modules/hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", "engines": { - "node": ">=8" + "node": ">=8.9.0" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "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.0", + "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" + }, "engines": { - "node": "6.* || >= 7.*" + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "node_modules/jsdom/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, "bin": { - "sane": "src/cli.js" + "acorn": "bin/acorn" }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=0.4.0" } }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6.11.5" } }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "xmlchars": "^2.2.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "semver": "^6.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "tmpl": "1.0.x" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "object-visit": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "mime-db": "1.45.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "is-descriptor": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-plain-object": "^2.0.4" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/mixin-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "kind-of": "^3.2.0" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-expat": { + "version": "2.3.18", + "resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz", + "integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==", + "hasInstallScript": true, "dependencies": { - "ms": "2.0.0" + "bindings": "^1.5.0", + "nan": "^2.13.2" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { - "is-descriptor": "^0.1.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "node_modules/node-notifier": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", "dev": true, + "optional": true, "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/node-notifier/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "optional": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "optional": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" + "path-key": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "dependencies": { + "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "kind-of": "^3.0.3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/static-extend/node_modules/define-property": { + "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", @@ -5919,895 +6744,2520 @@ "node": ">=0.10.0" } }, - "node_modules/string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" + "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" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">=4" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "callsites": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, "engines": { - "node": ">=8.0" - } - }, - "node_modules/topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dependencies": { - "hoek": "6.x.x" + "node": ">=8" } }, - "node_modules/topo/node_modules/hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues." - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "is-typedarray": "^1.0.0" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">= 0.8.0" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "node_modules/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "node_modules/prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", "dev": true, "dependencies": { - "isarray": "1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } + ] }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true + "node_modules/react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=8" } }, - "node_modules/v8-to-istanbul": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", - "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=10.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/w3c-hr-time": { + "node_modules/regex-not": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "dependencies": { - "browser-process-hrtime": "^1.0.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true, - "dependencies": { - "makeerror": "1.0.x" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, "engines": { - "node": ">=10.13.0" + "node": ">=0.10" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { - "node": ">=10.4" + "node": ">=0.10.0" } }, - "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" + "resolve": "bin/resolve" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } + "node": ">=8" } }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/webpack-cli/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">=0.12" } }, - "node_modules/webpack-cli/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/webpack-cli/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/webpack-cli/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true, "engines": { - "node": ">=8" + "node": "6.* || >= 7.*" } }, - "node_modules/webpack-cli/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "queue-microtask": "^1.2.2" } }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dev": true, "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">=10.0.0" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, - "peerDependencies": { - "acorn": "^8" + "dependencies": { + "ret": "~0.1.10" } }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, "dependencies": { - "iconv-lite": "0.4.24" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" }, "engines": { - "node": ">=10" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/wrap-ansi": { + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dependencies": { + "hoek": "6.x.x" + } + }, + "node_modules/topo/node_modules/hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues." + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "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" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", + "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-cli/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webpack-cli/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-cli/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-cli/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-cli/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", @@ -6950,9 +9400,27 @@ "engines": { "node": ">=6" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@actions/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", @@ -6983,6 +9451,15 @@ "@octokit/plugin-rest-endpoint-methods": "^4.0.0" } }, + "@actions/glob": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.4.0.tgz", + "integrity": "sha512-+eKIGFhsFa4EBwaf/GMyzCdWrXWymGXfFmZU3FHQvYS8mPcHtTtZONbkcqqUMzw9mJ/pImEBFET1JNifhqGsAQ==", + "requires": { + "@actions/core": "^1.9.1", + "minimatch": "^3.0.4" + } + }, "@actions/http-client": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.9.tgz", @@ -7405,6 +9882,108 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.0.tgz", + "integrity": "sha512-uiPeRISaglZnaZk8vwrjQZ1CxogZeY/4IYft6gBOTqu1WhVXWmCmZMWxUv2Q/pxSvPdp1JPaO62kLOcOkMqWrw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -7664,6 +10243,32 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@octokit/auth-token": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", @@ -7897,6 +10502,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "@types/node": { "version": "14.14.25", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", @@ -7914,6 +10525,12 @@ "integrity": "sha512-O3SQC6+6AySHwrspYn2UvC6tjo6jCTMMmylxZUFhE1CulVu5l3AxU6ca9lrJDTQDVllF62LIxVSx5fuYL6LiZg==", "dev": true }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "@types/stack-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", @@ -7933,6 +10550,178 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, + "@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, "@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -8136,6 +10925,13 @@ "acorn-walk": "^7.1.1" } }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -8237,11 +11033,78 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } }, "assign-symbols": { "version": "1.0.0", @@ -8261,6 +11124,12 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "babel-jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", @@ -8335,8 +11204,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -8410,7 +11278,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8458,6 +11325,26 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -8475,6 +11362,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8656,8 +11553,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "convert-source-map": { "version": "1.7.0", @@ -8665,272 +11561,762 @@ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "is-arrayish": "^0.2.1" } }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + } + }, + "es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "has": "^1.0.3" } }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "ms": "2.1.2" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "eslint": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "ms": "2.1.2" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" } } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + "eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "requires": {} }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true + "eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "requires": {} }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" + "eslint-config-standard-with-typescript": { + "version": "37.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-37.0.0.tgz", + "integrity": "sha512-V8I/Q1eFf9tiOuFHkbksUdWO3p1crFmewecfBtRxXdnvb71BCJx+1xAknlIRZMwZioMX3/bPtMVCZsf1+AjjOw==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "^5.52.0", + "eslint-config-standard": "17.1.0" + } }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { - "webidl-conversions": "^5.0.0" + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" }, "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } } } }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "requires": { - "once": "^1.4.0" + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "eslint-plugin-es-x": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", + "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", "dev": true, "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0" } }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, - "es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "eslint-plugin-n": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", + "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", "dev": true, "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.1.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, + "eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "requires": {} + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -8941,12 +12327,54 @@ "estraverse": "^4.1.1" } }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "dependencies": { + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -9174,6 +12602,30 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -9192,6 +12644,15 @@ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -9201,6 +12662,15 @@ "bser": "2.1.1" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -9225,6 +12695,31 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -9270,6 +12765,24 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -9282,6 +12795,18 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -9297,6 +12822,16 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -9317,6 +12852,15 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -9329,12 +12873,50 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -9348,14 +12930,50 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -9470,6 +13088,30 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "import-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", @@ -9502,6 +13144,17 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -9528,18 +13181,54 @@ } } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -9550,9 +13239,9 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "requires": { "has": "^1.0.3" @@ -9578,6 +13267,15 @@ } } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -9610,6 +13308,12 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -9622,12 +13326,42 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -9639,18 +13373,73 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -10394,6 +14183,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -10455,6 +14250,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -10517,14 +14318,20 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime-db": { @@ -10552,7 +14359,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -10629,6 +14435,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -10798,6 +14610,18 @@ } } }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -10807,6 +14631,18 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -10816,6 +14652,17 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10883,6 +14730,15 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -10931,6 +14787,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10938,9 +14800,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pirates": { @@ -10973,6 +14835,12 @@ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, + "prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", + "dev": true + }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -11021,6 +14889,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -11085,6 +14959,17 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -11122,13 +15007,14 @@ "dev": true }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -11158,6 +15044,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -11173,6 +15065,35 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -11188,6 +15109,17 @@ "ret": "~0.1.10" } }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -11444,6 +15376,17 @@ "dev": true, "optional": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -11731,13 +15674,46 @@ "strip-ansi": "^6.0.0" } }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -11758,6 +15734,12 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11776,6 +15758,12 @@ "supports-color": "^7.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -11864,6 +15852,12 @@ "minimatch": "^3.0.4" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", @@ -11959,6 +15953,50 @@ "punycode": "^2.1.1" } }, + "tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -11985,6 +16023,53 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -11994,6 +16079,24 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -12342,12 +16445,38 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -12471,6 +16600,12 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 09fda2b..5599bca 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,11 @@ "main": "index.js", "scripts": { "test": "jest --coverage", - "build": "webpack --config webpack.config.js" + "build": "ncc build src/index.js --license licenses.txt", + "lint:eslint": "eslint '**/*.{js,ts}' --max-warnings=0", + "lint:prettier": "prettier --check '**/*.{js,md,json,yml}'", + "lint": "npm run lint:prettier && npm run lint:eslint", + "lint:fix": "npm run lint:prettier -- --write && npm run lint:eslint -- --fix" }, "repository": { "type": "git", @@ -21,12 +25,22 @@ "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^4.0.0", + "@actions/glob": "^0.4.0", "@types/jest": "^26.0.20", "xml2js": "^0.6.0", "xml2json": "^0.12.0" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.62.0", + "eslint": "^8.45.0", + "eslint-config-prettier": "^8.8.0", + "eslint-config-standard-with-typescript": "^37.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^16.0.1", + "eslint-plugin-promise": "^6.1.1", "jest": "^26.6.3", + "prettier": "^3.0.0", + "typescript": "^5.1.6", "webpack": "^5.74.0", "webpack-cli": "^4.10.0" } diff --git a/preview/multi-module-screenshot.png b/preview/multi-module-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..167dc9a66d330860c0ab2376c420aaf460dc57d1 GIT binary patch literal 178982 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 literal 0 HcmV?d00001 diff --git a/preview/screenshot.png b/preview/screenshot.png deleted file mode 100644 index 80c9bc26fd454e9cc7bf26a1085091015cebfd22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76786 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 TeA~|IFaUw4tDnm{r-UW|6oEV0 diff --git a/preview/single-module-screenshot.png b/preview/single-module-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa15da42b867404fd5ba568e49616fed3f7a82b GIT binary patch literal 82165 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ⅅ-9ubht(^AJMZ<#lgh7vH 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 literal 0 HcmV?d00001 diff --git a/src/action.js b/src/action.js index 250e9cc..162ea1d 100644 --- a/src/action.js +++ b/src/action.js @@ -1,85 +1,99 @@ -const core = require("@actions/core"); -const github = require("@actions/github"); -const fs = require("fs"); -const parser = require("xml2js"); -const {parseBooleans} = require("xml2js/lib/processors"); -const process = require("./process"); -const render = require("./render"); +const core = require('@actions/core') +const github = require('@actions/github') +const fs = require('fs') +const parser = require('xml2js') +const { parseBooleans } = require('xml2js/lib/processors') +const process = require('./process') +const render = require('./render') +const { debug } = require('./util') +const glob = require('@actions/glob') async function action() { try { - const pathsString = core.getInput("paths"); - const reportPaths = pathsString.split(","); - const minCoverageOverall = parseFloat( - core.getInput("min-coverage-overall") - ); + const token = core.getInput('token') + if (!token) { + core.setFailed("'token' is missing") + return + } + const pathsString = core.getInput('paths') + if (!pathsString) { + core.setFailed("'paths' is missing") + return + } + + const reportPaths = pathsString.split(',') + const minCoverageOverall = parseFloat(core.getInput('min-coverage-overall')) const minCoverageChangedFiles = parseFloat( - core.getInput("min-coverage-changed-files") - ); - const title = core.getInput("title"); - const updateComment = parseBooleans(core.getInput("update-comment")); - const debugMode = parseBooleans(core.getInput("debug-mode")); - const skipIfNoChanges = parseBooleans(core.getInput("skip-if-no-changes")); - - const event = github.context.eventName; - core.info(`Event is ${event}`); - - var base; - var head; - var prNumber; + core.getInput('min-coverage-changed-files') + ) + const title = core.getInput('title') + const updateComment = parseBooleans(core.getInput('update-comment')) + if (updateComment) { + if (!title) { + core.info( + "'title' is not set. 'update-comment' does not work without 'title'" + ) + } + } + const debugMode = parseBooleans(core.getInput('debug-mode')) + const skipIfNoChanges = parseBooleans(core.getInput('skip-if-no-changes')) + + const event = github.context.eventName + core.info(`Event is ${event}`) + + let base + let head + let prNumber switch (event) { - case "pull_request": - case "pull_request_target": - base = github.context.payload.pull_request.base.sha; - head = github.context.payload.pull_request.head.sha; - prNumber = github.context.payload.pull_request.number; - break; - case "push": - base = github.context.payload.before; - head = github.context.payload.after; - isPR = false; - break; + case 'pull_request': + case 'pull_request_target': + base = github.context.payload.pull_request.base.sha + head = github.context.payload.pull_request.head.sha + prNumber = github.context.payload.pull_request.number + break + case 'push': + base = github.context.payload.before + head = github.context.payload.after + break default: - throw `Only pull requests and pushes are supported, ${github.context.eventName} not supported.`; + core.setFailed( + `Only pull requests and pushes are supported, ${github.context.eventName} not supported.` + ) + return } - core.info(`base sha: ${base}`); - core.info(`head sha: ${head}`); + core.info(`base sha: ${base}`) + core.info(`head sha: ${head}`) - const client = github.getOctokit(core.getInput("token")); + const client = github.getOctokit(token) - if (debugMode) core.info(`reportPaths: ${reportPaths}`); - const reportsJsonAsync = getJsonReports(reportPaths); - const changedFiles = await getChangedFiles(base, head, client); - if (debugMode) core.info(`changedFiles: ${debug(changedFiles)}`); + if (debugMode) core.info(`reportPaths: ${reportPaths}`) + const reportsJsonAsync = getJsonReports(reportPaths, debugMode) + const changedFiles = await getChangedFiles(base, head, client) + if (debugMode) core.info(`changedFiles: ${debug(changedFiles)}`) - const reportsJson = await reportsJsonAsync; - if (debugMode) core.info(`report value: ${debug(reportsJson)}`); - const reports = reportsJson.map((report) => report["report"]); + const reportsJson = await reportsJsonAsync + if (debugMode) core.info(`report value: ${debug(reportsJson)}`) + const reports = reportsJson.map((report) => report['report']) - const overallCoverage = process.getOverallCoverage(reports); - if (debugMode) core.info(`overallCoverage: ${debug(overallCoverage)}`); + // TODO Replace this with the getProjectCoverage itself + const overallCoverage = process.getOverallCoverage(reports) + if (debugMode) core.info(`overallCoverage: ${debug(overallCoverage)}`) core.setOutput( - "coverage-overall", + 'coverage-overall', parseFloat(overallCoverage.project.toFixed(2)) - ); - - let filesCoverage - let groups = reports.map(report => report["group"]).filter(report => report !== undefined); - if (groups.length !== 0) { - groups.forEach((group) => { - filesCoverage = process.getFileCoverage(group, changedFiles); - }); - } else { - filesCoverage = process.getFileCoverage(reports, changedFiles); - } - if (debugMode) core.info(`filesCoverage: ${debug(filesCoverage)}`); + ) + + const project = process.getProjectCoverage(reports, changedFiles) + if (debugMode) core.info(`project: ${debug(project)}`) core.setOutput( - "coverage-changed-files", - parseFloat(filesCoverage.percentage.toFixed(2)) - ); + 'coverage-changed-files', + parseFloat(project['coverage-changed-files'].toFixed(2)) + ) - const skip = skipIfNoChanges && filesCoverage.files.length === 0; + const skip = skipIfNoChanges && project.modules.length === 0 + if (debugMode) core.info(`skip: ${skip}`) + if (debugMode) core.info(`prNumber: ${prNumber}`) if (prNumber != null && !skip) { await addComment( prNumber, @@ -87,30 +101,31 @@ async function action() { render.getTitle(title), render.getPRComment( overallCoverage.project, - filesCoverage, + project, minCoverageOverall, minCoverageChangedFiles, title ), - client - ); + client, + debugMode + ) } } catch (error) { - core.setFailed(error); + core.setFailed(error) } } -function debug(obj) { - return JSON.stringify(obj, " ", 4); -} +async function getJsonReports(xmlPaths, debugMode) { + const globber = await glob.create(xmlPaths.join('\n')) + const files = await globber.glob() + if (debugMode) core.info(`Resolved files: ${files}`) -async function getJsonReports(xmlPaths) { return Promise.all( - xmlPaths.map(async (xmlPath) => { - const reportXml = await fs.promises.readFile(xmlPath.trim(), "utf-8"); - return await parser.parseStringPromise(reportXml); + files.map(async (path) => { + const reportXml = await fs.promises.readFile(path.trim(), 'utf-8') + return await parser.parseStringPromise(reportXml) }) - ); + ) } async function getChangedFiles(base, head, client) { @@ -119,50 +134,57 @@ async function getChangedFiles(base, head, client) { head, owner: github.context.repo.owner, repo: github.context.repo.repo, - }); + }) - var changedFiles = []; + const changedFiles = [] response.data.files.forEach((file) => { - var changedFile = { + const changedFile = { filePath: file.filename, url: file.blob_url, - }; - changedFiles.push(changedFile); - }); - return changedFiles; + } + changedFiles.push(changedFile) + }) + return changedFiles } -async function addComment(prNumber, update, title, body, client) { - let commentUpdated = false; +async function addComment(prNumber, update, title, body, client, debugMode) { + let commentUpdated = false + if (debugMode) core.info(`update: ${update}`) + if (debugMode) core.info(`title: ${title}`) if (update && title) { const comments = await client.issues.listComments({ issue_number: prNumber, ...github.context.repo, - }); + }) const comment = comments.data.find((comment) => - comment.body.startsWith(title), - ); + comment.body.startsWith(title) + ) if (comment) { + if (debugMode) + core.info( + `Updating existing comment: id=${comment.id} \n body=${comment.body}` + ) await client.issues.updateComment({ comment_id: comment.id, - body: body, + body, ...github.context.repo, - }); - commentUpdated = true; + }) + commentUpdated = true } } if (!commentUpdated) { + if (debugMode) core.info('Creating a new comment') await client.issues.createComment({ issue_number: prNumber, - body: body, + body, ...github.context.repo, - }); + }) } } module.exports = { action, -}; +} diff --git a/src/index.js b/src/index.js index 464e20d..6244089 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ -const core = require('@actions/core'); -const action = require('./action'); +const core = require('@actions/core') +const action = require('./action') -action.action().catch(error => { - core.setFailed(error.message); -}); +action.action().catch((error) => { + core.setFailed(error.message) +}) diff --git a/src/process.js b/src/process.js index d4f1b86..a9af4d6 100644 --- a/src/process.js +++ b/src/process.js @@ -1,105 +1,171 @@ -function getFileCoverage(reports, files) { - const packages = reports.map((report) => report["package"]); - return getFileCoverageFromPackages([].concat(...packages), files); +const TAG_GROUP = 'group' +const TAG_PACKAGE = 'package' + +function getProjectCoverage(reports, files) { + const moduleCoverages = [] + const modules = getModulesFromReports(reports) + modules.forEach((module) => { + const filesCoverage = getFileCoverageFromPackages( + [].concat(...module.packages), + files + ) + if (filesCoverage.files.length !== 0) { + moduleCoverages.push({ + name: module.name, + percentage: getModuleCoverage(module.root), + files: filesCoverage.files, + }) + } + }) + moduleCoverages.sort((a, b) => b.percentage - a.percentage) + const totalFiles = moduleCoverages.flatMap((module) => { + return module.files + }) + const project = { + modules: moduleCoverages, + isMultiModule: reports.length > 1 || modules.length > 1, + } + const totalPercentage = getTotalPercentage(totalFiles) + if (totalPercentage) { + project['coverage-changed-files'] = totalPercentage + } else { + project['coverage-changed-files'] = 100 + } + return project +} + +function getModulesFromReports(reports) { + const modules = [] + reports.forEach((report) => { + const groupTag = report[TAG_GROUP] + if (groupTag) { + const groups = groupTag.filter((group) => group !== undefined) + groups.forEach((group) => { + const module = getModuleFromParent(group) + modules.push(module) + }) + } + const module = getModuleFromParent(report) + if (module) { + modules.push(module) + } + }) + return modules +} + +function getModuleFromParent(parent) { + const packageTag = parent[TAG_PACKAGE] + if (packageTag) { + const packages = packageTag.filter((pacage) => pacage !== undefined) + if (packages.length !== 0) { + return { + name: parent['$'].name, + packages, + root: parent, // TODO just pass array of 'counters' + } + } + } + return null } function getFileCoverageFromPackages(packages, files) { - const result = {}; - const resultFiles = []; + const result = {} + const resultFiles = [] packages.forEach((item) => { - const packageName = item["$"].name; - const sourceFiles = item.sourcefile; + const packageName = item['$'].name + const sourceFiles = item['sourcefile'] sourceFiles.forEach((sourceFile) => { - const sourceFileName = sourceFile["$"].name; - var file = files.find(function (f) { - return f.filePath.endsWith(`${packageName}/${sourceFileName}`); - }); + const sourceFileName = sourceFile['$'].name + const file = files.find(function (f) { + return f.filePath.endsWith(`${packageName}/${sourceFileName}`) + }) if (file != null) { - const fileName = sourceFile["$"].name; - const counters = sourceFile["counter"]; - if (counters != null && counters.length != 0) { - const coverage = getDetailedCoverage(counters, "INSTRUCTION"); - file["name"] = fileName; - file["missed"] = coverage.missed; - file["covered"] = coverage.covered; - file["percentage"] = coverage.percentage; - resultFiles.push(file); + const fileName = sourceFile['$'].name + const counters = sourceFile['counter'] + if (counters != null && counters.length !== 0) { + const coverage = getDetailedCoverage(counters, 'INSTRUCTION') + file['name'] = fileName + file['missed'] = coverage.missed + file['covered'] = coverage.covered + file['percentage'] = coverage.percentage + resultFiles.push(file) } } - }); - resultFiles.sort((a, b) => b.percentage - a.percentage); - }); - result.files = resultFiles; - if (resultFiles.length != 0) { - result.percentage = getTotalPercentage(resultFiles); + }) + resultFiles.sort((a, b) => b.percentage - a.percentage) + }) + result.files = resultFiles + if (resultFiles.length !== 0) { + result.percentage = getTotalPercentage(resultFiles) } else { - result.percentage = 100; + result.percentage = 100 } - return result; + return result } function getTotalPercentage(files) { - var missed = 0; - var covered = 0; - files.forEach((file) => { - missed += file.missed; - covered += file.covered; - }); - return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)); + let missed = 0 + let covered = 0 + if (files.length !== 0) { + files.forEach((file) => { + missed += file.missed + covered += file.covered + }) + return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)) + } else { + return null + } } function getOverallCoverage(reports) { - const coverage = {}; - const modules = []; + const coverage = {} + const modules = [] reports.forEach((report) => { - const moduleName = report["$"].name; - const moduleCoverage = getModuleCoverage(report); + const moduleName = report['$'].name + const moduleCoverage = getModuleCoverage(report) modules.push({ module: moduleName, coverage: moduleCoverage, - }); - }); - coverage.project = getProjectCoverage(reports); - coverage.modules = modules; - return coverage; + }) + }) + coverage.project = getOverallProjectCoverage(reports) + coverage.modules = modules + return coverage } function getModuleCoverage(report) { - const counters = report["counter"]; - const coverage = getDetailedCoverage(counters, "INSTRUCTION"); - return coverage.percentage; + const counters = report['counter'] + const coverage = getDetailedCoverage(counters, 'INSTRUCTION') + return coverage.percentage } -function getProjectCoverage(reports) { +function getOverallProjectCoverage(reports) { const coverages = reports.map((report) => - getDetailedCoverage(report["counter"], "INSTRUCTION") - ); - const covered = coverages.reduce( - (acc, coverage) => acc + coverage.covered, - 0 - ); - const missed = coverages.reduce((acc, coverage) => acc + coverage.missed, 0); - return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)); + getDetailedCoverage(report['counter'], 'INSTRUCTION') + ) + const covered = coverages.reduce((acc, coverage) => acc + coverage.covered, 0) + const missed = coverages.reduce((acc, coverage) => acc + coverage.missed, 0) + return parseFloat(((covered / (covered + missed)) * 100).toFixed(2)) } function getDetailedCoverage(counters, type) { - const coverage = {}; + const coverage = {} counters.forEach((counter) => { - const attr = counter["$"]; - if (attr["type"] == type) { - const missed = parseFloat(attr["missed"]); - const covered = parseFloat(attr["covered"]); - coverage.missed = missed; - coverage.covered = covered; + const attr = counter['$'] + if (attr['type'] === type) { + const missed = parseFloat(attr['missed']) + const covered = parseFloat(attr['covered']) + coverage.missed = missed + coverage.covered = covered coverage.percentage = parseFloat( ((covered / (covered + missed)) * 100).toFixed(2) - ); + ) } - }); - return coverage; + }) + return coverage } module.exports = { - getFileCoverage, + getProjectCoverage, getOverallCoverage, -}; +} diff --git a/src/render.js b/src/render.js index af7c021..4e80ec8 100644 --- a/src/render.js +++ b/src/render.js @@ -1,79 +1,114 @@ function getPRComment( overallCoverage, - filesCoverage, + project, minCoverageOverall, minCoverageChangedFiles, title ) { - const fileTable = getFileTable(filesCoverage, minCoverageChangedFiles); - const overallTable = getOverallTable(overallCoverage, minCoverageOverall); - const heading = getTitle(title); - return heading + fileTable + `\n\n` + overallTable; -} + const heading = getTitle(title) + const overallTable = getOverallTable(overallCoverage, minCoverageOverall) + const moduleTable = getModuleTable(project.modules, minCoverageChangedFiles) + const filesTable = getFileTable(project, minCoverageChangedFiles) -function getFileTable(filesCoverage, minCoverage) { - const files = filesCoverage.files; - if (files.length === 0) { - return `> There is no coverage information present for the Files changed`; - } + const tables = + project.modules.length === 0 + ? '> There is no coverage information present for the Files changed' + : project.isMultiModule + ? moduleTable + '\n\n' + filesTable + : filesTable + + return heading + overallTable + '\n\n' + tables +} - const tableHeader = getHeader(filesCoverage.percentage); - const tableStructure = `|:-|:-:|:-:|`; - var table = tableHeader + `\n` + tableStructure; - files.forEach((file) => { - renderFileRow(`[${file.name}](${file.url})`, file.percentage); - }); - return table; +function getModuleTable(modules, minCoverage) { + const tableHeader = '|Module|Coverage||' + const tableStructure = '|:-|:-:|:-:|' + let table = tableHeader + '\n' + tableStructure + modules.forEach((module) => { + renderFileRow(module.name, module.percentage) + }) + return table function renderFileRow(name, coverage) { - addRow(getRow(name, coverage)); - } - - function getHeader(coverage) { - var status = getStatus(coverage, minCoverage); - return `|File|Coverage [${formatCoverage(coverage)}]|${status}|`; + addRow(getRow(name, coverage)) } function getRow(name, coverage) { - var status = getStatus(coverage, minCoverage); - return `|${name}|${formatCoverage(coverage)}|${status}|`; + const status = getStatus(coverage, minCoverage) + return `|${name}|${formatCoverage(coverage)}|${status}|` } function addRow(row) { - table = table + `\n` + row; + table = table + '\n' + row + } +} + +function getFileTable(project, minCoverage) { + const coverage = project['coverage-changed-files'] + const tableHeader = project.isMultiModule + ? `|Module|File|Coverage [${formatCoverage(coverage)}]||` + : `|File|Coverage [${formatCoverage(coverage)}]||` + const tableStructure = project.isMultiModule + ? '|:-|:-|:-:|:-:|' + : '|:-|:-:|:-:|' + let table = tableHeader + '\n' + tableStructure + project.modules.forEach((module) => { + module.files.forEach((file, index) => { + let moduleName = module.name + if (index !== 0) { + moduleName = '' + } + renderFileRow( + moduleName, + `[${file.name}](${file.url})`, + file.percentage, + project.isMultiModule + ) + }) + }) + return project.isMultiModule + ? '

\n' + 'Files\n\n' + table + '\n\n
' + : table + + function renderFileRow(moduleName, fileName, coverage, isMultiModule) { + const status = getStatus(coverage, minCoverage) + const row = isMultiModule + ? `|${moduleName}|${fileName}|${formatCoverage(coverage)}|${status}|` + : `|${fileName}|${formatCoverage(coverage)}|${status}|` + table = table + '\n' + row } } function getOverallTable(coverage, minCoverage) { - var status = getStatus(coverage, minCoverage); + const status = getStatus(coverage, minCoverage) const tableHeader = `|Total Project Coverage|${formatCoverage( coverage - )}|${status}|`; - const tableStructure = `|:-|:-:|:-:|`; - return tableHeader + `\n` + tableStructure; + )}|${status}|` + const tableStructure = '|:-|:-:|:-:|' + return tableHeader + '\n' + tableStructure } function getTitle(title) { if (title != null && title.length > 0) { - return "### " + title + `\n`; + return '### ' + title + '\n' } else { - return ""; + return '' } } function getStatus(coverage, minCoverage) { - var status = `:green_apple:`; + let status = ':green_apple:' if (coverage < minCoverage) { - status = `:x:`; + status = ':x:' } - return status; + return status } function formatCoverage(coverage) { - return `${parseFloat(coverage.toFixed(2))}%`; + return `${parseFloat(coverage.toFixed(2))}%` } module.exports = { getPRComment, getTitle, -}; +} diff --git a/src/util.js b/src/util.js new file mode 100644 index 0000000..d9252f2 --- /dev/null +++ b/src/util.js @@ -0,0 +1,7 @@ +function debug(obj) { + return JSON.stringify(obj, ' ', 4) +} + +module.exports = { + debug, +} diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index bea80cd..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -const path = require('path'); - -module.exports = { - entry: './src/index.js', - target: 'node', - mode: 'development', - optimization: { - minimize: false - }, - output: { - path: path.resolve(__dirname, 'dist'), - filename: 'index.js', - }, -}; -