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==