diff --git a/.github/workflows/permissions.yml b/.github/workflows/permissions.yml new file mode 100644 index 000000000..3a2e4af42 --- /dev/null +++ b/.github/workflows/permissions.yml @@ -0,0 +1,47 @@ +name: "Front-End Permission Tests" + +on: + pull_request: + branches: + - master + push: + branches: + - master + +jobs: + permissions: + name: Front-End Permission Tests + runs-on: ${{ matrix.os }} + strategy: + matrix: + go-version: [1.17.x] + os: [ubuntu-latest] + steps: + - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + id: go + + - name: Check out code into the Go module directory + uses: actions/checkout@v2 + + - name: Build Console on ${{ matrix.os }} + env: + GO111MODULE: on + GOOS: linux + run: | + make console + + - name: Start Console, front-end app and initialize users/policies + run: | + (./console server && sleep 180) & (cd portal-ui && yarn && yarn start && sleep 180) & (make initialize-permissions && sleep 180) + + - name: Run TestCafe Tests + uses: DevExpress/testcafe-action@latest + with: + args: '"chrome:headless" portal-ui/tests/permissions/ --skip-js-errors' + + - name: Clean up users & policies + run: | + make cleanup-permissions diff --git a/Makefile b/Makefile index 74f01bcf2..e225437ed 100644 --- a/Makefile +++ b/Makefile @@ -68,6 +68,19 @@ test-integration: @(GO111MODULE=on go test -race -v github.com/minio/console/integration/...) @(docker stop minio) +test-permissions: + @(docker run -d --name minio --rm -p 9000:9000 quay.io/minio/minio:latest server /data{1...4}) + @(env bash $(PWD)/portal-ui/tests/scripts/permissions.sh) + @(docker stop minio) + +initialize-permissions: + @(docker run -d --name minio --rm -p 9000:9000 quay.io/minio/minio:latest server /data{1...4}) + @(env bash $(PWD)/portal-ui/tests/scripts/initialize-env.sh) + +cleanup-permissions: + @(env bash $(PWD)/portal-ui/tests/scripts/cleanup-env.sh) + @(docker stop minio) + test: @(GO111MODULE=on go test -race -v github.com/minio/console/restapi/...) diff --git a/portal-ui/package.json b/portal-ui/package.json index a1e395e6b..d5469e174 100644 --- a/portal-ui/package.json +++ b/portal-ui/package.json @@ -58,6 +58,7 @@ "redux-thunk": "^2.3.0", "styled-components": "^5.3.1", "superagent": "^6.1.0", + "testcafe": "^1.17.1", "typeface-roboto": "^0.0.75", "use-debounce": "^5.0.1", "websocket": "^1.0.31" diff --git a/portal-ui/tests/constants/timestamp.txt b/portal-ui/tests/constants/timestamp.txt new file mode 100644 index 000000000..9670d6fd2 --- /dev/null +++ b/portal-ui/tests/constants/timestamp.txt @@ -0,0 +1 @@ +1642030641 diff --git a/portal-ui/tests/permissions/admin.ts b/portal-ui/tests/permissions/admin.ts new file mode 100644 index 000000000..381f91a16 --- /dev/null +++ b/portal-ui/tests/permissions/admin.ts @@ -0,0 +1,62 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Admin permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.admin); + }); + +test("All sidebar items exist", async (t) => { + const dashboardExists = elements.dashboardElement.exists; + const bucketsExist = elements.bucketsElement.exists; + const usersExist = elements.usersElement.exists; + const groupsExist = elements.groupsElement.exists; + const serviceAcctsExist = elements.serviceAcctsElement.exists; + const iamPoliciesExist = elements.iamPoliciesElement.exists; + const settingsExist = elements.settingsElement.exists; + const notificationEndpointsExist = + elements.notificationEndpointsElement.exists; + const tiersExist = elements.tiersElement.exists; + const toolsExist = elements.toolsElement.exists; + const licenseExists = elements.licenseElement.exists; + await t + .expect(dashboardExists) + .ok() + .expect(bucketsExist) + .ok() + .expect(usersExist) + .ok() + .expect(groupsExist) + .ok() + .expect(serviceAcctsExist) + .ok() + .expect(iamPoliciesExist) + .ok() + .expect(settingsExist) + .ok() + .expect(notificationEndpointsExist) + .ok() + .expect(tiersExist) + .ok() + .expect(toolsExist) + .ok() + .expect(licenseExists) + .ok(); +}); diff --git a/portal-ui/tests/permissions/bucketAssignPolicy.ts b/portal-ui/tests/permissions/bucketAssignPolicy.ts new file mode 100644 index 000000000..432819ec3 --- /dev/null +++ b/portal-ui/tests/permissions/bucketAssignPolicy.ts @@ -0,0 +1,86 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as functions from "../utils/functions"; + +fixture("For user with Bucket Assign Policy permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.bucketAssignPolicy); + }); + +// Bucket assign policy permissions +test("Buckets sidebar item exists", async (t) => { + const bucketsExist = elements.bucketsElement.exists; + await t.expect(bucketsExist).ok(); +}); + +test.before(async (t) => { + // Create a bucket + await functions.setUpBucket(t); +})("A readonly policy can be assigned to a bucket", async (t) => { + await t + // We need to log back in after we use the admin account to create bucket, + // using the specific role we use in this module + .useRole(roles.bucketAssignPolicy) + .navigateTo("http://localhost:5005/buckets") + .click(elements.manageButton) + .click(elements.bucketAccessRulesTab) + .click(elements.addAccessRuleButton) + .typeText(elements.bucketsPrefixInput, "readonlytest") + .click(elements.bucketsAccessInput) + .click(elements.bucketsAccessReadOnlyInput) + .click(elements.saveButton); +}); + +test("A writeonly policy can be assigned to a bucket", async (t) => { + await t + .navigateTo("http://localhost:5005/buckets") + .click(elements.manageButton) + .click(elements.bucketAccessRulesTab) + .click(elements.addAccessRuleButton) + .typeText(elements.bucketsPrefixInput, "writeonlytest") + .click(elements.bucketsAccessInput) + .click(elements.bucketsAccessWriteOnlyInput) + .click(elements.saveButton); +}); + +test("A readwrite policy can be assigned to a bucket", async (t) => { + await t + .navigateTo("http://localhost:5005/buckets") + .click(elements.manageButton) + .click(elements.bucketAccessRulesTab) + .click(elements.addAccessRuleButton) + .typeText(elements.bucketsPrefixInput, "readwritetest") + .click(elements.bucketsAccessInput) + .click(elements.bucketsAccessReadWriteInput) + .click(elements.saveButton); +}); + +test("Previously assigned policy to a bucket can be deleted", async (t) => { + await t + .navigateTo("http://localhost:5005/buckets") + .click(elements.manageButton) + .click(elements.bucketAccessRulesTab) + .click(elements.deleteIconButtonAlt) + .click(elements.deleteButton) + .click(elements.logoutItem); +}).after(async (t) => { + // Cleanup created bucket + await functions.cleanUpBucket(t); +}); diff --git a/portal-ui/tests/permissions/bucketRead.ts b/portal-ui/tests/permissions/bucketRead.ts new file mode 100644 index 000000000..627c6e213 --- /dev/null +++ b/portal-ui/tests/permissions/bucketRead.ts @@ -0,0 +1,66 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as functions from "../utils/functions"; + +fixture("For user with Bucket Read permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.bucketRead); + }); + +test("Buckets sidebar item exists", async (t) => { + const bucketsExist = elements.bucketsElement.exists; + await t.expect(bucketsExist).ok(); +}); + +test.before(async (t) => { + // Create a bucket + await functions.setUpBucket(t); +})("Browse button exists", async (t) => { + const browseExists = elements.browseButton.exists; + // We need to log back in after we use the admin account to create bucket, + // using the specific role we use in this module + await t.useRole(roles.bucketRead).expect(browseExists).ok(); +}); + +test("Bucket access is set to R", async (t) => { + await t.expect(elements.bucketAccessText.innerText).eql("Access: R"); +}); + +test + .before(async (t) => { + await t + .useRole(roles.admin) + .navigateTo("http://localhost:5005/buckets") + .click(elements.browseButton) + // Upload object to bucket + .setFilesToUpload(elements.uploadInput, "../uploads/test.txt") + .click(elements.logoutItem); + })("Object list table is enabled", async (t) => { + const bucketsTableExists = elements.table.exists; + await t + .useRole(roles.bucketRead) + .click(elements.browseButton) + .expect(bucketsTableExists) + .ok(); + }) + .after(async (t) => { + // Cleanup created bucket and corresponding uploads + await functions.cleanUpBucketAndUploads(t); + }); diff --git a/portal-ui/tests/permissions/bucketWrite.ts b/portal-ui/tests/permissions/bucketWrite.ts new file mode 100644 index 000000000..c6d2621a0 --- /dev/null +++ b/portal-ui/tests/permissions/bucketWrite.ts @@ -0,0 +1,80 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as functions from "../utils/functions"; + +fixture("For user with Bucket Write permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.bucketWrite); + }); + +test("Buckets sidebar item exists", async (t) => { + const bucketsExist = elements.bucketsElement.with({ boundTestRun: t }).exists; + await t.expect(bucketsExist).ok(); +}); + +test.before(async (t) => { + // Create a bucket + await functions.setUpBucket(t); +})("Browse button exists", async (t) => { + const browseExists = elements.browseButton.exists; + await t + // We need to log back in after we use the admin account to create bucket, + // using the specific role we use in this module + .useRole(roles.bucketWrite) + .navigateTo("http://localhost:5005/buckets") + .expect(browseExists) + .ok(); +}); + +test("Bucket access is set to W", async (t) => { + await t + .navigateTo("http://localhost:5005/buckets") + .expect(elements.bucketAccessText.innerText) + .eql("Access: W"); +}); + +test("Upload button exists", async (t) => { + const uploadExists = elements.uploadButton.exists; + await t + .navigateTo("http://localhost:5005/buckets") + .click(elements.browseButton) + .expect(uploadExists) + .ok(); +}); + +test("Object can be uploaded to a bucket", async (t) => { + await t + .navigateTo("http://localhost:5005/buckets") + .click(elements.browseButton) + // Upload object to bucket + .setFilesToUpload(elements.uploadInput, "../uploads/test.txt"); +}); + +test("Object list table is disabled", async (t) => { + const disabledBucketsTableExists = elements.bucketsTableDisabled.exists; + await t + .navigateTo("http://localhost:5005/buckets") + .click(elements.browseButton) + .expect(disabledBucketsTableExists) + .ok(); +}).after(async (t) => { + // Cleanup created bucket and corresponding uploads + await functions.cleanUpBucketAndUploads(t); +}); diff --git a/portal-ui/tests/permissions/dashboard.ts b/portal-ui/tests/permissions/dashboard.ts new file mode 100644 index 000000000..0dda02149 --- /dev/null +++ b/portal-ui/tests/permissions/dashboard.ts @@ -0,0 +1,31 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Dashboard permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.dashboard); + }); + +test("Dashboard sidebar item exists", async (t) => { + const dashboardExists = elements.dashboardElement.exists; + await t.expect(dashboardExists).ok(); +}); + +// TODO: Display extended metrics diff --git a/portal-ui/tests/permissions/diagnostics.ts b/portal-ui/tests/permissions/diagnostics.ts new file mode 100644 index 000000000..7afa8121d --- /dev/null +++ b/portal-ui/tests/permissions/diagnostics.ts @@ -0,0 +1,84 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Diagnostics permissions") + .page("http://localhost:9090") + .beforeEach(async (t) => { + await t.useRole(roles.diagnostics); + }); + +test("Tools sidebar item exists", async (t) => { + const toolsExist = elements.toolsElement.exists; + await t.expect(toolsExist).ok(); +}); + +test("Diagnostics link exists in Tools page", async (t) => { + const diagnosticsLinkExists = elements.diagnosticsLink.exists; + await t.click(elements.toolsElement).expect(diagnosticsLinkExists).ok(); +}); + +test("Diagnostics page can be opened", async (t) => { + await t.navigateTo("http://localhost:9090/tools/diagnostics"); +}); + +test("Start Diagnostic button exists", async (t) => { + const startDiagnosticExists = elements.startDiagnosticButton.exists; + await t + .navigateTo("http://localhost:9090/tools/diagnostics") + .expect(startDiagnosticExists) + .ok(); +}); + +test("Start Diagnostic button can be clicked", async (t) => { + await t + .navigateTo("http://localhost:9090/tools/diagnostics") + .click(elements.startDiagnosticButton); +}); + +// TODO: Fix test failing sporadically on GitHub Actions + +// test("Download button exists after Diagnostic is completed", async (t) => { +// const downloadExists = elements.downloadButton.exists; +// await t +// .navigateTo("http://localhost:9090/tools/diagnostics") +// .click(elements.startDiagnosticButton) +// .expect(downloadExists).ok(); +// }); + +// test("Download button is clickable after Diagnostic is completed", async (t) => { +// await t +// .navigateTo("http://localhost:9090/tools/diagnostics") +// .click(elements.startDiagnosticButton) +// .click(elements.downloadButton); +// }); + +test("Start New Diagnostic button exists after Diagnostic is completed", async (t) => { + const startNewDiagnosticButtonExists = elements.startNewDiagnosticButton.exists; + await t + .navigateTo("http://localhost:9090/tools/diagnostics") + .click(elements.startDiagnosticButton) + .expect(startNewDiagnosticButtonExists).ok(); +}); + +test("Start New Diagnostic button is clickable after Diagnostic is completed", async (t) => { + await t + .navigateTo("http://localhost:9090/tools/diagnostics") + .click(elements.startDiagnosticButton) + .click(elements.startNewDiagnosticButton); +}); diff --git a/portal-ui/tests/permissions/groups.ts b/portal-ui/tests/permissions/groups.ts new file mode 100644 index 000000000..93b77b45f --- /dev/null +++ b/portal-ui/tests/permissions/groups.ts @@ -0,0 +1,119 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as constants from "../utils/constants"; +import * as functions from "../utils/functions"; +import { Selector } from "testcafe"; + +const groupsListItem = Selector(".ReactVirtualized__Table__rowColumn").withText( + constants.TEST_GROUP_NAME +); + +fixture("For user with Groups permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.groups); + }); + +test("Groups sidebar item exists", async (t) => { + const groupsExist = elements.groupsElement.exists; + await t.expect(groupsExist).ok(); +}); + +test("Create Group button exists", async (t) => { + const createGroupButtonExists = elements.createGroupButton.exists; + await t + .navigateTo("http://localhost:5005/groups") + .expect(createGroupButtonExists) + .ok(); +}); + +test("Create Group button is clickable", async (t) => { + await t + .navigateTo("http://localhost:5005/groups") + .click(elements.createGroupButton); +}); + +test("Group Name input exists in the Create Group modal", async (t) => { + const groupNameInputExists = elements.groupNameInput.exists; + await t + .navigateTo("http://localhost:5005/groups") + .click(elements.createGroupButton) + .expect(groupNameInputExists) + .ok(); +}); + +test("Users table exists in the Create Group modal", async (t) => { + const createGroupUserTableExists = elements.table.exists; + await t + .navigateTo("http://localhost:5005/groups") + .click(elements.createGroupButton) + .expect(createGroupUserTableExists) + .ok(); +}); + +test.before(async (t) => { + // A user must be created as we need to choose a user from the dropdown + await functions.createUser(t); +})( + "Create Group modal can be submitted after inputs are entered", + async (t) => { + // We need to log back in after we use the admin account to create bucket, + // using the specific role we use in this module + await t + .useRole(roles.groups) + .navigateTo("http://localhost:5005/groups") + .click(elements.createGroupButton) + .typeText(elements.groupNameInput, constants.TEST_GROUP_NAME) + .typeText(elements.filterUserInput, constants.TEST_USER_NAME) + .click(elements.groupUserCheckbox) + .click(elements.saveButton); + } +); + +test("Groups table exists", async (t) => { + const groupsTableExists = elements.table.exists; + await t + .navigateTo("http://localhost:5005/groups") + .expect(groupsTableExists) + .ok(); +}); + +test("Created Group can be disabled and enabled back", async (t) => { + await t + .navigateTo("http://localhost:5005/groups") + .click(groupsListItem) + .click(elements.switchInput) + .expect(elements.groupStatusText.innerText) + .eql("Disabled") + .click(elements.switchInput) + .expect(elements.groupStatusText.innerText) + .eql("Enabled"); +}); + +test("Created Group can be viewed and deleted", async (t) => { + await t + .navigateTo("http://localhost:5005/groups") + .click(groupsListItem) + .click(elements.editMembersButton) + .typeText(elements.filterUserInput, constants.TEST_USER_NAME) + .click(elements.groupUserCheckbox) + .click(elements.saveButton) + .click(elements.deleteGroupIconButton) + .click(elements.deleteButton); +}); diff --git a/portal-ui/tests/permissions/heal.ts b/portal-ui/tests/permissions/heal.ts new file mode 100644 index 000000000..6177a3cd6 --- /dev/null +++ b/portal-ui/tests/permissions/heal.ts @@ -0,0 +1,62 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as functions from "../utils/functions"; + +fixture("For user with Heal permissions") + .page("http://localhost:9090") + .beforeEach(async (t) => { + await t.useRole(roles.heal); + }); + +test("Tools sidebar item exists", async (t) => { + const toolsExist = elements.toolsElement.exists; + await t.expect(toolsExist).ok(); +}); + +test("Heal link exists in Tools page", async (t) => { + const healLinkExists = elements.healLink.exists; + await t.click(elements.toolsElement).expect(healLinkExists).ok(); +}); + +test("Heal page can be opened", async (t) => { + await t.navigateTo("http://localhost:9090/tools/heal"); +}); + +test.before(async (t) => { + // Create a bucket + await functions.setUpBucket(t); +})("Start button exists", async (t) => { + const startButtonExists = elements.startButton.exists; + await t + .useRole(roles.heal) + .navigateTo("http://localhost:9090/tools/heal") + .expect(startButtonExists) + .ok(); +}); + +test("Start button can be clicked", async (t) => { + await t + .navigateTo("http://localhost:9090/tools/heal") + .click(elements.bucketNameInput) + .click(elements.bucketDropdownOption) + .click(elements.startButton); +}).after(async (t) => { + // Cleanup created bucket + await functions.cleanUpBucket(t); +}); diff --git a/portal-ui/tests/permissions/iamPolicies.ts b/portal-ui/tests/permissions/iamPolicies.ts new file mode 100644 index 000000000..66ac0a9e4 --- /dev/null +++ b/portal-ui/tests/permissions/iamPolicies.ts @@ -0,0 +1,105 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as constants from "../utils/constants"; +import { Selector } from "testcafe"; + +const iamPolicyListItem = Selector( + ".ReactVirtualized__Table__rowColumn" +).withText(constants.TEST_IAM_POLICY_NAME); + +const iamPolicyDelete = iamPolicyListItem + .nextSibling() + .child("button") + .withAttribute("aria-label", "delete"); + +fixture("For user with IAM Policies permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.iamPolicies); + }); + +test("IAM Policies sidebar item exists", async (t) => { + const iamPoliciesExist = elements.iamPoliciesElement.exists; + await t.expect(iamPoliciesExist).ok(); +}); + +test("Create Policy button exists", async (t) => { + const createPolicyButtonExists = elements.createPolicyButton.exists; + await t + .navigateTo("http://localhost:5005/policies") + .expect(createPolicyButtonExists) + .ok(); +}); + +test("Create Policy button is clickable", async (t) => { + await t + .navigateTo("http://localhost:5005/policies") + .click(elements.createPolicyButton); +}); + +test("Policy Name input exists in the Create Policy modal", async (t) => { + const policyNameInputExists = elements.createPolicyName.exists; + await t + .navigateTo("http://localhost:5005/policies") + .click(elements.createPolicyButton) + .expect(policyNameInputExists) + .ok(); +}); + +test("Policy textfield exists in the Create Policy modal", async (t) => { + const policyTextfieldExists = elements.createPolicyTextfield.exists; + await t + .navigateTo("http://localhost:5005/policies") + .click(elements.createPolicyButton) + .expect(policyTextfieldExists) + .ok(); +}); + +test("Create Policy modal can be submitted after inputs are entered", async (t) => { + await t + .navigateTo("http://localhost:5005/policies") + .click(elements.createPolicyButton) + .typeText(elements.createPolicyName, constants.TEST_IAM_POLICY_NAME) + .typeText(elements.createPolicyTextfield, constants.TEST_IAM_POLICY, { paste: true }) + .click(elements.saveButton); +}).after(async (t) => { + // Clean up created policy + await t + .navigateTo("http://localhost:5005/policies") + .typeText(elements.searchResourceInput, constants.TEST_IAM_POLICY_NAME) + .click(iamPolicyDelete) + .click(elements.deleteButton); +}); + +test("Created Policy can be viewed and deleted", async (t) => { + const iamPolicyListItemExists = iamPolicyListItem.exists; + await t + .navigateTo("http://localhost:5005/policies") + .click(elements.createPolicyButton) + .typeText(elements.createPolicyName, constants.TEST_IAM_POLICY_NAME) + .typeText(elements.createPolicyTextfield, constants.TEST_IAM_POLICY, { paste: true }) + .click(elements.saveButton) + .typeText(elements.searchResourceInput, constants.TEST_IAM_POLICY_NAME) + .expect(iamPolicyListItemExists) + .ok() + .click(iamPolicyDelete) + .click(elements.deleteButton) + .expect(iamPolicyListItemExists) + .notOk(); +}); diff --git a/portal-ui/tests/permissions/logs.ts b/portal-ui/tests/permissions/logs.ts new file mode 100644 index 000000000..8895315cc --- /dev/null +++ b/portal-ui/tests/permissions/logs.ts @@ -0,0 +1,47 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Logs permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.logs); + }); + +test("Tools sidebar item exists", async (t) => { + const toolsExist = elements.toolsElement.exists; + await t.expect(toolsExist).ok(); +}); + +test("Logs link exists in Tools page", async (t) => { + const logsLinkExists = elements.logsLink.exists; + await t.click(elements.toolsElement).expect(logsLinkExists).ok(); +}); + +test("Logs page can be opened", async (t) => { + await t + .navigateTo("http://localhost:5005/tools/logs"); +}); + +test("Log window exists in Logs page", async (t) => { + const logWindowExists = elements.logWindow.exists; + await t + .navigateTo("http://localhost:5005/tools/logs") + .expect(logWindowExists) + .ok(); +}); diff --git a/portal-ui/tests/permissions/notificationEndpoints.ts b/portal-ui/tests/permissions/notificationEndpoints.ts new file mode 100644 index 000000000..7c6c35d5b --- /dev/null +++ b/portal-ui/tests/permissions/notificationEndpoints.ts @@ -0,0 +1,44 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Notification Endpoints permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.notificationEndpoints); + }); + +test("Notification Endpoints sidebar item exists", async (t) => { + const notificationEndpointsExist = + elements.notificationEndpointsElement.exists; + await t.expect(notificationEndpointsExist).ok(); +}); + +test("Add Notification Target button exists", async (t) => { + const addNotifTargetButtonExists = elements.addNotifTargetButton.exists; + await t + .navigateTo("http://localhost:5005/notification-endpoints") + .expect(addNotifTargetButtonExists) + .ok(); +}); + +test("Add Notification Target button is clickable", async (t) => { + await t + .navigateTo("http://localhost:5005/notification-endpoints") + .click(elements.addNotifTargetButton); +}); diff --git a/portal-ui/tests/permissions/settings.ts b/portal-ui/tests/permissions/settings.ts new file mode 100644 index 000000000..e937f3299 --- /dev/null +++ b/portal-ui/tests/permissions/settings.ts @@ -0,0 +1,76 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Settings permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.settings); + }); + +test("Settings sidebar item exists", async (t) => { + const settingsExist = elements.settingsElement.exists; + await t.expect(settingsExist).ok(); +}); + +test("Settings window exists in Settings page", async (t) => { + const settingsWindowExists = elements.settingsWindow.exists; + await t + .navigateTo("http://localhost:5005/settings") + .expect(settingsWindowExists) + .ok(); +}); + +test("All vertical tab items exist", async (t) => { + const settingsRegionTabExists = elements.settingsRegionTab.exists; + const settingsCacheTabExists = elements.settingsCacheTab.exists; + const settingsCompressionTabExists = elements.settingsCompressionTab.exists; + const settingsApiTabExists = elements.settingsApiTab.exists; + const settingsHealTabExists = elements.settingsHealTab.exists; + const settingsScannerTabExists = elements.settingsScannerTab.exists; + const settingsEtcdTabExists = elements.settingsEtcdTab.exists; + const settingsOpenIdTabExists = elements.settingsOpenIdTab.exists; + const settingsLdapTabExists = elements.settingsLdapTab.exists; + const settingsLoggerWebhookTabExists = + elements.settingsLoggerWebhookTab.exists; + const settingsAuditWebhookTabExists = elements.settingsAuditWebhookTab.exists; + await t + .navigateTo("http://localhost:5005/settings") + .expect(settingsRegionTabExists) + .ok() + .expect(settingsCacheTabExists) + .ok() + .expect(settingsCompressionTabExists) + .ok() + .expect(settingsApiTabExists) + .ok() + .expect(settingsHealTabExists) + .ok() + .expect(settingsScannerTabExists) + .ok() + .expect(settingsEtcdTabExists) + .ok() + .expect(settingsOpenIdTabExists) + .ok() + .expect(settingsLdapTabExists) + .ok() + .expect(settingsLoggerWebhookTabExists) + .ok() + .expect(settingsAuditWebhookTabExists) + .ok(); +}); diff --git a/portal-ui/tests/permissions/tiers.ts b/portal-ui/tests/permissions/tiers.ts new file mode 100644 index 000000000..8ffd126f8 --- /dev/null +++ b/portal-ui/tests/permissions/tiers.ts @@ -0,0 +1,43 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Tiers permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.tiers); + }); + +test("Tiers sidebar item exists", async (t) => { + const tiersExist = elements.tiersElement.exists; + await t.expect(tiersExist).ok(); +}); + +test("Add Tier button exists", async (t) => { + const createTierButtonExists = elements.createTierButton.exists; + await t + .navigateTo("http://localhost:5005/tiers") + .expect(createTierButtonExists) + .ok(); +}); + +test("Add Tier button is clickable", async (t) => { + await t + .navigateTo("http://localhost:5005/tiers") + .click(elements.createTierButton); +}); diff --git a/portal-ui/tests/permissions/trace.ts b/portal-ui/tests/permissions/trace.ts new file mode 100644 index 000000000..a8e2bc435 --- /dev/null +++ b/portal-ui/tests/permissions/trace.ts @@ -0,0 +1,60 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; + +fixture("For user with Trace permissions") + .page("http://localhost:9090") + .beforeEach(async (t) => { + await t.useRole(roles.trace); + }); + +test("Tools sidebar item exists", async (t) => { + const toolsExist = elements.toolsElement.exists; + await t.expect(toolsExist).ok(); +}); + +test("Trace link exists in Tools page", async (t) => { + const traceLinkExists = elements.traceLink.exists; + await t.click(elements.toolsElement).expect(traceLinkExists).ok(); +}); + +test("Trace page can be opened", async (t) => { + await t + .navigateTo("http://localhost:9090/tools/trace"); +}); + +test("Start button can be clicked", async (t) => { + await t + .navigateTo("http://localhost:9090/tools/trace") + .click(elements.startButton); +}); + +test("Stop button appears after Start button has been clicked", async (t) => { + const stopButtonExists = elements.stopButton.exists; + await t + .navigateTo("http://localhost:9090/tools/trace") + .click(elements.startButton) + .expect(stopButtonExists).ok(); +}); + +test("Stop button can be clicked after Start button has been clicked", async (t) => { + await t + .navigateTo("http://localhost:9090/tools/trace") + .click(elements.startButton) + .click(elements.stopButton); +}); diff --git a/portal-ui/tests/permissions/users.ts b/portal-ui/tests/permissions/users.ts new file mode 100644 index 000000000..c9435d71e --- /dev/null +++ b/portal-ui/tests/permissions/users.ts @@ -0,0 +1,102 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as constants from "../utils/constants"; +import { Selector } from "testcafe"; + +const userListItem = Selector(".ReactVirtualized__Table__rowColumn").withText( + constants.TEST_USER_NAME +); + +const userDeleteIconButton = userListItem + .nextSibling() + .child("button") + .withAttribute("aria-label", "delete"); + +fixture("For user with Users permissions") + .page("http://localhost:5005") + .beforeEach(async (t) => { + await t.useRole(roles.users); + }); + +test("Users sidebar item exists", async (t) => { + const usersExist = elements.usersElement.exists; + await t.expect(usersExist).ok(); +}); + +test("Create User button exists", async (t) => { + const createUserButtonExists = elements.createUserButton.exists; + await t + .navigateTo("http://localhost:5005/users") + .expect(createUserButtonExists) + .ok(); +}); + +test("Create User button is clickable", async (t) => { + await t + .navigateTo("http://localhost:5005/users") + .click(elements.createUserButton); +}); + +test("Access Key input exists in the Create User modal", async (t) => { + const accessKeyInputExists = elements.usersAccessKeyInput.exists; + await t + .navigateTo("http://localhost:5005/users") + .click(elements.createUserButton) + .expect(accessKeyInputExists) + .ok(); +}); + +test("Secret Key input exists in the Create User modal", async (t) => { + const secretKeyInputExists = elements.usersSecretKeyInput.exists; + await t + .navigateTo("http://localhost:5005/users") + .click(elements.createUserButton) + .expect(secretKeyInputExists) + .ok(); +}); + +test("Create User modal can be submitted after inputs are entered", async (t) => { + await t + .navigateTo("http://localhost:5005/users") + .click(elements.createUserButton) + .typeText(elements.usersAccessKeyInput, constants.TEST_USER_NAME) + .typeText(elements.usersSecretKeyInput, constants.TEST_PASSWORD) + .click(elements.saveButton); +}); + +test("Users table exists", async (t) => { + const usersTableExists = elements.table.exists; + await t + .navigateTo("http://localhost:5005/users") + .expect(usersTableExists) + .ok(); +}); + +test("Created User can be viewed and deleted", async (t) => { + const userListItemExists = userListItem.exists; + await t + .navigateTo("http://localhost:5005/users") + .typeText(elements.searchResourceInput, constants.TEST_USER_NAME) + .expect(userListItemExists) + .ok() + .click(userDeleteIconButton) + .click(elements.deleteButton) + .expect(userListItemExists) + .notOk(); +}); diff --git a/portal-ui/tests/permissions/watch.ts b/portal-ui/tests/permissions/watch.ts new file mode 100644 index 000000000..6b688103c --- /dev/null +++ b/portal-ui/tests/permissions/watch.ts @@ -0,0 +1,56 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "../utils/roles"; +import * as elements from "../utils/elements"; +import * as functions from "../utils/functions"; + +fixture("For user with Watch permissions") + .page("http://localhost:9090") + .beforeEach(async (t) => { + await t.useRole(roles.watch); + }); + +test("Tools sidebar item exists", async (t) => { + const toolsExist = elements.toolsElement.exists; + await t.expect(toolsExist).ok(); +}); + +test("Watch link exists in Tools page", async (t) => { + const watchLinkExists = elements.watchLink.exists; + await t.click(elements.toolsElement).expect(watchLinkExists).ok(); +}); + +test("Watch page can be opened", async (t) => { + await t.navigateTo("http://localhost:9090/tools/watch"); +}); + +test.before(async (t) => { + // Create a bucket + await functions.setUpBucket(t); +})("Start button can be clicked", async (t) => { + await t + // We need to log back in after we use the admin account to create bucket, + // using the specific role we use in this module + .useRole(roles.watch) + .navigateTo("http://localhost:9090/tools/watch") + .click(elements.bucketNameInput) + .click(elements.bucketDropdownOption) + .click(elements.startButton); +}).after(async (t) => { + // Cleanup created bucket + await functions.cleanUpBucket(t); +}); diff --git a/portal-ui/tests/policies/bucketAssignPolicy.json b/portal-ui/tests/policies/bucketAssignPolicy.json new file mode 100644 index 000000000..bcc3fb812 --- /dev/null +++ b/portal-ui/tests/policies/bucketAssignPolicy.json @@ -0,0 +1,18 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": [ + "s3:PutBucketPolicy", + "s3:DeleteBucketPolicy", + "s3:GetBucketPolicy", + "s3:ListBucket" + ], + "Effect": "Allow", + "Resource": [ + "arn:aws:s3:::*" + ], + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/bucketRead.json b/portal-ui/tests/policies/bucketRead.json new file mode 100644 index 000000000..e38cf6305 --- /dev/null +++ b/portal-ui/tests/policies/bucketRead.json @@ -0,0 +1,20 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": [ + "s3:ListMultipartUploadParts", + "s3:ListBucketMultipartUploads", + "s3:ListBucket", + "s3:HeadBucket", + "s3:GetObject", + "s3:GetBucketLocation" + ], + "Effect": "Allow", + "Resource": [ + "arn:aws:s3:::*" + ], + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/bucketWrite.json b/portal-ui/tests/policies/bucketWrite.json new file mode 100644 index 000000000..a57fa3334 --- /dev/null +++ b/portal-ui/tests/policies/bucketWrite.json @@ -0,0 +1,19 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": [ + "s3:AbortMultipartUpload", + "s3:CreateBucket", + "s3:PutObject", + "s3:DeleteObject", + "s3:DeleteBucket" + ], + "Effect": "Allow", + "Resource": [ + "arn:aws:s3:::*" + ], + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/dashboard.json b/portal-ui/tests/policies/dashboard.json new file mode 100644 index 000000000..dec63c1c0 --- /dev/null +++ b/portal-ui/tests/policies/dashboard.json @@ -0,0 +1,11 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:ServerInfo" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/diagnostics.json b/portal-ui/tests/policies/diagnostics.json new file mode 100644 index 000000000..2a3fdae35 --- /dev/null +++ b/portal-ui/tests/policies/diagnostics.json @@ -0,0 +1,11 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:OBDInfo" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/groups.json b/portal-ui/tests/policies/groups.json new file mode 100644 index 000000000..f7af493a0 --- /dev/null +++ b/portal-ui/tests/policies/groups.json @@ -0,0 +1,18 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": [ + "admin:ListGroups", + "admin:AddUserToGroup", + "admin:EnableGroup", + "admin:DisableGroup", + "admin:RemoveUserFromGroup", + "admin:GetGroup", + "admin:ListUsers" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/heal.json b/portal-ui/tests/policies/heal.json new file mode 100644 index 000000000..2848bc8f9 --- /dev/null +++ b/portal-ui/tests/policies/heal.json @@ -0,0 +1,16 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": ["admin:Heal"], + "Effect": "Allow", + "Sid": "" + }, + { + "Action": ["s3:ListBucket"], + "Effect": "Allow", + "Resource": ["arn:aws:s3:::*"], + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/iamPolicies.json b/portal-ui/tests/policies/iamPolicies.json new file mode 100644 index 000000000..9feb0fd42 --- /dev/null +++ b/portal-ui/tests/policies/iamPolicies.json @@ -0,0 +1,15 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:GetPolicy", + "admin:DeletePolicy", + "admin:CreatePolicy", + "admin:AttachUserOrGroupPolicy", + "admin:ListUserPolicies" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/logs.json b/portal-ui/tests/policies/logs.json new file mode 100644 index 000000000..a9dd27d28 --- /dev/null +++ b/portal-ui/tests/policies/logs.json @@ -0,0 +1,11 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:ConsoleLog" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/notificationEndpoints.json b/portal-ui/tests/policies/notificationEndpoints.json new file mode 100644 index 000000000..8b63ff22a --- /dev/null +++ b/portal-ui/tests/policies/notificationEndpoints.json @@ -0,0 +1,11 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:ConfigUpdate" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/settings.json b/portal-ui/tests/policies/settings.json new file mode 100644 index 000000000..8b63ff22a --- /dev/null +++ b/portal-ui/tests/policies/settings.json @@ -0,0 +1,11 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:ConfigUpdate" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/tiers.json b/portal-ui/tests/policies/tiers.json new file mode 100644 index 000000000..2cff1bf6f --- /dev/null +++ b/portal-ui/tests/policies/tiers.json @@ -0,0 +1,12 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:ListTier", + "admin:SetTier" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/trace.json b/portal-ui/tests/policies/trace.json new file mode 100644 index 000000000..025625a68 --- /dev/null +++ b/portal-ui/tests/policies/trace.json @@ -0,0 +1,11 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:ServerTrace" + ], + "Effect": "Allow", + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/users.json b/portal-ui/tests/policies/users.json new file mode 100644 index 000000000..ccab40b80 --- /dev/null +++ b/portal-ui/tests/policies/users.json @@ -0,0 +1,21 @@ +{ + "Version": "2012-10-17", + "Statement": [{ + "Action": [ + "admin:ListUsers", + "admin:CreateUser", + "admin:DeleteUser", + "admin:GetUser", + "admin:EnableUser", + "admin:DisableUser", + "admin:ListUserPolicies", + "admin:ListGroups" + ], + "Effect": "Allow", + "Resource": [ + "arn:aws:s3:::*" + ], + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/policies/watch.json b/portal-ui/tests/policies/watch.json new file mode 100644 index 000000000..5bc6a860c --- /dev/null +++ b/portal-ui/tests/policies/watch.json @@ -0,0 +1,16 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": [ + "s3:ListenBucketNotification", + "s3:ListBucket" + ], + "Effect": "Allow", + "Resource": [ + "arn:aws:s3:::*" + ], + "Sid": "" + } + ] +} diff --git a/portal-ui/tests/scripts/cleanup-env.sh b/portal-ui/tests/scripts/cleanup-env.sh new file mode 100644 index 000000000..19bfbd41f --- /dev/null +++ b/portal-ui/tests/scripts/cleanup-env.sh @@ -0,0 +1,61 @@ +add_alias() { + for i in $(seq 1 4); do + echo "... attempting to add alias $i" + until (mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin); do + echo "...waiting... for 5secs" && sleep 5 + done + done +} + +remove_users() { + mc admin user remove minio bucketassignpolicy-$TIMESTAMP + mc admin user remove minio bucketread-$TIMESTAMP + mc admin user remove minio bucketwrite-$TIMESTAMP + mc admin user remove minio dashboard-$TIMESTAMP + mc admin user remove minio diagnostics-$TIMESTAMP + mc admin user remove minio groups-$TIMESTAMP + mc admin user remove minio heal-$TIMESTAMP + mc admin user remove minio iampolicies-$TIMESTAMP + mc admin user remove minio logs-$TIMESTAMP + mc admin user remove minio notificationendpoints-$TIMESTAMP + mc admin user remove minio settings-$TIMESTAMP + mc admin user remove minio tiers-$TIMESTAMP + mc admin user remove minio trace-$TIMESTAMP + mc admin user remove minio users-$TIMESTAMP + mc admin user remove minio watch-$TIMESTAMP +} + +remove_policies() { + mc admin policy remove minio bucketassignpolicy-$TIMESTAMP + mc admin policy remove minio bucketread-$TIMESTAMP + mc admin policy remove minio bucketwrite-$TIMESTAMP + mc admin policy remove minio dashboard-$TIMESTAMP + mc admin policy remove minio diagnostics-$TIMESTAMP + mc admin policy remove minio groups-$TIMESTAMP + mc admin policy remove minio heal-$TIMESTAMP + mc admin policy remove minio iampolicies-$TIMESTAMP + mc admin policy remove minio logs-$TIMESTAMP + mc admin policy remove minio notificationendpoints-$TIMESTAMP + mc admin policy remove minio settings-$TIMESTAMP + mc admin policy remove minio tiers-$TIMESTAMP + mc admin policy remove minio trace-$TIMESTAMP + mc admin policy remove minio users-$TIMESTAMP + mc admin policy remove minio watch-$TIMESTAMP +} + +__init__() { + export TIMESTAMP="$(cat portal-ui/tests/constants/timestamp.txt)" + export GOPATH=/tmp/gopath + export PATH=${PATH}:${GOPATH}/bin + + go install github.com/minio/mc@latest + + add_alias +} + +main() { + remove_users + remove_policies +} + +( __init__ "$@" && main "$@" ) \ No newline at end of file diff --git a/portal-ui/tests/scripts/initialize-env.sh b/portal-ui/tests/scripts/initialize-env.sh new file mode 100644 index 000000000..38a552156 --- /dev/null +++ b/portal-ui/tests/scripts/initialize-env.sh @@ -0,0 +1,81 @@ +add_alias() { + for i in $(seq 1 4); do + echo "... attempting to add alias $i" + until (mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin); do + echo "...waiting... for 5secs" && sleep 5 + done + done +} + +create_policies() { + mc admin policy add minio bucketassignpolicy-$TIMESTAMP portal-ui/tests/policies/bucketAssignPolicy.json + mc admin policy add minio bucketread-$TIMESTAMP portal-ui/tests/policies/bucketRead.json + mc admin policy add minio bucketwrite-$TIMESTAMP portal-ui/tests/policies/bucketWrite.json + mc admin policy add minio dashboard-$TIMESTAMP portal-ui/tests/policies/dashboard.json + mc admin policy add minio diagnostics-$TIMESTAMP portal-ui/tests/policies/diagnostics.json + mc admin policy add minio groups-$TIMESTAMP portal-ui/tests/policies/groups.json + mc admin policy add minio heal-$TIMESTAMP portal-ui/tests/policies/heal.json + mc admin policy add minio iampolicies-$TIMESTAMP portal-ui/tests/policies/iamPolicies.json + mc admin policy add minio logs-$TIMESTAMP portal-ui/tests/policies/logs.json + mc admin policy add minio notificationendpoints-$TIMESTAMP portal-ui/tests/policies/notificationEndpoints.json + mc admin policy add minio settings-$TIMESTAMP portal-ui/tests/policies/settings.json + mc admin policy add minio tiers-$TIMESTAMP portal-ui/tests/policies/tiers.json + mc admin policy add minio trace-$TIMESTAMP portal-ui/tests/policies/trace.json + mc admin policy add minio users-$TIMESTAMP portal-ui/tests/policies/users.json + mc admin policy add minio watch-$TIMESTAMP portal-ui/tests/policies/watch.json +} + +create_users() { + mc admin user add minio bucketassignpolicy-$TIMESTAMP bucketassignpolicy + mc admin user add minio bucketread-$TIMESTAMP bucketread + mc admin user add minio bucketwrite-$TIMESTAMP bucketwrite + mc admin user add minio dashboard-$TIMESTAMP dashboard + mc admin user add minio diagnostics-$TIMESTAMP diagnostics + mc admin user add minio groups-$TIMESTAMP groups1234 + mc admin user add minio heal-$TIMESTAMP heal1234 + mc admin user add minio iampolicies-$TIMESTAMP iampolicies + mc admin user add minio logs-$TIMESTAMP logs1234 + mc admin user add minio notificationendpoints-$TIMESTAMP notificationendpoints + mc admin user add minio settings-$TIMESTAMP settings + mc admin user add minio tiers-$TIMESTAMP tiers1234 + mc admin user add minio trace-$TIMESTAMP trace1234 + mc admin user add minio users-$TIMESTAMP users1234 + mc admin user add minio watch-$TIMESTAMP watch1234 +} + +assign_policies() { + mc admin policy set minio bucketassignpolicy-$TIMESTAMP user=bucketassignpolicy-$TIMESTAMP + mc admin policy set minio bucketread-$TIMESTAMP user=bucketread-$TIMESTAMP + mc admin policy set minio bucketwrite-$TIMESTAMP user=bucketwrite-$TIMESTAMP + mc admin policy set minio dashboard-$TIMESTAMP user=dashboard-$TIMESTAMP + mc admin policy set minio diagnostics-$TIMESTAMP user=diagnostics-$TIMESTAMP + mc admin policy set minio groups-$TIMESTAMP user=groups-$TIMESTAMP + mc admin policy set minio heal-$TIMESTAMP user=heal-$TIMESTAMP + mc admin policy set minio iampolicies-$TIMESTAMP user=iampolicies-$TIMESTAMP + mc admin policy set minio logs-$TIMESTAMP user=logs-$TIMESTAMP + mc admin policy set minio notificationendpoints-$TIMESTAMP user=notificationendpoints-$TIMESTAMP + mc admin policy set minio settings-$TIMESTAMP user=settings-$TIMESTAMP + mc admin policy set minio tiers-$TIMESTAMP user=tiers-$TIMESTAMP + mc admin policy set minio trace-$TIMESTAMP user=trace-$TIMESTAMP + mc admin policy set minio users-$TIMESTAMP user=users-$TIMESTAMP + mc admin policy set minio watch-$TIMESTAMP user=watch-$TIMESTAMP +} + +__init__() { + export TIMESTAMP=$(date "+%s") + echo $TIMESTAMP > portal-ui/tests/constants/timestamp.txt + export GOPATH=/tmp/gopath + export PATH=${PATH}:${GOPATH}/bin + + go install github.com/minio/mc@latest + + add_alias +} + +main() { + create_policies + create_users + assign_policies +} + +( __init__ "$@" && main "$@" ) \ No newline at end of file diff --git a/portal-ui/tests/scripts/permissions.sh b/portal-ui/tests/scripts/permissions.sh new file mode 100644 index 000000000..266f03d63 --- /dev/null +++ b/portal-ui/tests/scripts/permissions.sh @@ -0,0 +1,127 @@ +add_alias() { + for i in $(seq 1 4); do + echo "... attempting to add alias $i" + until (mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin); do + echo "...waiting... for 5secs" && sleep 5 + done + done +} + +create_policies() { + mc admin policy add minio bucketassignpolicy-$TIMESTAMP portal-ui/tests/policies/bucketAssignPolicy.json + mc admin policy add minio bucketread-$TIMESTAMP portal-ui/tests/policies/bucketRead.json + mc admin policy add minio bucketwrite-$TIMESTAMP portal-ui/tests/policies/bucketWrite.json + mc admin policy add minio dashboard-$TIMESTAMP portal-ui/tests/policies/dashboard.json + mc admin policy add minio diagnostics-$TIMESTAMP portal-ui/tests/policies/diagnostics.json + mc admin policy add minio groups-$TIMESTAMP portal-ui/tests/policies/groups.json + mc admin policy add minio heal-$TIMESTAMP portal-ui/tests/policies/heal.json + mc admin policy add minio iampolicies-$TIMESTAMP portal-ui/tests/policies/iamPolicies.json + mc admin policy add minio logs-$TIMESTAMP portal-ui/tests/policies/logs.json + mc admin policy add minio notificationendpoints-$TIMESTAMP portal-ui/tests/policies/notificationEndpoints.json + mc admin policy add minio settings-$TIMESTAMP portal-ui/tests/policies/settings.json + mc admin policy add minio tiers-$TIMESTAMP portal-ui/tests/policies/tiers.json + mc admin policy add minio trace-$TIMESTAMP portal-ui/tests/policies/trace.json + mc admin policy add minio users-$TIMESTAMP portal-ui/tests/policies/users.json + mc admin policy add minio watch-$TIMESTAMP portal-ui/tests/policies/watch.json +} + +create_users() { + mc admin user add minio bucketassignpolicy-$TIMESTAMP bucketassignpolicy + mc admin user add minio bucketread-$TIMESTAMP bucketread + mc admin user add minio bucketwrite-$TIMESTAMP bucketwrite + mc admin user add minio dashboard-$TIMESTAMP dashboard + mc admin user add minio diagnostics-$TIMESTAMP diagnostics + mc admin user add minio groups-$TIMESTAMP groups1234 + mc admin user add minio heal-$TIMESTAMP heal1234 + mc admin user add minio iampolicies-$TIMESTAMP iampolicies + mc admin user add minio logs-$TIMESTAMP logs1234 + mc admin user add minio notificationendpoints-$TIMESTAMP notificationendpoints + mc admin user add minio settings-$TIMESTAMP settings + mc admin user add minio tiers-$TIMESTAMP tiers1234 + mc admin user add minio trace-$TIMESTAMP trace1234 + mc admin user add minio users-$TIMESTAMP users1234 + mc admin user add minio watch-$TIMESTAMP watch1234 +} + +assign_policies() { + mc admin policy set minio bucketassignpolicy-$TIMESTAMP user=bucketassignpolicy-$TIMESTAMP + mc admin policy set minio bucketread-$TIMESTAMP user=bucketread-$TIMESTAMP + mc admin policy set minio bucketwrite-$TIMESTAMP user=bucketwrite-$TIMESTAMP + mc admin policy set minio dashboard-$TIMESTAMP user=dashboard-$TIMESTAMP + mc admin policy set minio diagnostics-$TIMESTAMP user=diagnostics-$TIMESTAMP + mc admin policy set minio groups-$TIMESTAMP user=groups-$TIMESTAMP + mc admin policy set minio heal-$TIMESTAMP user=heal-$TIMESTAMP + mc admin policy set minio iampolicies-$TIMESTAMP user=iampolicies-$TIMESTAMP + mc admin policy set minio logs-$TIMESTAMP user=logs-$TIMESTAMP + mc admin policy set minio notificationendpoints-$TIMESTAMP user=notificationendpoints-$TIMESTAMP + mc admin policy set minio settings-$TIMESTAMP user=settings-$TIMESTAMP + mc admin policy set minio tiers-$TIMESTAMP user=tiers-$TIMESTAMP + mc admin policy set minio trace-$TIMESTAMP user=trace-$TIMESTAMP + mc admin policy set minio users-$TIMESTAMP user=users-$TIMESTAMP + mc admin policy set minio watch-$TIMESTAMP user=watch-$TIMESTAMP +} + +remove_users() { + mc admin user remove minio bucketassignpolicy-$TIMESTAMP + mc admin user remove minio bucketread-$TIMESTAMP + mc admin user remove minio bucketwrite-$TIMESTAMP + mc admin user remove minio dashboard-$TIMESTAMP + mc admin user remove minio diagnostics-$TIMESTAMP + mc admin user remove minio groups-$TIMESTAMP + mc admin user remove minio heal-$TIMESTAMP + mc admin user remove minio iampolicies-$TIMESTAMP + mc admin user remove minio logs-$TIMESTAMP + mc admin user remove minio notificationendpoints-$TIMESTAMP + mc admin user remove minio settings-$TIMESTAMP + mc admin user remove minio tiers-$TIMESTAMP + mc admin user remove minio trace-$TIMESTAMP + mc admin user remove minio users-$TIMESTAMP + mc admin user remove minio watch-$TIMESTAMP +} + +remove_policies() { + mc admin policy remove minio bucketassignpolicy-$TIMESTAMP + mc admin policy remove minio bucketread-$TIMESTAMP + mc admin policy remove minio bucketwrite-$TIMESTAMP + mc admin policy remove minio dashboard-$TIMESTAMP + mc admin policy remove minio diagnostics-$TIMESTAMP + mc admin policy remove minio groups-$TIMESTAMP + mc admin policy remove minio heal-$TIMESTAMP + mc admin policy remove minio iampolicies-$TIMESTAMP + mc admin policy remove minio logs-$TIMESTAMP + mc admin policy remove minio notificationendpoints-$TIMESTAMP + mc admin policy remove minio settings-$TIMESTAMP + mc admin policy remove minio tiers-$TIMESTAMP + mc admin policy remove minio trace-$TIMESTAMP + mc admin policy remove minio users-$TIMESTAMP + mc admin policy remove minio watch-$TIMESTAMP +} + +cleanup() { + remove_users + remove_policies + pkill console + kill -9 `lsof -i:5005 -t` +} + +__init__() { + export TIMESTAMP=$(date "+%s") + echo $TIMESTAMP > portal-ui/tests/constants/timestamp.txt + export GOPATH=/tmp/gopath + export PATH=${PATH}:${GOPATH}/bin + + go install github.com/minio/mc@latest + + add_alias + + create_policies + create_users + assign_policies +} + +main() { + (yarn start &> /dev/null) & (./console server &> /dev/null) & (testcafe "chrome:headless" portal-ui/tests/permissions/ -q --skip-js-errors) + cleanup +} + +( __init__ "$@" && main "$@" ) \ No newline at end of file diff --git a/portal-ui/tests/uploads/test.txt b/portal-ui/tests/uploads/test.txt new file mode 100644 index 000000000..30d74d258 --- /dev/null +++ b/portal-ui/tests/uploads/test.txt @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/portal-ui/tests/utils/constants.ts b/portal-ui/tests/utils/constants.ts new file mode 100644 index 000000000..a86224ff3 --- /dev/null +++ b/portal-ui/tests/utils/constants.ts @@ -0,0 +1,41 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +import { readFileSync } from "fs"; + +const data = readFileSync(__dirname + "/../constants/timestamp.txt", "utf-8"); +const unixTimestamp = data.trim(); + +export const TEST_BUCKET_NAME = "testbucket-" + unixTimestamp; +export const TEST_GROUP_NAME = "testgroup-" + unixTimestamp; +export const TEST_USER_NAME = "testuser-" + unixTimestamp; +export const TEST_PASSWORD = "password"; +export const TEST_IAM_POLICY_NAME = "testpolicy-" + unixTimestamp; +export const TEST_IAM_POLICY = JSON.stringify({ + Version: "2012-10-17", + Statement: [ + { + Action: ["admin:*"], + Effect: "Allow", + Sid: "", + }, + { + Action: ["s3:*"], + Effect: "Allow", + Resource: ["arn:aws:s3:::*"], + Sid: "", + }, + ], +}); diff --git a/portal-ui/tests/utils/elements.ts b/portal-ui/tests/utils/elements.ts new file mode 100644 index 000000000..4b0bc61b6 --- /dev/null +++ b/portal-ui/tests/utils/elements.ts @@ -0,0 +1,245 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as constants from "./constants"; +import { Selector } from "testcafe"; + +//---------------------------------------------------- +// General sidebar element +//---------------------------------------------------- +export const sidebarItem = Selector(".MuiPaper-root").find("ul").child("a"); +export const logoutItem = Selector(".MuiPaper-root").find("ul").child("div"); + +//---------------------------------------------------- +// Specific sidebar elements +//---------------------------------------------------- +export const dashboardElement = sidebarItem.withAttribute("href", "/dashboard"); +export const bucketsElement = sidebarItem.withAttribute("href", "/buckets"); +export const usersElement = sidebarItem.withAttribute("href", "/users"); +export const groupsElement = sidebarItem.withAttribute("href", "/groups"); +export const serviceAcctsElement = sidebarItem.withAttribute( + "href", + "/account" +); +export const iamPoliciesElement = sidebarItem.withAttribute( + "href", + "/policies" +); +export const settingsElement = sidebarItem.withAttribute("href", "/settings"); +export const notificationEndpointsElement = sidebarItem.withAttribute( + "href", + "/notification-endpoints" +); +export const tiersElement = sidebarItem.withAttribute("href", "/tiers"); +export const toolsElement = sidebarItem.withAttribute("href", "/tools"); +export const licenseElement = sidebarItem.withAttribute("href", "/license"); + +//---------------------------------------------------- +// Buttons +//---------------------------------------------------- +export const loginSubmitButton = Selector("form button"); +export const closeAlertButton = Selector( + 'button[class*="ModalError-closeButton"]' +); +export const manageButton = Selector("h1") + .withText(constants.TEST_BUCKET_NAME) + .parent(4) + .find("button:enabled") + .withText("Manage"); +export const browseButton = Selector("h1") + .withText(constants.TEST_BUCKET_NAME) + .parent(4) + .find("button:enabled") + .withText("Browse"); +export const uploadButton = Selector("span") + .withAttribute("aria-label", "Upload file") + .child("button:enabled"); +export const createPolicyButton = Selector("button:enabled").withText("Create Policy"); +export const saveButton = Selector("button:enabled").withText("Save"); +export const deleteButton = Selector("button:enabled").withExactText("Delete"); +export const deleteIconButton = Selector("button:enabled").withAttribute( + "aria-label", + "Delete" +); +export const deleteIconButtonAlt = Selector("button:enabled").withAttribute( + "aria-label", + "delete" +); +export const configureBucketButton = Selector( + 'span[class*="MuiIconButton-root"]' +).withAttribute("aria-label", "Configure Bucket"); +export const addNotifTargetButton = Selector("button:enabled").withText( + "Add Notification Target" +); +export const createTierButton = Selector("button:enabled").withText("Create Tier"); +export const createBucketButton = Selector("button:enabled").withText("Create Bucket"); +export const deleteBucketButton = Selector("button:enabled").withText("Delete Bucket"); +export const createUserButton = Selector("button:enabled").withText("Create User"); +export const createGroupButton = Selector("button:enabled").withText("Create Group"); +export const deleteGroupIconButton = Selector("span") + .withAttribute("aria-label", "Delete Group") + .find("button:enabled"); +export const editMembersButton = Selector("button:enabled").withText("Edit Members"); +export const addAccessRuleButton = + Selector("button:enabled").withText("Add Access Rule"); +export const startDiagnosticButton = + Selector("button:enabled").withText("Start Diagnostic"); +export const startNewDiagnosticButton = Selector("button:enabled").withText( + "Start New Diagnostic" +); +export const downloadButton = Selector("button:enabled").withText("Download"); +export const startButton = Selector("button:enabled").withText("Start"); +export const stopButton = Selector("button:enabled").withText("Stop"); + +//---------------------------------------------------- +// Links +//---------------------------------------------------- +export const logsLink = Selector("a").withText("Logs"); +export const watchLink = Selector("a").withText("Watch"); +export const traceLink = Selector("a").withText("Trace"); +export const healLink = Selector("a").withText("Heal"); +export const diagnosticsLink = Selector("a").withText("Diagnostics"); + +//---------------------------------------------------- +// Switches +//---------------------------------------------------- +export const switchInput = Selector(".MuiSwitch-input"); + +//---------------------------------------------------- +// Inputs +//---------------------------------------------------- +export const bucketNameInput = Selector("#bucket-name"); +export const bucketsPrefixInput = Selector("#prefix"); +export const bucketsAccessInput = Selector( + 'input[class*="MuiSelect-nativeInput"]' +); +export const bucketsAccessReadOnlyInput = Selector( + 'li[class*="MuiMenuItem-root"]' +).withText("Readonly"); +export const bucketsAccessWriteOnlyInput = Selector( + 'li[class*="MuiMenuItem-root"]' +).withText("Writeonly"); +export const bucketsAccessReadWriteInput = Selector( + 'li[class*="MuiMenuItem-root"]' +).withText("Readwrite"); +export const uploadInput = Selector("input").withAttribute("type", "file"); +export const createPolicyName = Selector("#policy-name"); +export const createPolicyTextfield = Selector(".cm-content"); +export const usersAccessKeyInput = Selector("#accesskey-input"); +export const usersSecretKeyInput = Selector("#standard-multiline-static"); +export const groupNameInput = Selector("#group-name"); +export const searchResourceInput = Selector("#search-resource"); +export const filterUserInput = searchResourceInput.withAttribute("placeholder", "Filter Users"); +export const groupUserCheckbox = Selector(".ReactVirtualized__Table__row span") + .withText(constants.TEST_USER_NAME) + .parent(1) + .find(".ReactVirtualized__Grid input") + .withAttribute("type", "checkbox"); + +//---------------------------------------------------- +// Dropdowns and options +//---------------------------------------------------- +export const bucketDropdownOption = Selector("li").withAttribute( + "data-value", + constants.TEST_BUCKET_NAME +); + +//---------------------------------------------------- +// Text +//---------------------------------------------------- +export const bucketAccessText = Selector("h1") + .withText(constants.TEST_BUCKET_NAME) + .parent(1) + .find("p") + .nth(-1); +export const groupStatusText = Selector('span[class*="statusValue-"]'); + +//---------------------------------------------------- +// Tables, table headers and content +//---------------------------------------------------- +export const table = Selector(".ReactVirtualized__Table"); +export const bucketsTableDisabled = Selector( + 'div[class*="TableWrapper-disabled"]' +); +export const createGroupUserTable = Selector( + ".MuiDialog-container .ReactVirtualized__Table" +); + +//---------------------------------------------------- +// Bucket page vertical tabs +//---------------------------------------------------- +export const bucketAccessRulesTab = + Selector(".MuiTab-root").withText("Access Rules"); + +//---------------------------------------------------- +// Settings window +//---------------------------------------------------- +export const settingsWindow = Selector( + 'div[class*="ConfigurationOptions-settingsOptionsContainer"]' +); + +//---------------------------------------------------- +// Settings page vertical tabs +//---------------------------------------------------- +export const settingsRegionTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/region" +); +export const settingsCacheTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/cache" +); +export const settingsCompressionTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/compression" +); +export const settingsApiTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/api" +); +export const settingsHealTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/heal" +); +export const settingsScannerTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/scanner" +); +export const settingsEtcdTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/etcd" +); +export const settingsOpenIdTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/identity_openid" +); +export const settingsLdapTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/identity_ldap" +); +export const settingsLoggerWebhookTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/logger_webhook" +); +export const settingsAuditWebhookTab = Selector(".MuiTab-root").withAttribute( + "href", + "/settings/audit_webhook" +); + +//---------------------------------------------------- +// Log window +//---------------------------------------------------- +export const logWindow = Selector('div[class*="logList"]'); diff --git a/portal-ui/tests/utils/functions.ts b/portal-ui/tests/utils/functions.ts new file mode 100644 index 000000000..9edd9601d --- /dev/null +++ b/portal-ui/tests/utils/functions.ts @@ -0,0 +1,92 @@ +// This file is part of MinIO Console Server +// Copyright (c) 2022 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +import * as roles from "./roles"; +import * as elements from "./elements"; +import * as constants from "./constants"; +import { Selector } from "testcafe"; + +export const setUpBucket = (t) => { + return t + .useRole(roles.admin) + .navigateTo("http://localhost:5005/buckets") + .click(elements.createBucketButton) + .typeText(elements.bucketNameInput, constants.TEST_BUCKET_NAME) + .click(elements.createBucketButton) + .click(elements.logoutItem); +}; + +export const cleanUpBucket = (t) => { + return ( + t + // useRole doesn't work here so we would need to enter the commands manually + .navigateTo("http://localhost:5005/login") + .typeText("#accessKey", "minioadmin") + .typeText("#secretKey", "minioadmin") + .click(elements.loginSubmitButton) + .navigateTo("http://localhost:5005/buckets") + .click(elements.manageButton) + .click(elements.deleteBucketButton) + .click(elements.deleteButton) + .click(elements.logoutItem) + ); +}; + +export const cleanUpBucketAndUploads = (t) => { + return ( + t + // useRole doesn't work here so we would need to enter the commands manually + .navigateTo("http://localhost:5005/login") + .typeText("#accessKey", "minioadmin") + .typeText("#secretKey", "minioadmin") + .click(elements.loginSubmitButton) + .navigateTo("http://localhost:5005/buckets") + .click(elements.browseButton) + .click(elements.deleteIconButtonAlt) + .click(elements.deleteButton) + .click(elements.configureBucketButton) + .click(elements.deleteBucketButton) + .click(elements.deleteButton) + .click(elements.logoutItem) + ); +}; + +export const createUser = (t) => { + return t + .useRole(roles.admin) + .navigateTo("http://localhost:5005/users") + .click(elements.createUserButton) + .typeText(elements.usersAccessKeyInput, constants.TEST_USER_NAME) + .typeText(elements.usersSecretKeyInput, constants.TEST_PASSWORD) + .click(elements.saveButton); +}; + +export const cleanUpUser = (t) => { + const userListItem = Selector(".ReactVirtualized__Table__rowColumn").withText( + constants.TEST_USER_NAME + ); + + const userDeleteIconButton = userListItem + .nextSibling() + .child("button") + .withAttribute("aria-label", "delete"); + + return t + .useRole(roles.admin) + .navigateTo("http://localhost:5005/users") + .click(userDeleteIconButton) + .click(elements.deleteButton); +}; diff --git a/portal-ui/tests/utils/roles.ts b/portal-ui/tests/utils/roles.ts new file mode 100644 index 000000000..3cad39547 --- /dev/null +++ b/portal-ui/tests/utils/roles.ts @@ -0,0 +1,186 @@ +import { readFileSync } from 'fs'; +import { Role, Selector } from "testcafe"; + +const data = readFileSync(__dirname + '/../constants/timestamp.txt', 'utf-8'); +const unixTimestamp = data.trim(); + +const loginUrl = "http://localhost:5005/login"; +// diagnostics/watch/trace need to run in port 9090 (through the server) to work +const loginUrlServer = "http://localhost:9090/login"; +const submitButton = Selector("form button"); + +export const admin = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "minioadmin") + .typeText("#secretKey", "minioadmin") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const bucketAssignPolicy = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "bucketassignpolicy-" + unixTimestamp) + .typeText("#secretKey", "bucketassignpolicy") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const bucketRead = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "bucketread-" + unixTimestamp) + .typeText("#secretKey", "bucketread") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const bucketWrite = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "bucketwrite-" + unixTimestamp) + .typeText("#secretKey", "bucketwrite") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const dashboard = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "dashboard-" + unixTimestamp) + .typeText("#secretKey", "dashboard") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const diagnostics = Role( + loginUrlServer, + async (t) => { + await t + .typeText("#accessKey", "diagnostics-" + unixTimestamp) + .typeText("#secretKey", "diagnostics") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const groups = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "groups-" + unixTimestamp) + .typeText("#secretKey", "groups1234") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const heal = Role( + loginUrlServer, + async (t) => { + await t + .typeText("#accessKey", "heal-" + unixTimestamp) + .typeText("#secretKey", "heal1234") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const iamPolicies = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "iampolicies-" + unixTimestamp) + .typeText("#secretKey", "iampolicies") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const logs = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "logs-" + unixTimestamp) + .typeText("#secretKey", "logs1234") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const notificationEndpoints = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "notificationendpoints-" + unixTimestamp) + .typeText("#secretKey", "notificationendpoints") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const settings = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "settings-" + unixTimestamp) + .typeText("#secretKey", "settings") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const tiers = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "tiers-" + unixTimestamp) + .typeText("#secretKey", "tiers1234") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const trace = Role( + loginUrlServer, + async (t) => { + await t + .typeText("#accessKey", "trace-" + unixTimestamp) + .typeText("#secretKey", "trace1234") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const users = Role( + loginUrl, + async (t) => { + await t + .typeText("#accessKey", "users-" + unixTimestamp) + .typeText("#secretKey", "users1234") + .click(submitButton); + }, + { preserveUrl: true } +); + +export const watch = Role( + loginUrlServer, + async (t) => { + await t + .typeText("#accessKey", "watch-" + unixTimestamp) + .typeText("#secretKey", "watch1234") + .click(submitButton); + }, + { preserveUrl: true } +); diff --git a/portal-ui/yarn.lock b/portal-ui/yarn.lock index 2c90771ce..4bd0290cd 100644 --- a/portal-ui/yarn.lock +++ b/portal-ui/yarn.lock @@ -23,7 +23,28 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.1.0", "@babel/core@^7.12.1", "@babel/core@^7.12.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/core@^7.11.1", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== @@ -53,6 +74,15 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" +"@babel/generator@^7.16.0", "@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.16.7", "@babel/generator@^7.7.2": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" @@ -77,7 +107,7 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== @@ -87,7 +117,7 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.7": +"@babel/helper-create-class-features-plugin@^7.16.0", "@babel/helper-create-class-features-plugin@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz#9c5b34b53a01f2097daf10678d65135c1b9f84ba" integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== @@ -136,7 +166,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.16.7": +"@babel/helper-function-name@^7.16.0", "@babel/helper-function-name@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== @@ -152,7 +182,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.7": +"@babel/helper-hoist-variables@^7.16.0", "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== @@ -173,7 +203,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.7": +"@babel/helper-module-transforms@^7.16.0", "@babel/helper-module-transforms@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== @@ -208,6 +238,15 @@ "@babel/helper-wrap-function" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + "@babel/helper-replace-supers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" @@ -233,7 +272,7 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.7": +"@babel/helper-split-export-declaration@^7.16.0", "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== @@ -245,7 +284,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-option@^7.16.7": +"@babel/helper-validator-option@^7.14.5", "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== @@ -260,7 +299,17 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helpers@^7.16.7": +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.16.0", "@babel/helpers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== @@ -283,6 +332,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== +"@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.8.tgz#61c243a3875f7d0b0962b0543a33ece6ff2f1f17" + integrity sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" @@ -299,6 +353,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.7" +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-async-generator-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.7.tgz#739adc1212a9e4892de440cd7dfffb06172df78d" @@ -308,7 +371,7 @@ "@babel/helper-remap-async-to-generator" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.7": +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== @@ -325,6 +388,15 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" +"@babel/plugin-proposal-decorators@^7.12.1": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.4.tgz#9b35ce0716425a93b978e79099e5f7ba217c1364" + integrity sha512-RESBNX16eNqnBeEVR5sCJpnW0mHiNLNNvGA8PrRuK/4ZJ4TO+6bHleRUuGQYDERVySOKtOhSya/C4MIhwAMAgg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-decorators" "^7.16.0" + "@babel/plugin-proposal-decorators@^7.16.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.7.tgz#922907d2e3e327f5b07d2246bcfc0bd438f360d2" @@ -382,7 +454,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.16.7": +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== @@ -410,7 +482,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.16.7": +"@babel/plugin-proposal-private-methods@^7.14.5", "@babel/plugin-proposal-private-methods@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" + integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-private-methods@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz#e418e3aa6f86edd6d327ce84eff188e479f571e0" integrity sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw== @@ -464,6 +544,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-decorators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz#eb8d811cdd1060f6ac3c00956bf3f6335505a32f" + integrity sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-decorators@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.7.tgz#f66a0199f16de7c1ef5192160ccf5d069739e3d3" @@ -485,14 +572,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" - integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== +"@babel/plugin-syntax-flow@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.0.tgz#07427021d093ed77019408221beaf0272bbcfaec" + integrity sha512-dH91yCo0RyqfzWgoM5Ji9ir8fQ+uFbt9KHM3d2x4jZOuHS6wNA+CRmRUP/BWCsHG2bjc7A2Way6AvH1eQk0wig== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -583,6 +670,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-transform-async-to-generator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.7.tgz#646e1262ac341b587ff5449844d4492dbb10ac4b" @@ -649,7 +745,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== @@ -658,12 +754,19 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" - integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.0.tgz#edd968dc2041c1b69e451a262e948d6654a79dc2" + integrity sha512-vs/F5roOaO/+WxKfp9PkvLsAyj0G+Q0zbFimHm9X2KDgabN2XmNFoAafmeGEYspUlIF9+MvVmyek9UyHiqeG/w== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-flow" "^7.16.0" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" + integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-for-of@^7.16.7": version "7.16.7" @@ -783,14 +886,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.16.7": +"@babel/plugin-transform-react-jsx-development@^7.16.0", "@babel/plugin-transform-react-jsx-development@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== dependencies: "@babel/plugin-transform-react-jsx" "^7.16.7" -"@babel/plugin-transform-react-jsx@^7.16.7": +"@babel/plugin-transform-react-jsx@^7.16.0", "@babel/plugin-transform-react-jsx@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag== @@ -801,7 +904,7 @@ "@babel/plugin-syntax-jsx" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": +"@babel/plugin-transform-react-pure-annotations@^7.16.0", "@babel/plugin-transform-react-pure-annotations@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== @@ -823,6 +926,18 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-runtime@^7.12.1": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz#f9ba3c7034d429c581e1bd41b4952f3db3c2c7e8" + integrity sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A== + dependencies: + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-regenerator "^0.3.0" + semver "^6.3.0" + "@babel/plugin-transform-runtime@^7.16.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.7.tgz#1da184cb83a2287a01956c10c60e66dd503c18aa" @@ -975,6 +1090,15 @@ core-js-compat "^3.19.1" semver "^6.3.0" +"@babel/preset-flow@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.0.tgz#9f1f6e72714d79460d48058cb5658fc87da7150b" + integrity sha512-e5NE1EoPMpoHFkyFkMSj2h9tu7OolARcUHki8mnBv4NiFK9so+UrhbvT9mV99tMJOUEx8BOj67T6dXvGcTeYeQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-flow-strip-types" "^7.16.0" + "@babel/preset-modules@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" @@ -986,7 +1110,19 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": +"@babel/preset-react@^7.12.1", "@babel/preset-react@^7.12.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.0.tgz#f71d3e8dff5218478011df037fad52660ee6d82a" + integrity sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-react-display-name" "^7.16.0" + "@babel/plugin-transform-react-jsx" "^7.16.0" + "@babel/plugin-transform-react-jsx-development" "^7.16.0" + "@babel/plugin-transform-react-pure-annotations" "^7.16.0" + +"@babel/preset-react@^7.16.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== @@ -1015,14 +1151,28 @@ core-js-pure "^3.19.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.7", "@babel/template@^7.3.3": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" + integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.16.0", "@babel/template@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== @@ -1031,19 +1181,43 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" - integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== +"@babel/template@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.4.5": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.16.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.7.2": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.8.tgz#bab2f2b09a5fe8a8d9cad22cbfe3ba1d126fef9c" + integrity sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" + "@babel/generator" "^7.16.8" "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-function-name" "^7.16.7" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/parser" "^7.16.8" + "@babel/types" "^7.16.8" debug "^4.1.0" globals "^11.1.0" @@ -1055,6 +1229,14 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1722,6 +1904,11 @@ dependencies: "@lezer/common" "^0.15.0" +"@miherlosev/esm@3.2.26": + version "3.2.26" + resolved "https://registry.yarnpkg.com/@miherlosev/esm/-/esm-3.2.26.tgz#a516b35d8b8b4eac29598f1c2c23e30a4d260200" + integrity sha512-TaW4jTGVE1/ln2VGFChnheMh589QCAZy1MVnLvjjSzZ4pEAa4WYAWPwFkDVZbSdPQdLfZy7LuTyZjWRkhX9/Gg== + "@mui/base@5.0.0-alpha.63": version "5.0.0-alpha.63" resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.63.tgz#8646b9b91dae128a474feadac74748c532ffef2c" @@ -2193,10 +2380,15 @@ resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-2.1.1.tgz#743fdc821c81f86537cbfece07093ac39b4bc342" integrity sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg== +"@types/error-stack-parser@^1.3.18": + version "1.3.18" + resolved "https://registry.yarnpkg.com/@types/error-stack-parser/-/error-stack-parser-1.3.18.tgz#e01c9f8c85ca83b610320c62258b0c9026ade0f7" + integrity sha1-4ByfjIXKg7YQMgxiJYsMkCat4Pc= + "@types/eslint-scope@^3.7.0": - version "3.7.2" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.2.tgz#11e96a868c67acf65bf6f11d10bb89ea71d5e473" - integrity sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ== + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== dependencies: "@types/eslint" "*" "@types/estree" "*" @@ -2227,10 +2419,15 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.27" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.27.tgz#7a776191e47295d2a05962ecbb3a4ce97e38b401" - integrity sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA== + version "4.17.28" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" + integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2246,6 +2443,14 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -2327,11 +2532,21 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== +"@types/lodash@^4.14.72": + version "4.14.177" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578" + integrity sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw== + "@types/mime@^1": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + "@types/node@*": version "17.0.8" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" @@ -2342,6 +2557,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.8.tgz#dab418655af39ce2fa99286a0bed21ef8072ac9d" integrity sha512-XLla8N+iyfjvsa0KKV+BP/iGSoTmwxsu5Ci5sM33z9TjohF72DEz95iNvD6pPmemvbQgxAv/909G73gUn8QR7w== +"@types/node@^12.20.10": + version "12.20.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" + integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -2825,6 +3045,13 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-hammerhead@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/acorn-hammerhead/-/acorn-hammerhead-0.5.0.tgz#94ca6ecef5c6e65a0f813580a9b130fd2775300c" + integrity sha512-TI9TFfJBfduhcM2GggayNhdYvdJ3UgS/Bu3sB7FB2AUmNCmCJ+TSOT6GXu+bodG5/xL74D5zE4XRaqyjgjsYVQ== + dependencies: + "@types/estree" "0.0.46" + acorn-import-assertions@^1.7.6: version "1.8.0" resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" @@ -2931,6 +3158,11 @@ alphanum-sort@^1.0.2: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + anser@^1.4.1: version "1.4.10" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" @@ -2941,6 +3173,11 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-escapes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + integrity sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs= + ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2951,9 +3188,8 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^4.0.0, ansi-regex@^5.0.1, ansi-regex@^6.0.1: +ansi-regex@^2.0.0, ansi-regex@^4.0.0, ansi-regex@^5.0.1, ansi-regex@^6.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -3018,6 +3254,11 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -3039,11 +3280,23 @@ array-includes@^3.1.3, array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + array.prototype.flat@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" @@ -3067,11 +3320,41 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +asar@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/asar/-/asar-2.1.0.tgz#97c6a570408c4e38a18d4a3fb748a621b5a7844e" + integrity sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^2.20.0" + cuint "^0.2.2" + glob "^7.1.3" + minimatch "^3.0.4" + mkdirp "^0.5.1" + tmp-promise "^1.0.5" + optionalDependencies: + "@types/glob" "^7.1.1" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +async-exit-hook@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-1.1.2.tgz#8095d75e488c29acee0551fe87252169d789cfba" + integrity sha1-gJXXXkiMKazuBVH+hyUhadeJz7o= + +async@0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.6.tgz#ad3f373d9249ae324881565582bc90e152abbd68" + integrity sha1-rT83PZJJrjJIgVZVgryQ4VKrvWg= + async@0.9.x: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" @@ -3094,6 +3377,11 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + attr-accept@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" @@ -3191,6 +3479,17 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" +babel-plugin-module-resolver@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2" + integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA== + dependencies: + find-babel-config "^1.2.0" + glob "^7.1.6" + pkg-up "^3.1.0" + reselect "^4.0.0" + resolve "^1.13.1" + babel-plugin-named-asset-import@^0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" @@ -3235,6 +3534,11 @@ babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" @@ -3293,6 +3597,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -3313,12 +3622,17 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bin-v8-flags-filter@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/bin-v8-flags-filter/-/bin-v8-flags-filter-1.2.0.tgz#023fc4ee22999b2b1f6dd1b7253621366841537e" + integrity sha512-g8aeYkY7GhyyKRvQMBsJQZjhm2iCX3dKYvfrMpwVR8IxmUGrkpCBFoKbB9Rh0o3sTLCjU/1tFpZ4C7j3f+D+3g== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bluebird@^3.5.5: +bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3356,6 +3670,16 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= +bowser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.0.tgz#37fc387b616cb6aef370dab4d6bd402b74c5c54d" + integrity sha1-N/w4e2Fstq7zcNq01r1AK3TFxU0= + +bowser@^2.8.1: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3371,6 +3695,13 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +brotli@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.2.tgz#525a9cad4fcba96475d7d388f6aecb13eed52f46" + integrity sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y= + dependencies: + base64-js "^1.1.2" + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" @@ -3434,6 +3765,25 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +callsite-record@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/callsite-record/-/callsite-record-4.1.3.tgz#3041d2a1c72aff86b00b151e47d25566520c4207" + integrity sha512-otAcPmu8TiHZ38cIL3NjQa1nGoSQRRe8WDDUgj5ZUwJWn1wzOYBwVSJbpVyzZ0sesQeKlYsPu9DG70fhh6AK9g== + dependencies: + "@types/error-stack-parser" "^1.3.18" + "@types/lodash" "^4.14.72" + callsite "^1.0.0" + chalk "^2.4.0" + error-stack-parser "^1.3.3" + highlight-es "^1.0.0" + lodash "4.6.1 || ^4.16.1" + pinkie-promise "^2.0.0" + +callsite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3487,7 +3837,19 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: +chai@^4.1.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3537,6 +3899,11 @@ chartjs-color@^2.1.0: chartjs-color-string "^0.6.0" color-convert "^1.9.3" +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + check-types@^11.1.1: version "11.1.2" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" @@ -3557,11 +3924,29 @@ chokidar@^3.4.2, chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" +chrome-remote-interface@^0.30.0: + version "0.30.1" + resolved "https://registry.yarnpkg.com/chrome-remote-interface/-/chrome-remote-interface-0.30.1.tgz#8b30a0a36274137b31536f6436ca52f32ae5cbba" + integrity sha512-emKaqCjYAgrT35nm6PvTUKJ++2NX9qAmrcNRPRGyryG9Kc7wlkvO0bmvEdNMrr8Bih2e149WctJZFzUiM1UNwg== + dependencies: + commander "2.11.x" + ws "^7.2.0" + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + ci-info@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" @@ -3617,11 +4002,21 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + codemirror@^5.52.2: version "5.65.0" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.0.tgz#50344359393579f526ca53797e510ff75477117f" integrity sha512-gWEnHKEcz1Hyz7fsQWpK7P0sPI2/kSkRX2tc7DFA6TmZuDN75x/1ejnH/Pn8adYKrLEA1V2ww6L00GudHZbSKw== +coffeescript@^2.3.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.6.1.tgz#f9e5d4930e1b8a1c5cfba7f95eebd18694ce58fd" + integrity sha512-GG5nkF93qII8HmHqnnibkgpp/SV7PSnSPiWsbinwya7nNOe95aE/x2xrKZJFks8Qpko3TNrC+/LahaKgrz5YCg== + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3668,6 +4063,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@2.11.x: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3678,7 +4078,7 @@ commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^8.3.0: +commander@^8.0.0, commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -3834,7 +4234,7 @@ crelt@^1.0.5: resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.5.tgz#57c0d52af8c859e354bace1883eb2e1eb182bb94" integrity sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA== -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3843,6 +4243,11 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-md5@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-md5/-/crypto-md5-1.0.0.tgz#ccc8da750c753c7edcbabc542967472a384e86bb" + integrity sha1-zMjadQx1PH7curxUKWdHKjhOhrs= + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -3979,6 +4384,16 @@ css-what@^5.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== +css@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz#f861f4ba61e79bedc962aa548e5780fd95cbc6be" + integrity sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ== + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.5.1" + urix "^0.1.0" + cssdb@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-5.1.0.tgz#ec728d5f5c0811debd0820cbebda505d43003400" @@ -4067,6 +4482,11 @@ csstype@^3.0.10, csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + d3-array@2, d3-array@^2.3.0: version "2.12.1" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" @@ -4157,13 +4577,20 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debug@^3.1.1, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -4181,11 +4608,33 @@ decimal.js@^10.2.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.4.0.tgz#87defd040bd4c1595d963282ec57f3c2a8525642" + integrity sha1-h979BAvUwVldljKC7FfzwqhSVkI= + +dedent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.6.0.tgz#0e6da8f0ce52838ef5cec5c8f9396b0c1b64a3cb" + integrity sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s= + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -4232,6 +4681,32 @@ defined@^1.0.0: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + del@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" @@ -4288,6 +4763,11 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" +device-specs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/device-specs/-/device-specs-1.0.0.tgz#47b54577b9b159118bbb0a175177d0aa9c50a9c9" + integrity sha512-fYXbFSeilT7bnKWFi4OERSPHdtaEoDGn4aUhV5Nly6/I+Tp6JZ/6Icmd7LVIF5euyodGpxz2e/bfUmDnIdSIDw== + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -4303,6 +4783,11 @@ diff-sequences@^27.4.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== +diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4470,9 +4955,19 @@ ejs@^3.1.6: jake "^10.6.1" electron-to-chromium@^1.4.17: - version "1.4.38" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.38.tgz#10ea58d73d36b13e78d5024f3b74a352d3958d01" - integrity sha512-WhHt3sZazKj0KK/UpgsbGQnUUoFeAHVishzHFExMxagpZgjiGYSC9S0ZlbhCfSH2L2i+2A1yyqOIliTctMx7KQ== + version "1.4.42" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.42.tgz#fe3ee7c71f0b5302da12e730cd9cd395609625df" + integrity sha512-JJLT8bjdswJzk8sNRnQjee0MGtO4zTn1t7eWwYPr8gPTadQgNRR/wFRKLGD6HZVZby39yHERkvuCVKNm10r7Dg== + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +emittery@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" + integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== emittery@^0.8.1: version "0.8.1" @@ -4499,6 +4994,21 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +endpoint-utils@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/endpoint-utils/-/endpoint-utils-1.0.2.tgz#0808c3369a727cd7967a39ff34ebc926b88146a8" + integrity sha1-CAjDNppyfNeWejn/NOvJJriBRqg= + dependencies: + ip "^1.1.3" + pinkie-promise "^1.0.0" + enhanced-resolve@^5.8.3: version "5.8.3" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0" @@ -4526,6 +5036,13 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +error-stack-parser@^1.3.3, error-stack-parser@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" + integrity sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI= + dependencies: + stackframe "^0.3.1" + error-stack-parser@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" @@ -4849,6 +5366,13 @@ eslint@^8.3.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +esotope-hammerhead@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/esotope-hammerhead/-/esotope-hammerhead-0.6.1.tgz#3feca697baede6cc89ce387f1e0bfa246d6e256d" + integrity sha512-RG4orJ1xy+zD6fTEKuDYaqCuL1ymYa1/Bp+j9c7b/u7B8yI6+Qgg8o4lT1EDAOG9eBzBtwtTWR0chqt3hr0hZw== + dependencies: + "@types/estree" "0.0.46" + espree@^9.2.0, espree@^9.3.0: version "9.3.0" resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" @@ -4912,6 +5436,37 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +execa@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + 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" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + 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" + execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -4995,7 +5550,18 @@ fast-equals@^2.0.0: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-2.0.4.tgz#3add9410585e2d7364c2deeb6a707beadb24b927" integrity sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w== -fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.0.3: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@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" + +fast-glob@^3.1.1, fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.10" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.10.tgz#2734f83baa7f43b7fd41e13bc34438f4ffe284ee" integrity sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A== @@ -5096,6 +5662,14 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-babel-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" @@ -5260,6 +5834,11 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -5279,6 +5858,18 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -5311,7 +5902,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5359,7 +5950,21 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.0.4: +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.1: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5371,11 +5976,46 @@ globby@^11.0.1, globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +globby@^11.0.4: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +graceful-fs@^4.2.6: version "4.2.9" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +graphlib@^2.1.5: + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -5432,6 +6072,15 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +highlight-es@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/highlight-es/-/highlight-es-1.0.3.tgz#12abc300a27e686f6f18010134e3a5c6d2fe6930" + integrity sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg== + dependencies: + chalk "^2.4.0" + is-es2016-keyword "^1.0.0" + js-tokens "^3.0.0" + history@^4.10.1, history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -5517,6 +6166,11 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -5585,11 +6239,21 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +humanize-duration@^3.25.0: + version "3.27.1" + resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.27.1.tgz#2cd4ea4b03bd92184aee6d90d77a8f3d7628df69" + integrity sha512-jCVkMl+EaM80rrMrAPl96SGG4NRac53UyI1o/yAzebDntEY6K6/Fj2HOjdPg8omTqIe5Y0wPBai2q5xXrIbarA== + hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" @@ -5602,6 +6266,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.1.tgz#b2425d3c7b18f7219f2ca663d103bddb91718d64" + integrity sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q== + dependencies: + safer-buffer ">= 2.1.2 < 3" + iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -5631,7 +6302,12 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.8, ignore@^5.2.0: +ignore@^5.1.1, ignore@^5.1.8: + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== + +ignore@^5.1.4, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -5649,6 +6325,11 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" + integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== + import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" @@ -5662,6 +6343,15 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-1.2.2.tgz#db99bcc583eb6abbb1e48dcbb1999a986041cb6b" + integrity sha1-25m8xYPrarux5I3LsZmamGBBy2s= + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + repeating "^1.1.0" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -5704,7 +6394,7 @@ internmap@^1.0.0: resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== -ip@^1.1.0: +ip@^1.1.0, ip@^1.1.3: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -5759,10 +6449,17 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-core-module@^2.2.0, is-core-module@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -5778,11 +6475,33 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-es2016-keyword@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz#f6e54e110c5e4f8d265e69d2ed0eaf8cf5f47718" + integrity sha1-9uVOEQxeT40mXmnS7Q6vjPX0dxg= + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -5793,6 +6512,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -5805,6 +6531,11 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= +is-jquery-obj@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-jquery-obj/-/is-jquery-obj-0.1.1.tgz#e8d9cc9737b1ab0733b50303e33a38ed7cc2f60b" + integrity sha512-18toSebUVF7y717dgw/Dzn6djOCqrkiDp3MhB8P6TdKyCVkbD1ZwE7Uz8Hwx6hUPTvKjbyYH9ncXT4ts4qLaSA== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -5832,12 +6563,31 @@ is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-inside@^3.0.2: +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^3.0.1, is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -5899,6 +6649,11 @@ is-typedarray@^1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + is-weakref@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -6421,6 +7176,11 @@ jest@^27.4.3: import-local "^3.0.2" jest-cli "^27.4.7" +js-tokens@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6514,6 +7274,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6521,7 +7286,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.0: +json5@^2.1.0, json5@^2.1.2, json5@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== @@ -6678,6 +7443,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linux-platform-info@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/linux-platform-info/-/linux-platform-info-0.0.3.tgz#2dae324385e66e3d755bec83f86c7beea61ceb83" + integrity sha1-La4yQ4Xmbj11W+yD+Gx77qYc64M= + dependencies: + os-family "^1.0.0" + loader-runner@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" @@ -6773,11 +7545,21 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +"lodash@4.6.1 || ^4.16.1", lodash@^4.14.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-update-async-hook@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/log-update-async-hook/-/log-update-async-hook-2.0.2.tgz#6eba89dbe67fa12d0b20ac47df7942947af1fcd1" + integrity sha512-HQwkKFTZeUOrDi1Duf2CSUa/pSpcaCHKLdx3D/Z16DsipzByOBffcg5y0JZA1q0n80dYgLXe2hFM9JGNgBsTDw== + dependencies: + ansi-escapes "^2.0.0" + async-exit-hook "^1.1.2" + onetime "^2.0.1" + wrap-ansi "^2.1.0" + loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6792,6 +7574,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.3.tgz#51ccd0b4fc0c843587d7a5709ce4d3b7629bedc5" + integrity sha1-UczQtPwMhDWH16VwnOTTt2Kb7cU= + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -6820,6 +7607,13 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +match-url-wildcard@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/match-url-wildcard/-/match-url-wildcard-0.0.4.tgz#c8533da7ec0901eddf01fc0893effa68d4e727d6" + integrity sha512-R1XhQaamUZPWLOPtp4ig5j+3jctN+skhgRmEQTUamMzmNtRG69QEirQs0NZKLtHMR7tzWpmtnS4Eqv65DcgXUA== + dependencies: + escape-string-regexp "^1.0.5" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -6852,12 +7646,19 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -6875,7 +7676,7 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.51.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.41.0: version "1.51.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== @@ -6893,9 +7694,19 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.6: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +mime@~1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-fn@^2.1.0: version "2.1.0" @@ -6936,19 +7747,24 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -moment@^2.10.2, moment@^2.29.1: +moment-duration-format-commonjs@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/moment-duration-format-commonjs/-/moment-duration-format-commonjs-1.0.1.tgz#ca8776466dba736a30cb7cda4e07026b5aec8cf1" + integrity sha512-KhKZRH21/+ihNRWrmdNFOyBptFi7nAWZFeFsRRpXkzgk/Yublb4fxyP0jU6EY1VDxUL/VUPdCmm/wAnpbfXdfw== + +moment@^2.10.2, moment@^2.10.3, moment@^2.14.1, moment@^2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== @@ -6981,7 +7797,22 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -nanoid@^3.1.30: +mustache@^2.1.1, mustache@^2.1.2, mustache@^2.2.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" + integrity sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ== + +nanoid@^1.0.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-1.3.4.tgz#ad89f62c9d1f4fd69710d4a90953d2893d2d31f4" + integrity sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ== + +nanoid@^2.1.3: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + +nanoid@^3.1.12, nanoid@^3.1.30: version "3.1.30" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== @@ -7049,7 +7880,7 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-run-path@^4.0.1: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -7063,12 +7894,17 @@ nth-check@^1.0.2, nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -7167,14 +8003,21 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^5.1.2: +onetime@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -7214,6 +8057,21 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +os-family@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/os-family/-/os-family-1.1.0.tgz#8a89cb617dd1631b8ef9506be830144f626c214e" + integrity sha512-E3Orl5pvDJXnVmpaAA2TeNNpNhTMl4o5HghuWhOivBjEiTnJSrMYSa5uZMek1lBEvu8kKEsa2YgVcGFVDqX/9w== + +os-tmpdir@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -7263,6 +8121,18 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -7313,11 +8183,21 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse5@2.2.3, parse5@^2.1.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-2.2.3.tgz#0c4fc41c1000c5e6b93d48b03f8083837834e9f6" + integrity sha1-DE/EHBAAxea5PUiwP4CDg3g06fY= + parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ= + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -7346,6 +8226,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -7373,6 +8258,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -7384,9 +8274,43 @@ picocolors@^1.0.0: integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-1.0.0.tgz#d1da67f5482563bb7cf57f286ae2822ecfbf3670" + integrity sha1-0dpn9UglY7t89X8oauKCLs+/NnA= + dependencies: + pinkie "^1.0.0" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@2.0.4, pinkie@^2.0.0, pinkie@^2.0.1, pinkie@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pinkie@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-1.0.0.tgz#5a47f28ba1015d0201bda7bf0f358e47bec8c7e4" + integrity sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q= pirates@^4.0.4: version "4.0.4" @@ -7407,6 +8331,11 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +pngjs@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + portfinder@^1.0.28: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" @@ -7970,6 +8899,11 @@ pretty-format@^27.4.6: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -7992,6 +8926,13 @@ promise@^8.1.0: dependencies: asap "~2.0.6" +promisify-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promisify-event/-/promisify-event-1.0.0.tgz#bd7523ea06b70162f370979016b53a686c60e90f" + integrity sha1-vXUj6ga3AWLzcJeQFrU6aGxg6Q8= + dependencies: + pinkie-promise "^2.0.0" + prompts@^2.0.1, prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -8022,6 +8963,19 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -8032,6 +8986,11 @@ q@^1.1.2: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qrcode-terminal@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.10.0.tgz#a76a48e2610a18f97fa3a2bd532b682acff86c53" + integrity sha1-p2pI4mEKGPl/o6K9UytoKs/4bFM= + qs@6.9.6: version "6.9.6" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" @@ -8414,6 +9373,13 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" +read-file-relative@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/read-file-relative/-/read-file-relative-1.2.0.tgz#98f7d96eaa21d2b4c7a2febd63d2fc8cf35e9f9b" + integrity sha1-mPfZbqoh0rTHov69Y9L8jPNen5s= + dependencies: + callsite "^1.0.0" + readable-stream@^2.0.1: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -8579,6 +9545,18 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" +repeating@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" + integrity sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw= + dependencies: + is-finite "^1.0.0" + +replicator@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/replicator/-/replicator-1.0.5.tgz#f1e56df7e276a62afe80c2248b8ac03896f4708f" + integrity sha512-saxS4y7NFkLMa92BR4bPHR41GD+f/qoDAwD2xZmN+MpDXgibkxwLO2qk7dCHYtskSkd/bWS8Jy6kC5MZUkg1tw== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -8594,11 +9572,23 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +reselect@^4.0.0: + version "4.1.5" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" + integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== + resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== +resolve-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f" + integrity sha1-Tq7qQe0EDRcCRX32SkKysH0kb58= + dependencies: + resolve-from "^2.0.0" + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -8606,6 +9596,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -8632,12 +9627,25 @@ resolve-url-loader@^4.0.0: postcss "^7.0.35" source-map "0.6.1" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + resolve.exports@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: +resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resolve@^1.19.0: version "1.21.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== @@ -8669,6 +9677,13 @@ rifm@^0.12.1: resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.12.1.tgz#8fa77f45b7f1cda2a0068787ac821f0593967ac4" integrity sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg== +rimraf@^2.2.8, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8715,6 +9730,13 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sanitize-filename@^1.6.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + sanitize.css@*: version "13.0.0" resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" @@ -8797,6 +9819,11 @@ selfsigned@^1.10.11: dependencies: node-forge "^1.2.0" +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" @@ -8964,7 +9991,18 @@ source-map-loader@^3.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.1" -source-map-support@^0.5.6, source-map-support@~0.5.20: +source-map-resolve@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + 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" + +source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -8982,6 +10020,13 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.1.38: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= + dependencies: + amdefine ">=0.0.4" + source-map@^0.5.0, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -9044,6 +10089,11 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +stackframe@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" + integrity sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ= + stackframe@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" @@ -9075,6 +10125,15 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -9137,6 +10196,13 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -9151,6 +10217,13 @@ strip-ansi@^7.0.0, strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -9396,6 +10469,229 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +testcafe-browser-tools@2.0.16: + version "2.0.16" + resolved "https://registry.yarnpkg.com/testcafe-browser-tools/-/testcafe-browser-tools-2.0.16.tgz#8a82ea2f9560d72015c3c488bb83f6678016273f" + integrity sha512-JljbS0FboABksIMEH1L7P4ZdI82AQ8saWb/7WsxkDCOtDuHID5ZSEb/w9tqLN1+4BQaCgS5veN3lWUnfb0saEA== + dependencies: + array-find "^1.0.0" + debug "^4.3.1" + dedent "^0.7.0" + del "^5.1.0" + execa "^3.3.0" + graceful-fs "^4.1.11" + linux-platform-info "^0.0.3" + lodash "^4.17.15" + mkdirp "^0.5.1" + mustache "^2.1.2" + nanoid "^2.1.3" + os-family "^1.0.0" + pify "^2.3.0" + pinkie "^2.0.1" + read-file-relative "^1.2.0" + which-promise "^1.0.0" + +testcafe-hammerhead@24.5.7: + version "24.5.7" + resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-24.5.7.tgz#8d4efb45ee7543841c88452de17cd5929418bff0" + integrity sha512-4pY6GQQaCZAlOolWB2vaYZ/MIpgtmOrZeh4BVbENkbh6DDiPeOxvC0K6yZS5JfINRau5S9mzuNkm2FS7G0urSA== + dependencies: + acorn-hammerhead "0.5.0" + asar "^2.0.1" + bowser "1.6.0" + brotli "^1.3.1" + crypto-md5 "^1.0.0" + css "2.2.3" + debug "4.3.1" + esotope-hammerhead "0.6.1" + http-cache-semantics "^4.1.0" + iconv-lite "0.5.1" + lodash "^4.17.20" + lru-cache "2.6.3" + match-url-wildcard "0.0.4" + merge-stream "^1.0.1" + mime "~1.4.1" + mustache "^2.1.1" + nanoid "^3.1.12" + os-family "^1.0.0" + parse5 "2.2.3" + pinkie "2.0.4" + read-file-relative "^1.2.0" + semver "5.5.0" + tough-cookie "2.3.3" + tunnel-agent "0.6.0" + webauth "^1.1.0" + +testcafe-hammerhead@>=19.4.0: + version "24.5.9" + resolved "https://registry.yarnpkg.com/testcafe-hammerhead/-/testcafe-hammerhead-24.5.9.tgz#e8f1cd79c2b56d378722197df44dad6b5a5127a9" + integrity sha512-MESj4PhjiYAjgxmQMvszUbKLHgcZFhXNGIJY4G5Jrdn9/gf3ah3xfWQAdbQ86TVXy0z4ZNNQdU3TATdIBfIsQw== + dependencies: + acorn-hammerhead "0.5.0" + asar "^2.0.1" + bowser "1.6.0" + brotli "^1.3.1" + crypto-md5 "^1.0.0" + css "2.2.3" + debug "4.3.1" + esotope-hammerhead "0.6.1" + http-cache-semantics "^4.1.0" + iconv-lite "0.5.1" + lodash "^4.17.20" + lru-cache "2.6.3" + match-url-wildcard "0.0.4" + merge-stream "^1.0.1" + mime "~1.4.1" + mustache "^2.1.1" + nanoid "^3.1.12" + os-family "^1.0.0" + parse5 "2.2.3" + pinkie "2.0.4" + read-file-relative "^1.2.0" + semver "5.5.0" + tough-cookie "2.3.3" + tunnel-agent "0.6.0" + webauth "^1.1.0" + +testcafe-legacy-api@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/testcafe-legacy-api/-/testcafe-legacy-api-5.1.2.tgz#a030719a43684f03fea723b4bea2e0b5fead2dde" + integrity sha512-vc9A4rFUdijlBFnNOVMk0hFfxnrAmtA7FMz1P/LtvNyui5JfkLmbyIQcJbxR2rjTINp0owZ2c+xQvYms/us7Fw== + dependencies: + async "0.2.6" + dedent "^0.6.0" + highlight-es "^1.0.0" + is-jquery-obj "^0.1.0" + lodash "^4.14.0" + moment "^2.14.1" + mustache "^2.2.1" + os-family "^1.0.0" + parse5 "^2.1.5" + pify "^2.3.0" + pinkie "^2.0.1" + read-file-relative "^1.2.0" + strip-bom "^2.0.0" + testcafe-hammerhead ">=19.4.0" + +testcafe-reporter-json@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-json/-/testcafe-reporter-json-2.2.0.tgz#bb061e054489abdb62add745dd979896b618ea91" + integrity sha512-wfpNaZgGP2WoqdmnIXOyxcpwSzdH1HvzXSN397lJkXOrQrwhuGUThPDvyzPnZqxZSzXdDUvIPJm55tCMWbfymQ== + +testcafe-reporter-list@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-list/-/testcafe-reporter-list-2.1.0.tgz#9fa89f71b97d3dfe64b4302d5e227dee69aec6b9" + integrity sha1-n6ifcbl9Pf5ktDAtXiJ97mmuxrk= + +testcafe-reporter-minimal@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-minimal/-/testcafe-reporter-minimal-2.1.0.tgz#676f03547634143c6eaf3ab52868273a4bebf421" + integrity sha1-Z28DVHY0FDxurzq1KGgnOkvr9CE= + +testcafe-reporter-spec@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/testcafe-reporter-spec/-/testcafe-reporter-spec-2.1.1.tgz#8156fced0f5132486559ad560bc80676469275ec" + integrity sha1-gVb87Q9RMkhlWa1WC8gGdkaSdew= + +testcafe-reporter-xunit@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/testcafe-reporter-xunit/-/testcafe-reporter-xunit-2.1.0.tgz#e6d66c572ce15af266706af0fd610b2a841dd443" + integrity sha1-5tZsVyzhWvJmcGrw/WELKoQd1EM= + +testcafe@^1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/testcafe/-/testcafe-1.17.1.tgz#1f29ecaaba4a4eaf3b4b662f6f21f8b5614a6615" + integrity sha512-G+IqL28PE9wzNKcLjLCjX3z3/KXpzNs0FNC63Y7dXcXx23qlx+yz+Abyh91CIzeiwtXDZX+xMXDYYLtPQLfhlQ== + dependencies: + "@babel/core" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-decorators" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-runtime" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-flow" "^7.12.1" + "@babel/preset-react" "^7.12.1" + "@babel/runtime" "^7.12.5" + "@miherlosev/esm" "3.2.26" + "@types/node" "^12.20.10" + async-exit-hook "^1.1.2" + babel-plugin-module-resolver "^4.0.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + bin-v8-flags-filter "^1.1.2" + bowser "^2.8.1" + callsite "^1.0.0" + callsite-record "^4.0.0" + chai "^4.1.2" + chalk "^2.3.0" + chrome-remote-interface "^0.30.0" + coffeescript "^2.3.1" + commander "^8.0.0" + debug "^4.3.1" + dedent "^0.4.0" + del "^3.0.0" + device-specs "^1.0.0" + diff "^4.0.2" + elegant-spinner "^1.0.1" + emittery "^0.4.1" + endpoint-utils "^1.0.2" + error-stack-parser "^1.3.6" + execa "^4.0.3" + globby "^11.0.4" + graceful-fs "^4.1.11" + graphlib "^2.1.5" + humanize-duration "^3.25.0" + import-lazy "^3.1.0" + indent-string "^1.2.2" + is-ci "^1.0.10" + is-docker "^2.0.0" + is-glob "^2.0.1" + is-stream "^2.0.0" + json5 "^2.1.0" + lodash "^4.17.13" + log-update-async-hook "^2.0.2" + make-dir "^3.0.0" + mime-db "^1.41.0" + moment "^2.10.3" + moment-duration-format-commonjs "^1.0.0" + mustache "^2.1.2" + nanoid "^1.0.1" + os-family "^1.0.0" + parse5 "^1.5.0" + pify "^2.3.0" + pinkie "^2.0.4" + pngjs "^3.3.1" + pretty-hrtime "^1.0.3" + promisify-event "^1.0.0" + qrcode-terminal "^0.10.0" + read-file-relative "^1.2.0" + replicator "^1.0.5" + resolve-cwd "^1.0.0" + resolve-from "^4.0.0" + sanitize-filename "^1.6.0" + semver "^5.6.0" + source-map-support "^0.5.16" + strip-bom "^2.0.0" + testcafe-browser-tools "2.0.16" + testcafe-hammerhead "24.5.7" + testcafe-legacy-api "5.1.2" + testcafe-reporter-json "^2.1.0" + testcafe-reporter-list "^2.1.0" + testcafe-reporter-minimal "^2.1.0" + testcafe-reporter-spec "^2.1.1" + testcafe-reporter-xunit "^2.1.0" + time-limit-promise "^1.0.2" + tmp "0.0.28" + tree-kill "^1.2.2" + typescript "^3.3.3" + unquote "^1.1.1" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -9411,6 +10707,11 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== +time-limit-promise@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/time-limit-promise/-/time-limit-promise-1.0.4.tgz#33e928212273c70d52153c28ad2a7e3319b975f9" + integrity sha512-FLHDDsIDducw7MBcRWlFtW2Tm50DoKOSFf0Nzx17qwXj8REXCte0eUkHrJl9QU3Bl9arG3XNYX0PcHpZ9xyuLw== + timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" @@ -9426,6 +10727,28 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tmp-promise@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.1.0.tgz#bb924d239029157b9bc1d506a6aa341f8b13e64c" + integrity sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw== + dependencies: + bluebird "^3.5.0" + tmp "0.1.0" + +tmp@0.0.28: + version "0.0.28" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" + integrity sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9453,6 +10776,13 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tough-cookie@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + integrity sha1-C2GKVWW23qkL80JdBNVe3EdadWE= + dependencies: + punycode "^1.4.1" + tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -9476,6 +10806,18 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= + dependencies: + utf8-byte-length "^1.0.1" + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -9508,6 +10850,13 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tunnel-agent@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -9522,7 +10871,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -9572,6 +10921,11 @@ typeface-roboto@^0.0.75: resolved "https://registry.yarnpkg.com/typeface-roboto/-/typeface-roboto-0.0.75.tgz#98d5ba35ec234bbc7172374c8297277099cc712b" integrity sha512-VrR/IiH00Z1tFP4vDGfwZ1esNqTiDMchBEXYY9kilT6wRGgFoCAlgkEUMHb1E3mB0FsfZhv756IF0+R+SFPfdg== +typescript@^3.3.3: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + typescript@^4.4.3: version "4.5.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" @@ -9632,7 +10986,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@~1.1.1: +unquote@^1.1.1, unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= @@ -9649,6 +11003,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + use-debounce@^5.0.1: version "5.2.1" resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-5.2.1.tgz#7366543c769f1de3e92104dee64de5c4dfddfd33" @@ -9661,6 +11020,11 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.3.0" +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -9756,6 +11120,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +webauth@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webauth/-/webauth-1.1.0.tgz#64704f6b8026986605bc3ca629952e6e26fdd100" + integrity sha1-ZHBPa4AmmGYFvDymKZUubib90QA= + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -9948,7 +11317,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@^1.3.1: +which-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-promise/-/which-promise-1.0.0.tgz#20b721df05b35b706176ffa10b0909aba4603035" + integrity sha1-ILch3wWzW3Bhdv+hCwkJq6RgMDU= + dependencies: + pify "^2.2.0" + pinkie-promise "^1.0.0" + which "^1.1.2" + +which@^1.1.2, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -10138,6 +11516,14 @@ workbox-window@6.4.2: "@types/trusted-types" "^2.0.2" workbox-core "6.4.2" +wrap-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -10162,7 +11548,7 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.4.6: +ws@^7.2.0, ws@^7.4.6: version "7.5.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==