Merge changes I01d18615,Icd56bfb2 * changes: Create view state files for `documentation`, `agreement`, `plugin` Create view state files for `group` and `repo`
diff --git a/javatests/com/google/gerrit/acceptance/rest/account/DeleteSshKeyIT.java b/javatests/com/google/gerrit/acceptance/rest/account/DeleteSshKeyIT.java index c5b88af..4e9b2af 100644 --- a/javatests/com/google/gerrit/acceptance/rest/account/DeleteSshKeyIT.java +++ b/javatests/com/google/gerrit/acceptance/rest/account/DeleteSshKeyIT.java
@@ -19,6 +19,7 @@ import com.google.gerrit.acceptance.AbstractDaemonTest; import com.google.gerrit.acceptance.UseSsh; import com.google.gerrit.acceptance.testsuite.account.TestSshKeys; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.server.account.AccountSshKey; import com.google.gerrit.server.account.VersionedAuthorizedKeys; import com.google.gerrit.server.restapi.account.DeleteSshKey; @@ -78,7 +79,8 @@ @Test @UseSsh public void deleteSshKeyOnBehalf() throws Exception { - deleteSshKey.apply(identifiedUserFactory.create(user.id()), userSshKey); + assertThat(deleteSshKey.apply(identifiedUserFactory.create(user.id()), userSshKey)) + .isEqualTo(Response.none()); List<AccountSshKey> sshKeysAfterDel = authorizedKeys.getKeys(user.id()); assertThat(sshKeysAfterDel).containsExactly(AccountSshKey.create(user.id(), 2, KEY1)); }
diff --git a/package.json b/package.json index 663f6ab..1dfee7c 100644 --- a/package.json +++ b/package.json
@@ -46,12 +46,7 @@ "safe_bazelisk": "if which bazelisk >/dev/null; then bazel_bin=bazelisk; else bazel_bin=bazel; fi && $bazel_bin", "eslint": "npm run safe_bazelisk test polygerrit-ui/app:lint_test", "eslintfix": "npm run safe_bazelisk run polygerrit-ui/app:lint_bin -- -- --fix $(pwd)/polygerrit-ui/app", - "litlint": "npm run safe_bazelisk run polygerrit-ui/app:lit_analysis", - "test:karma": "npm run safe_bazelisk test //polygerrit-ui:karma_test -- --test_verbose_timeout_warnings --test_output=all", - "test:karma:single": "npm run compile:local && npm run safe_bazelisk run //polygerrit-ui:karma_bin -- -- start $(pwd)/polygerrit-ui/karma.conf.js --root '.ts-out/polygerrit-ui/app/' --test-files", - "test:karma:watch": "npm run safe_bazelisk run //polygerrit-ui:karma_bin -- -- start $(pwd)/polygerrit-ui/karma.conf.js --root '.ts-out/polygerrit-ui/app/' --auto-watch --no-single-run --test-files", - "test:karma:debug": "npm run compile:local && npm run safe_bazelisk run //polygerrit-ui:karma_bin -- -- start $(pwd)/polygerrit-ui/karma.conf.js --root '.ts-out/polygerrit-ui/app/' --browsers ChromeDev --no-single-run --test-files", - "karma:watch": "npm run compile:local && run-p -r compile:watch \"karma:test:watch -- {*}\" --" + "litlint": "npm run safe_bazelisk run polygerrit-ui/app:lit_analysis" }, "repository": { "type": "git",
diff --git a/polygerrit-ui/BUILD b/polygerrit-ui/BUILD index b83608f..76aeb07 100644 --- a/polygerrit-ui/BUILD +++ b/polygerrit-ui/BUILD
@@ -1,6 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary") load("//tools/bzl:genrule2.bzl", "genrule2") -load("//tools/bzl:js.bzl", "karma_test") load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test") package(default_visibility = ["//visibility:public"]) @@ -22,39 +20,6 @@ output_to_bindir = 1, ) -go_binary( - name = "devserver", - srcs = ["server.go"], - data = [ - ":fonts.zip", - "@ui_dev_npm//:node_modules", - "@ui_npm//:node_modules", - ], - deps = [ - "@org_golang_x_tools//godoc/vfs/httpfs:go_default_library", - "@org_golang_x_tools//godoc/vfs/zipfs:go_default_library", - ], -) - -sh_binary( - name = "karma_bin", - srcs = ["@ui_dev_npm//:node_modules/karma/bin/karma"], - data = [ - "@ui_dev_npm//@open-wc/karma-esm", - "@ui_dev_npm//karma-chrome-launcher", - "@ui_dev_npm//karma-mocha", - "@ui_dev_npm//karma-mocha-reporter", - "@ui_dev_npm//karma/bin:karma", - "@ui_dev_npm//mocha", - ], -) - -karma_test( - name = "karma_test", - srcs = ["karma_test.sh"], - data = ["//polygerrit-ui/app:test-srcs-fg"], -) - filegroup( name = "web-test-runner_config-sources", srcs = glob([
diff --git a/polygerrit-ui/README.md b/polygerrit-ui/README.md index 4e2ec7a..ac8712b 100644 --- a/polygerrit-ui/README.md +++ b/polygerrit-ui/README.md
@@ -28,23 +28,6 @@ ## Installing [Node.js](https://nodejs.org/en/download/) and npm packages -**Note**: Switch between an old branch with bower_components and a new branch with ui-npm -packages (or vice versa) can lead to some build errors. To avoid such errors clean up the build -repository: -```sh -rm -rf node_modules/ \ - polygerrit-ui/node_modules/ \ - polygerrit-ui/app/node_modules \ - tools/node_tools/node_modules - -bazel clean -``` - -If it doesn't help also try to run -```sh -bazel clean --expunge -``` - The minimum nodejs version supported is 10.x+. ```sh @@ -66,9 +49,12 @@ We have several bazel commands to install packages we may need for FE development. -For first time users to get the local server up, `npm start` should be enough and will take care of all of them for you. +For first time users to get the local server up, `bazel build gerrit` should be enough and will take care of all of them for you. ```sh +# Install yarn package manager +npm install -g yarn + # Install packages from root-level packages.json bazel fetch @npm//:node_modules @@ -95,7 +81,7 @@ ## Setup typescript support in the IDE Modern IDE should automatically handle typescript settings from the -`pollygerrit-ui/app/tsconfig.json` files. IDE places compiled files in the +`polygerrit-ui/app/tsconfig.json` files. IDE places compiled files in the `.ts-out/pg` directory at the root of gerrit workspace and you can configure IDE to exclude the whole .ts-out directory. To do it in the IntelliJ IDEA click on this directory and select "Mark Directory As > Excluded" in the context menu. @@ -113,7 +99,7 @@ To test the local frontend against production data or a local test site execute: ```sh -npm run start +yarn start ``` This command starts the [Web Dev Server](https://modern-web.dev/docs/dev-server/overview/). @@ -123,14 +109,7 @@ ## Running locally against production data -### Local website - -Start [Go server](#go-server) and then visit http://localhost:8081 - -The biggest draw back of this method is that you cannot log in, so cannot test -scenarios that require it. - -#### Chrome extension: Gerrit FE Dev Helper +### Chrome extension: Gerrit FE Dev Helper To be able to bypass the auth and also help improve the productivity of Gerrit FE developers, we created this chrome extension: [Gerrit FE Dev Helper](https://chrome.google.com/webstore/detail/gerrit-fe-dev-helper/jimgomcnodkialnpmienbomamgomglkd). @@ -153,7 +132,7 @@ [this command](https://gerrit-review.googlesource.com/Documentation/dev-readme.html#run_daemon). If you want to serve the Polymer frontend directly from the sources in `polygerrit_ui/app/` instead of from the war: -1. Start [Go server](#go-server) +1. Start [Web Dev Server](#web-dev-server) 2. Add the `--dev-cdn` option: ```sh @@ -172,62 +151,33 @@ For daily development you typically only want to run and debug individual tests. There are several ways to run tests. -* Run all tests in headless mode (exactly like CI does): +* Run all tests: ```sh -npm run test +yarn test ``` -This command uses bazel rules for running frontend tests. Bazel fetches -all nessecary dependencies and runs all required rules. -* Run all tests in debug mode (the command opens Chrome browser with -the default Karma page; you should click the "Debug" button to start testing): +* Run all tests under bazel: ```sh -# The following command doesn't compile code before tests -npm run test:debug +./polygerrit-ui/app/run_test.sh ``` * Run a single test file: ``` -# Headless mode (doesn't compile code before run) -npm run test:single async-foreach-behavior_test.js - -# Debug mode (doesn't compile code before run) -npm run test:debug async-foreach-behavior_test.js +yarn test:single "**/async-foreach-behavior_test.js" ``` -When converting a test file to typescript, the command for running tests is -still using the .js suffix and not the new .ts suffix. - -Commands `test:debug` and `test:single` assumes that compiled code is located -in the `./ts-out/polygerrit-ui/app` directory. It's up to you how to achieve it. -For example, the following options are possible: -* You can configure IDE for recompiling source code on changes -* You can use `compile:local` command for running compiler once and -`compile:watch` for running compiler in watch mode (`compile:...` places -compile code exactly in the `./ts-out/polygerrit-ui/app` directory) - +Compiling code: ```sh -# Compile frontend once and run tests from a file: -npm run compile:local && npm run test:single async-foreach-behavior_test.js +# Compile frontend once to check for type errors: +yarn compile:local # Watch mode: ## Terminal 1: -npm run compile:watch -## Terminal 2: -npm run test:debug async-foreach-behavior_test.js +yarn compile:watch +## Terminal 2, test & watch a file for example: +yarn test:single "**/async-foreach-behavior_test.js" ``` -* You can run tests in IDE. : - - [IntelliJ: running unit tests on Karma](https://www.jetbrains.com/help/idea/running-unit-tests-on-karma.html#ws_karma_running) - - You should configure IDE to compile typescript before running tests. - -**NOTE**: Bazel plugin for IntelliJ has a bug - it recompiles typescript -project only if .ts and/or .d.ts files have been changed. If only .js files -were changed, the plugin doesn't run compiler. As a workaround, setup -"Run npm script 'compile:local" action instead of the "Compile Typescript" in -the "Before launch" section for IntelliJ. This is a temporary problem until -typescript migration is complete. - ### Generated file overview A generated file starts with imports followed by a static content with @@ -275,7 +225,7 @@ * To run ESLint on the whole app, less some dependency code: ```sh -npm run eslint +yarn eslint ``` * To run ESLint on just the subdirectory you modified: @@ -503,7 +453,7 @@ git submodule update --init --recursive // reset the workspace (please save your local changes before running this command) -npm run clean +yarn clean // install all dependencies and start the server npm start
diff --git a/polygerrit-ui/app/.eslintrc.js b/polygerrit-ui/app/.eslintrc.js index 62a681a..c519465 100644 --- a/polygerrit-ui/app/.eslintrc.js +++ b/polygerrit-ui/app/.eslintrc.js
@@ -227,9 +227,6 @@ 'import/no-unused-modules': 2, // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-default-export.md 'import/no-default-export': 2, - // Prevents certain identifiers being used. - // Prefer flush() over flushAsynchronousOperations(). - 'id-blacklist': ['error', 'flushAsynchronousOperations'], 'regex/invalid': [ 'error', [{ // eslint-disable-next-line regex/invalid
diff --git a/polygerrit-ui/app/BUILD b/polygerrit-ui/app/BUILD index 38a99b8..330e616 100644 --- a/polygerrit-ui/app/BUILD +++ b/polygerrit-ui/app/BUILD
@@ -77,9 +77,6 @@ ), allow_js = True, incremental = True, - # The same outdir also appears in the following files: - # wct_test.sh - # karma.conf.js out_dir = "_pg_with_tests_out", tsc = "//tools/node_tools:tsc-bin", tsconfig = ":ts_config_bazel_test",
diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.ts b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.ts index a8c2d05..d693f80 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.ts
@@ -25,7 +25,7 @@ } from '../../../types/common'; import {GrButton} from '../../shared/gr-button/gr-button'; import {GrAutocomplete} from '../../shared/gr-autocomplete/gr-autocomplete'; -import {EventType, PageErrorEvent} from '../../../types/events.js'; +import {EventType, PageErrorEvent} from '../../../types/events'; import {getAccountSuggestions} from '../../../utils/account-util'; import {getAppContext} from '../../../services/app-context'; import {fixture, html, assert} from '@open-wc/testing';
diff --git a/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.ts b/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.ts index e0b4d1d..36d0529 100644 --- a/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.ts
@@ -13,7 +13,7 @@ stubRestApi, waitUntil, } from '../../../test/test-utils'; -import {createGroupInfo} from '../../../test/test-data-generators.js'; +import {createGroupInfo} from '../../../test/test-data-generators'; import {GroupId, GroupInfo, GroupName} from '../../../types/common'; import {GrAutocomplete} from '../../shared/gr-autocomplete/gr-autocomplete'; import {GrButton} from '../../shared/gr-button/gr-button';
diff --git a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.ts b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.ts index 16f830a..f3f85b8 100644 --- a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.ts
@@ -6,7 +6,7 @@ import '../../../test/common-test-setup-karma'; import './gr-permission'; import {GrPermission} from './gr-permission'; -import {query, stubRestApi} from '../../../test/test-utils'; +import {query, stubRestApi, waitEventLoop} from '../../../test/test-utils'; import {GitRef, GroupId, GroupName} from '../../../types/common'; import {PermissionAction} from '../../../constants/constants'; import { @@ -313,7 +313,7 @@ }; element.setupValues(); await element.updateComplete; - flush(); + await waitEventLoop(); }); test('render', () => { @@ -432,7 +432,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.equal(element.rules!.length, 1); });
diff --git a/polygerrit-ui/app/elements/admin/gr-plugin-config-array-editor/gr-plugin-config-array-editor_test.ts b/polygerrit-ui/app/elements/admin/gr-plugin-config-array-editor/gr-plugin-config-array-editor_test.ts index 9ee1807..3c03ce1 100644 --- a/polygerrit-ui/app/elements/admin/gr-plugin-config-array-editor/gr-plugin-config-array-editor_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-plugin-config-array-editor/gr-plugin-config-array-editor_test.ts
@@ -3,14 +3,14 @@ * Copyright 2018 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import {ConfigParameterInfoType} from '../../../constants/constants.js'; +import {ConfigParameterInfoType} from '../../../constants/constants'; import '../../../test/common-test-setup-karma'; import './gr-plugin-config-array-editor'; import {GrPluginConfigArrayEditor} from './gr-plugin-config-array-editor'; -import {queryAll, queryAndAssert, pressKey} from '../../../test/test-utils.js'; -import {GrButton} from '../../shared/gr-button/gr-button.js'; +import {queryAll, queryAndAssert, pressKey} from '../../../test/test-utils'; +import {GrButton} from '../../shared/gr-button/gr-button'; import {fixture, html, assert} from '@open-wc/testing'; -import {Key} from '../../../utils/dom-util.js'; +import {Key} from '../../../utils/dom-util'; suite('gr-plugin-config-array-editor tests', () => { let element: GrPluginConfigArrayEditor;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.ts b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.ts index 65b9cb5..9cbe7d60 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.ts
@@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ import '../../../test/common-test-setup-karma'; -import './gr-repo-commands.js'; +import './gr-repo-commands'; import {GrRepoCommands} from './gr-repo-commands'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.ts b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.ts index 75f2c4d..5b2fdea 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.ts
@@ -12,9 +12,10 @@ mockPromise, queryAndAssert, stubRestApi, + waitEventLoop, } from '../../../test/test-utils'; import {DashboardId, DashboardInfo, RepoName} from '../../../types/common'; -import {PageErrorEvent} from '../../../types/events.js'; +import {PageErrorEvent} from '../../../types/events'; import {fixture, html, assert} from '@open-wc/testing'; suite('gr-repo-dashboards tests', () => { @@ -113,7 +114,7 @@ 'none' ); element.repo = 'test' as RepoName; - await flush(); + await waitEventLoop(); assert.equal( getComputedStyle(queryAndAssert(element, '#loadingContainer')).display, 'none'
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts index 3099a02..f9f0b57 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts
@@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ import '../../../test/common-test-setup-karma'; -import './gr-repo-detail-list.js'; +import './gr-repo-detail-list'; import {GrRepoDetailList} from './gr-repo-detail-list'; import {page} from '../../../utils/page-wrapper-utils'; import {
diff --git a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.ts b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.ts index 4753e80..08a6a95 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.ts
@@ -39,7 +39,7 @@ createConfig, createDownloadSchemes, } from '../../../test/test-data-generators'; -import {PageErrorEvent} from '../../../types/events.js'; +import {PageErrorEvent} from '../../../types/events'; import {GrButton} from '../../shared/gr-button/gr-button'; import {GrSelect} from '../../shared/gr-select/gr-select'; import {GrTextarea} from '../../shared/gr-textarea/gr-textarea';
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-bulk-vote-flow/gr-change-list-bulk-vote-flow_test.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-bulk-vote-flow/gr-change-list-bulk-vote-flow_test.ts index afbdcc3..e91b1c7 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list-bulk-vote-flow/gr-change-list-bulk-vote-flow_test.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list-bulk-vote-flow/gr-change-list-bulk-vote-flow_test.ts
@@ -18,6 +18,7 @@ mockPromise, queryAll, stubReporting, + waitEventLoop, } from '../../../test/test-utils'; import {ChangeInfo, NumericChangeId, LabelInfo} from '../../../api/rest-api'; import {getAppContext} from '../../../services/app-context'; @@ -305,7 +306,7 @@ ); await selectChange(change1); await element.updateComplete; - await flush(); + await waitEventLoop(); assert.isNotOk( queryAndAssert<GrButton>(element, '#voteFlowButton').disabled
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-hashtag-flow/gr-change-list-hashtag-flow_test.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-hashtag-flow/gr-change-list-hashtag-flow_test.ts index a1d0732..67901b0 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list-hashtag-flow/gr-change-list-hashtag-flow_test.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list-hashtag-flow/gr-change-list-hashtag-flow_test.ts
@@ -23,6 +23,7 @@ queryAndAssert, stubReporting, stubRestApi, + waitEventLoop, waitUntil, waitUntilCalled, waitUntilObserved, @@ -227,7 +228,7 @@ // open flow queryAndAssert<GrButton>(element, 'gr-button#start-flow').click(); await element.updateComplete; - await flush(); + await waitEventLoop(); }); test('renders hashtags flow', () => {
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-topic-flow/gr-change-list-topic-flow_test.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-topic-flow/gr-change-list-topic-flow_test.ts index d7a4a2b..f00348b 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list-topic-flow/gr-change-list-topic-flow_test.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list-topic-flow/gr-change-list-topic-flow_test.ts
@@ -23,6 +23,7 @@ queryAndAssert, stubReporting, stubRestApi, + waitEventLoop, waitUntil, waitUntilCalled, waitUntilObserved, @@ -218,7 +219,7 @@ // open flow queryAndAssert<GrButton>(element, 'gr-button#start-flow').click(); await element.updateComplete; - await flush(); + await waitEventLoop(); }); test('renders existing-topics flow', () => { @@ -536,7 +537,7 @@ // open flow queryAndAssert<GrButton>(element, 'gr-button#start-flow').click(); await element.updateComplete; - await flush(); + await waitEventLoop(); }); test('renders no-existing-topics flow', () => {
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.ts index a8d345f..45138a9 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.ts
@@ -3,7 +3,7 @@ * Copyright 2016 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import '../../../test/common-test-setup-karma.js'; +import '../../../test/common-test-setup-karma'; import './gr-change-list-view'; import {GrChangeListView} from './gr-change-list-view'; import {page} from '../../../utils/page-wrapper-utils'; @@ -15,15 +15,15 @@ queryAndAssert, stubFlags, } from '../../../test/test-utils'; -import {createChange} from '../../../test/test-data-generators.js'; +import {createChange} from '../../../test/test-data-generators'; import { ChangeInfo, EmailAddress, NumericChangeId, RepoName, -} from '../../../api/rest-api.js'; +} from '../../../api/rest-api'; import {fixture, html, waitUntil, assert} from '@open-wc/testing'; -import {GerritView} from '../../../services/router/router-model.js'; +import {GerritView} from '../../../services/router/router-model'; const CHANGE_ID = 'IcA3dAB3edAB9f60B8dcdA6ef71A75980e4B7127'; const COMMIT_HASH = '12345678';
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.ts b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.ts index 1fe4848..c20ce09 100644 --- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.ts +++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.ts
@@ -7,7 +7,7 @@ import {fixture, html, assert} from '@open-wc/testing'; import './gr-user-header'; import {GrUserHeader} from './gr-user-header'; -import {stubRestApi} from '../../../test/test-utils'; +import {stubRestApi, waitEventLoop} from '../../../test/test-utils'; import {AccountId, EmailAddress, Timestamp} from '../../../types/common'; suite('gr-user-header tests', () => { @@ -61,13 +61,13 @@ ); element.userId = 10 as AccountId; - await flush(); + await waitEventLoop(); assert.isOk(element._accountDetails); assert.isOk(element._status); element.userId = undefined; - await flush(); + await waitEventLoop(); assert.isUndefined(element._accountDetails); assert.equal(element._status, '');
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts index 579c1a8..ef84af2 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
@@ -29,6 +29,7 @@ stubFlags, stubRestApi, stubUsers, + waitEventLoop, waitQueryAndAssert, waitUntil, } from '../../../test/test-utils'; @@ -1366,7 +1367,7 @@ await element.updateComplete; element.computeRevertSubmitted(element.change); // Wait for promises to settle. - await flush(); + await waitEventLoop(); await element.updateComplete; assert.isFalse( element.changeStatuses?.includes(ChangeStates.REVERT_SUBMITTED) @@ -1402,7 +1403,7 @@ await element.updateComplete; element.computeRevertSubmitted(element.change); // Wait for promises to settle. - await flush(); + await waitEventLoop(); await element.updateComplete; assert.isFalse( element.changeStatuses?.includes(ChangeStates.REVERT_CREATED) @@ -1594,7 +1595,7 @@ value.patchNum = 2 as RevisionPatchSetNum; element.params = {...value}; await element.updateComplete; - await flush(); + await waitEventLoop(); assert.equal(element.fileList.selectedIndex, 0); assert.isFalse(reloadStub.calledTwice); assert.isTrue(reloadPatchDependentStub.calledOnce); @@ -2526,7 +2527,7 @@ }, }); await element.updateComplete; - await flush(); + await waitEventLoop(); assert.isTrue(changeDisplayStub.called); assert.isTrue(changeFullyLoadedStub.called); });
diff --git a/polygerrit-ui/app/elements/change/gr-commit-info/gr-commit-info_test.ts b/polygerrit-ui/app/elements/change/gr-commit-info/gr-commit-info_test.ts index 79baabf..3bb85aa 100644 --- a/polygerrit-ui/app/elements/change/gr-commit-info/gr-commit-info_test.ts +++ b/polygerrit-ui/app/elements/change/gr-commit-info/gr-commit-info_test.ts
@@ -15,6 +15,7 @@ import {CommitId, RepoName} from '../../../types/common'; import {GrRouter} from '../../core/gr-router/gr-router'; import {fixture, html, assert} from '@open-wc/testing'; +import {waitEventLoop} from '../../../test/test-utils'; suite('gr-commit-info tests', () => { let element: GrCommitInfo; @@ -47,7 +48,7 @@ element.change = createChange(); element.commitInfo = createCommit(); element.serverConfig = createServerInfo(); - await flush(); + await waitEventLoop(); assert.isTrue(weblinksStub.called); });
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.ts index 53ed843..29d834f 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.ts
@@ -21,7 +21,7 @@ TopicName, } from '../../../api/rest-api'; import {createChange, createRevision} from '../../../test/test-data-generators'; -import {GrDialog} from '../../shared/gr-dialog/gr-dialog.js'; +import {GrDialog} from '../../shared/gr-dialog/gr-dialog'; import {ProgressStatus} from '../../../constants/constants'; import {fixture, html, assert} from '@open-wc/testing';
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts index a12b08e..f48009b 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts +++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts
@@ -15,6 +15,7 @@ waitUntil, pressKey, stubElement, + waitEventLoop, } from '../../../test/test-utils'; import { BasePatchSetNum, @@ -111,7 +112,7 @@ .callsFake(() => Promise.resolve()); await element.updateComplete; // Wait for expandedFilesChanged to complete. - await flush(); + await waitEventLoop(); }); test('renders', () => { @@ -343,7 +344,7 @@ element.fileListIncrement = 300; element.files = createFiles(500); await element.updateComplete; - await flush(); + await waitEventLoop(); assert.equal( queryAll<HTMLDivElement>(element, '.file-row').length, @@ -365,7 +366,7 @@ queryAndAssert<GrButton>(element, '#showAllButton').click(); await element.updateComplete; - await flush(); + await waitEventLoop(); assert.equal(element.numFilesShown, 500); assert.equal(element.shownFiles.length, 500); @@ -930,7 +931,7 @@ element.change = {_number: 42 as NumericChangeId} as ParsedChangeInfo; element.fileCursor.setCursorAtIndex(0); await element.updateComplete; - await flush(); + await waitEventLoop(); }); test('toggle left diff via shortcut', () => { @@ -1363,7 +1364,7 @@ element.files = [normalize({}, path)]; await element.updateComplete; // Wait for expandedFilesChanged to finish. - await flush(); + await waitEventLoop(); const renderSpy = sinon.spy(element, 'renderInOrder'); const collapseStub = sinon.stub(element, 'clearCollapsedDiffs'); @@ -1376,7 +1377,7 @@ element.toggleFileExpanded({path}); await element.updateComplete; // Wait for expandedFilesChanged to finish. - await flush(); + await waitEventLoop(); assert.equal(collapseStub.lastCall.args[0].length, 0); assert.equal( @@ -1389,7 +1390,7 @@ element.toggleFileExpanded({path}); await element.updateComplete; // Wait for expandedFilesChanged to finish. - await flush(); + await waitEventLoop(); assert.equal( queryAndAssert<GrIcon>(element, 'gr-icon').icon, @@ -1409,11 +1410,11 @@ element.files = [normalize({}, path)]; // Wait for diffs to be computed. await element.updateComplete; - await flush(); + await waitEventLoop(); element.expandAllDiffs(); await element.updateComplete; // Wait for expandedFilesChanged to finish. - await flush(); + await waitEventLoop(); assert.equal(element.filesExpanded, FilesExpandedState.ALL); assert.isTrue(reInitStub.calledTwice); assert.equal(collapseStub.lastCall.args[0].length, 0); @@ -1421,7 +1422,7 @@ element.collapseAllDiffs(); await element.updateComplete; // Wait for expandedFilesChanged to finish. - await flush(); + await waitEventLoop(); assert.equal(element.expandedFiles.length, 0); assert.equal(element.filesExpanded, FilesExpandedState.NONE); assert.equal(collapseStub.lastCall.args[0].length, 1); @@ -1456,7 +1457,7 @@ sinon.stub(element, 'diffs').get(() => diffs); element.expandedFiles = element.expandedFiles.concat([{path}]); await element.updateComplete; - await flush(); + await waitEventLoop(); await promise; }); @@ -1593,7 +1594,7 @@ element.renderInOrder([{path: 'p'}], diffs); await element.updateComplete; // Wait for renderInOrder to finish - await flush(); + await waitEventLoop(); assert.isTrue(reviewStub.called); assert.isTrue(reviewStub.calledWithExactly('p', true)); }); @@ -1635,7 +1636,7 @@ patchNum: 1 as RevisionPatchSetNum, }; await element.updateComplete; - await flush(); + await waitEventLoop(); }); test('displays cleanly merged file count', async () => {
diff --git a/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_test.ts b/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_test.ts index ef765b6..d01046e 100644 --- a/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_test.ts +++ b/polygerrit-ui/app/elements/change/gr-label-score-row/gr-label-score-row_test.ts
@@ -9,6 +9,7 @@ import {AccountId} from '../../../api/rest-api'; import {GrButton} from '../../shared/gr-button/gr-button'; import {fixture, html, assert} from '@open-wc/testing'; +import {waitEventLoop} from '../../../test/test-utils'; suite('gr-label-row-score tests', () => { let element: GrLabelScoreRow; @@ -66,7 +67,7 @@ }; await element.updateComplete; - await flush(); + await waitEventLoop(); }); function checkAriaCheckedValid() { @@ -225,7 +226,7 @@ element.label = {name: 'Verified', value: ' 0'}; await element.updateComplete; // Wait for @selected-item-changed to fire - await flush(); + await waitEventLoop(); const selector = element.labelSelector; assert.strictEqual(selector!.selected, ' 0');
diff --git a/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores_test.ts b/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores_test.ts index 9865e41..9935642 100644 --- a/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores_test.ts +++ b/polygerrit-ui/app/elements/change/gr-label-scores/gr-label-scores_test.ts
@@ -5,7 +5,12 @@ */ import '../../../test/common-test-setup-karma'; import './gr-label-scores'; -import {isHidden, queryAndAssert, stubRestApi} from '../../../test/test-utils'; +import { + isHidden, + queryAndAssert, + stubRestApi, + waitEventLoop, +} from '../../../test/test-utils'; import {GrLabelScores} from './gr-label-scores'; import {AccountId} from '../../../types/common'; import {GrLabelScoreRow} from '../gr-label-score-row/gr-label-score-row'; @@ -137,7 +142,7 @@ ...createChange(), status: ChangeStatus.ABANDONED, }; - await flush(); + await waitEventLoop(); assert.isFalse(isHidden(queryAndAssert(element, '.abandonedMessage'))); assert.isTrue(isHidden(queryAndAssert(element, '.mergedMessage'))); }); @@ -146,7 +151,7 @@ ...createChange(), status: ChangeStatus.MERGED, }; - await flush(); + await waitEventLoop(); assert.isFalse(isHidden(queryAndAssert(element, '.mergedMessage'))); assert.isTrue(isHidden(queryAndAssert(element, '.abandonedMessage'))); }); @@ -155,7 +160,7 @@ ...createChange(), status: ChangeStatus.NEW, }; - await flush(); + await waitEventLoop(); assert.isTrue(isHidden(queryAndAssert(element, '.mergedMessage'))); assert.isTrue(isHidden(queryAndAssert(element, '.abandonedMessage'))); });
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts b/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts index f381ab8..c0a46aa 100644 --- a/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts +++ b/polygerrit-ui/app/elements/change/gr-message/gr-message_test.ts
@@ -20,6 +20,7 @@ query, queryAndAssert, stubRestApi, + waitEventLoop, } from '../../../test/test-utils'; import {GrMessage} from './gr-message'; import { @@ -73,7 +74,7 @@ assert.deepEqual(e.detail.message, element.message); promise.resolve(); }); - await flush(); + await waitEventLoop(); assert.isOk(query<HTMLElement>(element, '.replyActionContainer')); queryAndAssert<GrButton>(element, '.replyBtn').click(); await promise;
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts index 58893f5..000e74b 100644 --- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts +++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.ts
@@ -23,6 +23,7 @@ queryAndAssert, resetPlugins, stubRestApi, + waitEventLoop, } from '../../../test/test-utils'; import { ChangeId, @@ -675,7 +676,7 @@ 'http://some/plugins/url1.js' ); getPluginLoader().loadPlugins([]); - await flush(); + await waitEventLoop(); assert.strictEqual(hookEl!.plugin, plugin!); assert.strictEqual(hookEl!.change, element.change); });
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog-it_test.ts b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog-it_test.ts index c495a6f..4beb068 100644 --- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog-it_test.ts +++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog-it_test.ts
@@ -9,6 +9,7 @@ queryAndAssert, resetPlugins, stubRestApi, + waitEventLoop, } from '../../../test/test-utils'; import {getPluginLoader} from '../../shared/gr-js-api-interface/gr-plugin-loader'; import {GrReplyDialog} from './gr-reply-dialog'; @@ -84,14 +85,14 @@ resetPlugins(); }); - test('submit blocked when invalid email is supplied to ccs', () => { + test('submit blocked when invalid email is supplied to ccs', async () => { const sendStub = sinon.stub(element, 'send').returns(Promise.resolve()); element.ccsList!.entry!.setText('test'); queryAndAssert<GrButton>(element, 'gr-button.send').click(); assert.isFalse(element.ccsList!.submitEntryText()); assert.isFalse(sendStub.called); - flush(); + await waitEventLoop(); element.ccsList!.entry!.setText('test@test.test'); queryAndAssert<GrButton>(element, 'gr-button.send').click(); @@ -118,7 +119,7 @@ setupElement(element); getPluginLoader().loadPlugins([]); await getPluginLoader().awaitPluginsLoaded(); - await flush(); + await waitEventLoop(); const textarea = queryAndAssert<GrTextarea>( element, 'gr-textarea' @@ -127,7 +128,7 @@ textarea.dispatchEvent( new CustomEvent('input', {bubbles: true, composed: true}) ); - await flush(); + await waitEventLoop(); const labelScoreRows = queryAndAssert( element.getLabelScores(), 'gr-label-score-row[name="Code-Review"]'
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts index b04288b..1eff46d 100644 --- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts +++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts
@@ -1673,10 +1673,9 @@ element.addEventListener('send', () => { promise.resolve(); }); - // Without wrapping this test in flush(), the below two calls to - // tap() cause a race in some situations in shadow DOM. - // The send button can be tapped before the others, causing the test to - // fail. + // Without wrapping this test in await element.updateComplete, the below two + // calls to tap() cause a race in some situations in shadow DOM. The send + // button can be tapped before the others, causing the test to fail. const el = queryAndAssert<GrLabelScoreRow>( queryAndAssert(element, 'gr-label-scores'), 'gr-label-score-row[name="Verified"]'
diff --git a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.ts b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.ts index bb34d46..35562d0 100644 --- a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.ts +++ b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.ts
@@ -10,7 +10,12 @@ GrErrorManager, __testOnly_ErrorType, } from './gr-error-manager'; -import {stubAuth, stubReporting, stubRestApi} from '../../../test/test-utils'; +import { + stubAuth, + stubReporting, + stubRestApi, + waitEventLoop, +} from '../../../test/test-utils'; import {AppContext, getAppContext} from '../../../services/app-context'; import { createAccountDetailWithId, @@ -101,7 +106,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.isFalse(showAuthErrorStub.calledOnce); }); @@ -123,7 +128,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.isTrue(showAuthErrorStub.calledOnce); }); @@ -146,7 +151,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.isTrue(getLoggedInStub.calledOnce); }); @@ -178,7 +183,7 @@ ); assert.isTrue(textSpy.called); - await flush(); + await waitEventLoop(); assert.isTrue(showErrorSpy.calledOnce); assert.isTrue(showErrorSpy.lastCall.calledWithExactly('Error 500: ZOMG')); }); @@ -237,7 +242,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.equal(element.errorDialog.text, 'Error 500: 500\nTrace Id: xxxx'); }); @@ -255,7 +260,7 @@ ); assert.isTrue(textSpy.called); - await flush(); + await waitEventLoop(); assert.isFalse(showAlertStub.called); }); @@ -268,7 +273,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.isTrue(showAlertStub.calledOnce); assert.isTrue( showAlertStub.lastCall.calledWithExactly('Server unavailable') @@ -331,15 +336,15 @@ }) ); assert.equal(fetchStub.callCount, 1); - await flush(); + await waitEventLoop(); - // here needs two flush as there are two chained - // promises on server-error handler and flush only flushes one + // here needs two waitEventLoop() as there are two chained promises on + // server-error handler and waitEventLoop() only flushes one assert.equal(fetchStub.callCount, 2); - await flush(); + await waitEventLoop(); // Sometime overlay opens with delay, waiting while open is complete clock.tick(1000); - await flush(); + await waitEventLoop(); // auth-error fired assert.isTrue(toastSpy.called); @@ -375,7 +380,7 @@ clock.tick(1000); element.knownAccountId = 5 as AccountId; element.checkSignedIn(); - await flush(); + await waitEventLoop(); assert.isTrue(refreshStub.called); assert.isTrue(hideToastSpy.called); @@ -404,7 +409,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); let toast = toastSpy.lastCall.returnValue; assert.isOk(toast); assert.include(toast.shadowRoot.textContent, 'test reload'); @@ -425,15 +430,15 @@ bubbles: true, }) ); - await flush(); - await flush(); - // here needs two flush as there are two chained - // promises on server-error handler and flush only flushes one + await waitEventLoop(); + await waitEventLoop(); + // here needs two waitEventLoop() as there are two chained promises on + // server-error handler and waitEventLoop() only flushes one assert.equal(fetchStub.callCount, 2); - await flush(); + await waitEventLoop(); // Sometime overlay opens with delay, waiting while open is complete clock.tick(1000); - await flush(); + await waitEventLoop(); // toast toast = toastSpy.lastCall.returnValue; assert.include(toast.shadowRoot.textContent, 'Credentials expired.'); @@ -452,7 +457,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); let toast = toastSpy.lastCall.returnValue; assert.isOk(toast); assert.include(toast.shadowRoot.textContent, 'test reload'); @@ -465,7 +470,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); toast = toastSpy.lastCall.returnValue; assert.include(toast.shadowRoot.textContent, 'second-test'); }); @@ -492,12 +497,12 @@ }) ); assert.equal(fetchStub.callCount, 1); - await flush(); + await waitEventLoop(); - // here needs two flush as there are two chained - // promises on server-error handler and flush only flushes one + // here needs two waitEventLoop() as there are two chained promises on + // server-error handler and waitEventLoop() only flushes one assert.equal(fetchStub.callCount, 2); - await flush(); + await waitEventLoop(); await waitUntil(() => toastSpy.calledOnce); let toast = toastSpy.lastCall.returnValue; assert.include(toast.shadowRoot.textContent, 'Credentials expired.'); @@ -515,7 +520,7 @@ }) ); - await flush(); + await waitEventLoop(); assert.isTrue(toastSpy.calledOnce); toast = toastSpy.lastCall.returnValue; assert.isOk(toast); @@ -574,7 +579,7 @@ element.refreshingCredentials = true; element.checkSignedIn(); - await flush(); + await waitEventLoop(); assert.isFalse(requestCheckStub.called); assert.isTrue(handleRefreshStub.called); assert.isFalse(reloadStub.called); @@ -600,7 +605,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.isTrue(openStub.called); assert.isTrue(reportStub.called); @@ -612,7 +617,7 @@ bubbles: true, }) ); - await flush(); + await waitEventLoop(); assert.isTrue(closeStub.called); }); @@ -633,7 +638,7 @@ element.refreshingCredentials = true; element.checkSignedIn(); - await flush(); + await waitEventLoop(); assert.isFalse(requestCheckStub.called); assert.isFalse(handleRefreshStub.called); @@ -669,7 +674,7 @@ element.refreshingCredentials = true; element.checkSignedIn(); - await flush(); + await waitEventLoop(); assert.isTrue(requestCheckStub.called); assert.isFalse(handleRefreshStub.called); assert.isFalse(reloadStub.called);
diff --git a/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog_test.ts b/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog_test.ts index 7c1e394..d83f8a5 100644 --- a/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog_test.ts +++ b/polygerrit-ui/app/elements/core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog_test.ts
@@ -11,6 +11,7 @@ ShortcutSection, } from '../../../services/shortcuts/shortcuts-service'; import {fixture, html, assert} from '@open-wc/testing'; +import {waitEventLoop} from '../../../test/test-utils'; const x = ['x']; const ctrlX = ['Ctrl', 'x']; @@ -23,12 +24,12 @@ element = await fixture( html`<gr-keyboard-shortcuts-dialog></gr-keyboard-shortcuts-dialog>` ); - await flush(); + await waitEventLoop(); }); - function update(directory: Map<ShortcutSection, SectionView>) { + async function update(directory: Map<ShortcutSection, SectionView>) { element.onDirectoryUpdated(directory); - flush(); + await waitEventLoop(); } test('renders left and right contents', async () => { @@ -42,7 +43,7 @@ [{binding: [shiftMetaX], text: 'navigation shortcuts'}], ], ]); - update(directory); + await update(directory); await element.updateComplete; assert.shadowDom.equal( @@ -117,9 +118,9 @@ assert.isEmpty(element.right); }); - test('everywhere goes on left', () => { + test('everywhere goes on left', async () => { const sectionView = [{binding: [], text: 'everywhere shortcuts'}]; - update(new Map([[ShortcutSection.EVERYWHERE, sectionView]])); + await update(new Map([[ShortcutSection.EVERYWHERE, sectionView]])); assert.deepEqual(element.left, [ { section: ShortcutSection.EVERYWHERE, @@ -129,9 +130,9 @@ assert.isEmpty(element.right); }); - test('navigation goes on left', () => { + test('navigation goes on left', async () => { const sectionView = [{binding: [], text: 'navigation shortcuts'}]; - update(new Map([[ShortcutSection.NAVIGATION, sectionView]])); + await update(new Map([[ShortcutSection.NAVIGATION, sectionView]])); assert.deepEqual(element.left, [ { section: ShortcutSection.NAVIGATION, @@ -141,9 +142,9 @@ assert.isEmpty(element.right); }); - test('actions go on right', () => { + test('actions go on right', async () => { const sectionView = [{binding: [], text: 'actions shortcuts'}]; - update(new Map([[ShortcutSection.ACTIONS, sectionView]])); + await update(new Map([[ShortcutSection.ACTIONS, sectionView]])); assert.deepEqual(element.right, [ { section: ShortcutSection.ACTIONS, @@ -153,9 +154,9 @@ assert.isEmpty(element.left); }); - test('reply dialog goes on left', () => { + test('reply dialog goes on left', async () => { const sectionView = [{binding: [], text: 'reply dialog shortcuts'}]; - update(new Map([[ShortcutSection.REPLY_DIALOG, sectionView]])); + await update(new Map([[ShortcutSection.REPLY_DIALOG, sectionView]])); assert.deepEqual(element.left, [ { section: ShortcutSection.REPLY_DIALOG, @@ -165,9 +166,9 @@ assert.isEmpty(element.right); }); - test('file list goes on left', () => { + test('file list goes on left', async () => { const sectionView = [{binding: [], text: 'file list shortcuts'}]; - update(new Map([[ShortcutSection.FILE_LIST, sectionView]])); + await update(new Map([[ShortcutSection.FILE_LIST, sectionView]])); assert.deepEqual(element.left, [ { section: ShortcutSection.FILE_LIST, @@ -177,9 +178,9 @@ assert.isEmpty(element.right); }); - test('diffs go on right', () => { + test('diffs go on right', async () => { const sectionView = [{binding: [], text: 'diffs shortcuts'}]; - update(new Map([[ShortcutSection.DIFFS, sectionView]])); + await update(new Map([[ShortcutSection.DIFFS, sectionView]])); assert.deepEqual(element.right, [ { section: ShortcutSection.DIFFS, @@ -189,7 +190,7 @@ assert.isEmpty(element.left); }); - test('multiple sections on each side', () => { + test('multiple sections on each side', async () => { const actionsSectionView = [{binding: [], text: 'actions shortcuts'}]; const diffsSectionView = [{binding: [], text: 'diffs shortcuts'}]; const everywhereSectionView = [ @@ -198,7 +199,7 @@ const navigationSectionView = [ {binding: [], text: 'navigation shortcuts'}, ]; - update( + await update( new Map([ [ShortcutSection.ACTIONS, actionsSectionView], [ShortcutSection.DIFFS, diffsSectionView],
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts index 1528918..ca6dfc1 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts
@@ -11,6 +11,7 @@ stubBaseUrl, stubRestApi, addListenerForTest, + waitEventLoop, } from '../../../test/test-utils'; import { GrRouter, @@ -1173,7 +1174,7 @@ params: {0: '1234', 1: 'comment/6789'}, }; router.handleChangeLegacyRoute(ctx); - await flush(); + await waitEventLoop(); assert.isTrue( redirectStub.calledWithExactly('/c/project/+/1234' + '/comment/6789') );
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts index cd5eac1..e62dcbb 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts
@@ -21,6 +21,7 @@ stubReporting, stubRestApi, stubUsers, + waitEventLoop, waitUntil, } from '../../../test/test-utils'; import {ChangeComments} from '../gr-comment-api/gr-comment-api'; @@ -1301,34 +1302,31 @@ ); }); - function isEditVisibile({ + async function isEditVisibile({ loggedIn, changeStatus, }: { loggedIn: boolean; changeStatus: ChangeStatus; - }) { - return new Promise(resolve => { - element.loggedIn = loggedIn; - element.path = 't.txt'; - element.patchRange = { - basePatchNum: PARENT, - patchNum: 1 as RevisionPatchSetNum, - }; - element.change = { - ...createParsedChange(), - _number: 42 as NumericChangeId, - status: changeStatus, - revisions: { - a: createRevision(1), - b: createRevision(2), - }, - }; - flush(() => { - const editBtn = query(element, '.editButton gr-button'); - resolve(!!editBtn); - }); - }); + }): Promise<boolean> { + element.loggedIn = loggedIn; + element.path = 't.txt'; + element.patchRange = { + basePatchNum: PARENT, + patchNum: 1 as RevisionPatchSetNum, + }; + element.change = { + ...createParsedChange(), + _number: 42 as NumericChangeId, + status: changeStatus, + revisions: { + a: createRevision(1), + b: createRevision(2), + }, + }; + await element.updateComplete; + const editBtn = query(element, '.editButton gr-button'); + return !!editBtn; } test('edit visible only when logged and status NEW', async () => { @@ -1792,7 +1790,7 @@ assert.equal(saveReviewedStub.callCount, callCount); }); - test('file review status with edit loaded', () => { + test('file review status with edit loaded', async () => { const saveReviewedStub = sinon.stub( element.getChangeModel(), 'setReviewedFilesStatus' @@ -1802,7 +1800,7 @@ basePatchNum: 1 as BasePatchSetNum, patchNum: EDIT, }; - flush(); + await waitEventLoop(); assert.isTrue(element.computeEditMode()); element.setReviewed(true); @@ -1824,7 +1822,7 @@ }; await element.updateComplete; - await flush(); + await waitEventLoop(); assert.isTrue(initLineStub.calledOnce); }); @@ -1912,7 +1910,7 @@ }; element.change = change; await element.updateComplete; - await flush(); + await waitEventLoop(); assert.deepEqual(element.commitRange, { baseCommit: 'commit-sha-2' as CommitId, commit: 'commit-sha-4' as CommitId, @@ -1928,7 +1926,7 @@ }; element.change = change; await element.updateComplete; - await flush(); + await waitEventLoop(); assert.deepEqual(element.commitRange, { commit: 'commit-sha-5' as CommitId, baseCommit: 'sha-5-parent' as CommitId, @@ -2459,14 +2457,14 @@ }); }); - test('shift+m navigates to next unreviewed file', () => { + test('shift+m navigates to next unreviewed file', async () => { element.files = getFilesFromFileList(['file1', 'file2', 'file3']); element.reviewedFiles = new Set(['file1', 'file2']); element.path = 'file1'; const reviewedStub = sinon.stub(element, 'setReviewed'); const navStub = sinon.stub(element, 'navToFile'); pressKey(element, 'M'); - flush(); + await waitEventLoop(); assert.isTrue(reviewedStub.lastCall.args[0]); assert.deepEqual(navStub.lastCall.args, [['file1', 'file3'], 1]);
diff --git a/polygerrit-ui/app/elements/edit/gr-default-editor/gr-default-editor_test.ts b/polygerrit-ui/app/elements/edit/gr-default-editor/gr-default-editor_test.ts index 721a280..5481729 100644 --- a/polygerrit-ui/app/elements/edit/gr-default-editor/gr-default-editor_test.ts +++ b/polygerrit-ui/app/elements/edit/gr-default-editor/gr-default-editor_test.ts
@@ -6,7 +6,11 @@ import '../../../test/common-test-setup-karma'; import './gr-default-editor'; import {GrDefaultEditor} from './gr-default-editor'; -import {mockPromise, queryAndAssert} from '../../../test/test-utils'; +import { + mockPromise, + queryAndAssert, + waitEventLoop, +} from '../../../test/test-utils'; import {fixture, html, assert} from '@open-wc/testing'; suite('gr-default-editor tests', () => { @@ -15,7 +19,7 @@ setup(async () => { element = await fixture(html`<gr-default-editor></gr-default-editor>`); element.fileContent = ''; - await flush(); + await waitEventLoop(); }); test('render', () => {
diff --git a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts index f8247f4..02444fb 100644 --- a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts +++ b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts
@@ -222,8 +222,8 @@ assert.isTrue(hideDialogStub.called); assert.isTrue(element.openDialog!.disabled); assert.isFalse(queryStub.called); - // Setup focused manually - in headless mode Chrome sometimes don't - // setup focus. flush and/or flushAsynchronousOperations don't help + // Setup focused manually - in headless mode Chrome sometimes doesn't + // setup focus. waitEventLoop() doesn't help. openAutoComplete.focused = true; openAutoComplete.noDebounce = true; openAutoComplete.text = 'src/test.cpp'; @@ -283,8 +283,8 @@ await showDialogSpy.lastCall.returnValue; assert.isTrue(element.deleteDialog!.disabled); assert.isFalse(queryStub.called); - // Setup focused manually - in headless mode Chrome sometimes don't - // setup focus. flush and/or flushAsynchronousOperations don't help + // Setup focused manually - in headless mode Chrome sometimes doesn't + // setup focus. waitEventLoop() doesn't help. deleteAutocomplete.focused = true; deleteAutocomplete.noDebounce = true; deleteAutocomplete.text = 'src/test.cpp'; @@ -310,8 +310,8 @@ await showDialogSpy.lastCall.returnValue; assert.isTrue(element.deleteDialog!.disabled); assert.isFalse(queryStub.called); - // Setup focused manually - in headless mode Chrome sometimes don't - // setup focus. flush and/or flushAsynchronousOperations don't help + // Setup focused manually - in headless mode Chrome sometimes doesn't + // setup focus. waitEventLoop() doesn't help. deleteAutocomplete.focused = true; deleteAutocomplete.noDebounce = true; deleteAutocomplete.text = 'src/test.cpp'; @@ -370,8 +370,8 @@ await showDialogSpy.lastCall.returnValue; assert.isTrue(element.renameDialog!.disabled); assert.isFalse(queryStub.called); - // Setup focused manually - in headless mode Chrome sometimes don't - // setup focus. flush and/or flushAsynchronousOperations don't help + // Setup focused manually - in headless mode Chrome sometimes doesn't + // setup focus. waitEventLoop() doesn't help. renameAutocomplete.focused = true; renameAutocomplete.noDebounce = true; renameAutocomplete.text = 'src/test.cpp'; @@ -402,8 +402,8 @@ await showDialogSpy.lastCall.returnValue; assert.isTrue(element.renameDialog!.disabled); assert.isFalse(queryStub.called); - // Setup focused manually - in headless mode Chrome sometimes don't - // setup focus. flush and/or flushAsynchronousOperations don't help + // Setup focused manually - in headless mode Chrome sometimes doesn't + // setup focus. waitEventLoop() doesn't help. renameAutocomplete.focused = true; renameAutocomplete.noDebounce = true; renameAutocomplete.text = 'src/test.cpp';
diff --git a/polygerrit-ui/app/elements/plugins/gr-popup-interface/gr-popup-interface_test.ts b/polygerrit-ui/app/elements/plugins/gr-popup-interface/gr-popup-interface_test.ts index dae5e09..14f0b15 100644 --- a/polygerrit-ui/app/elements/plugins/gr-popup-interface/gr-popup-interface_test.ts +++ b/polygerrit-ui/app/elements/plugins/gr-popup-interface/gr-popup-interface_test.ts
@@ -8,7 +8,7 @@ import {GrPopupInterface} from './gr-popup-interface'; import {PluginApi} from '../../../api/plugin'; import {HookApi, PluginElement} from '../../../api/hook'; -import {queryAndAssert} from '../../../test/test-utils'; +import {queryAndAssert, waitEventLoop} from '../../../test/test-utils'; import {LitElement, html} from 'lit'; import {customElement} from 'lit/decorators.js'; import {fixture, assert} from '@open-wc/testing'; @@ -59,7 +59,7 @@ const popup = instance._getElement(); assert.isOk(popup); popup!.appendChild(manual); - await flush(); + await waitEventLoop(); assert.equal( queryAndAssert(container, '#foobar').textContent, 'manual content'
diff --git a/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_test.ts b/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_test.ts index e9c016b..40b6250 100644 --- a/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_test.ts +++ b/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_test.ts
@@ -5,7 +5,7 @@ */ import '../../../test/common-test-setup-karma'; import './gr-agreements-list'; -import {stubRestApi} from '../../../test/test-utils'; +import {stubRestApi, waitEventLoop} from '../../../test/test-utils'; import {GrAgreementsList} from './gr-agreements-list'; import {ContributorAgreementInfo} from '../../../types/common'; import {fixture, html, assert} from '@open-wc/testing'; @@ -27,7 +27,7 @@ element = await fixture(html`<gr-agreements-list></gr-agreements-list>`); await element.loadData(); - await flush(); + await waitEventLoop(); }); test('renders', () => {
diff --git a/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_test.ts b/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_test.ts index db00211..2805aec 100644 --- a/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_test.ts +++ b/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_test.ts
@@ -8,7 +8,7 @@ import {GrGroupList} from './gr-group-list'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {GroupId, GroupInfo, GroupName} from '../../../types/common'; -import {stubRestApi} from '../../../test/test-utils'; +import {stubRestApi, waitEventLoop} from '../../../test/test-utils'; import {fixture, html, assert} from '@open-wc/testing'; suite('gr-group-list tests', () => { @@ -46,7 +46,7 @@ element = await fixture(html`<gr-group-list></gr-group-list>`); await element.loadData(); - await flush(); + await waitEventLoop(); }); test('renders', () => {
diff --git a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.ts b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.ts index d73e841..c4ed9fd 100644 --- a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.ts +++ b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.ts
@@ -6,7 +6,7 @@ import '../../../test/common-test-setup-karma'; import './gr-http-password'; import {GrHttpPassword} from './gr-http-password'; -import {stubRestApi} from '../../../test/test-utils'; +import {stubRestApi, waitEventLoop} from '../../../test/test-utils'; import { createAccountDetailWithId, createServerInfo, @@ -30,7 +30,7 @@ element = await fixture(html`<gr-http-password></gr-http-password>`); await element.loadData(); - await flush(); + await waitEventLoop(); }); test('renders', () => {
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts index 79fb3e5..335192d 100644 --- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts +++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts
@@ -7,7 +7,7 @@ import './gr-settings-view'; import {GrSettingsView} from './gr-settings-view'; import {GerritView} from '../../../services/router/router-model'; -import {queryAll, stubRestApi} from '../../../test/test-utils'; +import {queryAll, stubRestApi, waitEventLoop} from '../../../test/test-utils'; import { AuthInfo, AccountDetailInfo, @@ -522,7 +522,7 @@ const div = await fixture(html`<div></div>`); div.appendChild(newElement); - flush(); + await waitEventLoop(); assert.isTrue(titleChangedStub.called); assert.equal(titleChangedStub.getCall(0).args[0].detail.title, 'Settings');
diff --git a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.ts b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.ts index 9269293..2e69c70 100644 --- a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.ts +++ b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.ts
@@ -5,7 +5,12 @@ */ import '../../../test/common-test-setup-karma'; import './gr-ssh-editor'; -import {mockPromise, query, stubRestApi} from '../../../test/test-utils'; +import { + mockPromise, + query, + stubRestApi, + waitEventLoop, +} from '../../../test/test-utils'; import {GrSshEditor} from './gr-ssh-editor'; import {SshKeyInfo} from '../../../types/common'; import {GrButton} from '../../shared/gr-button/gr-button'; @@ -40,7 +45,7 @@ element = await fixture(html`<gr-ssh-editor></gr-ssh-editor>`); await element.loadData(); - await flush(); + await waitEventLoop(); }); test('renders', () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.ts b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.ts index 4216c11..ef1d4b3 100644 --- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.ts
@@ -10,6 +10,7 @@ queryAndAssert, spyRestApi, stubRestApi, + waitEventLoop, } from '../../../test/test-utils'; import {GrAccountLabel} from './gr-account-label'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; @@ -174,7 +175,7 @@ owner: kermit, reviewers: {}, }; - await flush(); + await waitEventLoop(); }); test('show attention button', () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-alert/gr-alert_test.ts b/polygerrit-ui/app/elements/shared/gr-alert/gr-alert_test.ts index 713afb1..fcf211f 100644 --- a/polygerrit-ui/app/elements/shared/gr-alert/gr-alert_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-alert/gr-alert_test.ts
@@ -8,6 +8,7 @@ import {GrAlert} from './gr-alert'; import {assert} from '@open-wc/testing'; import {GrButton} from '../gr-button/gr-button'; +import {waitEventLoop} from '../../../test/test-utils'; suite('gr-alert tests', () => { let element: GrAlert; @@ -51,7 +52,7 @@ assert.isNull(element.parentNode); element.show('Alert text'); // wait for element to be rendered after being attached to DOM - await flush(); + await waitEventLoop(); assert.equal(element.parentNode, document.body); element.style.setProperty('--gr-alert-transition-duration', '0ms'); element.hide(); @@ -61,7 +62,7 @@ test('action event', async () => { const spy = sinon.spy(); element.show('Alert text'); - await flush(); + await waitEventLoop(); element._actionCallback = spy; assert.isFalse(spy.called); element.shadowRoot!.querySelector<GrButton>('.action')!.click();
diff --git a/polygerrit-ui/app/elements/shared/gr-autocomplete-dropdown/gr-autocomplete-dropdown_test.ts b/polygerrit-ui/app/elements/shared/gr-autocomplete-dropdown/gr-autocomplete-dropdown_test.ts index fbfa0d1..3c88291 100644 --- a/polygerrit-ui/app/elements/shared/gr-autocomplete-dropdown/gr-autocomplete-dropdown_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-autocomplete-dropdown/gr-autocomplete-dropdown_test.ts
@@ -6,7 +6,12 @@ import '../../../test/common-test-setup-karma'; import './gr-autocomplete-dropdown'; import {GrAutocompleteDropdown} from './gr-autocomplete-dropdown'; -import {pressKey, queryAll, queryAndAssert} from '../../../test/test-utils'; +import { + pressKey, + queryAll, + queryAndAssert, + waitEventLoop, +} from '../../../test/test-utils'; import {assertIsDefined} from '../../../utils/common-util'; import {fixture, html, assert} from '@open-wc/testing'; import {Key} from '../../../utils/dom-util'; @@ -25,7 +30,7 @@ {dataValue: 'test value 1', name: 'test name 1', text: '1', label: 'hi'}, {dataValue: 'test value 2', name: 'test name 2', text: '2'}, ]; - await flush(); + await waitEventLoop(); }); teardown(() => { @@ -80,10 +85,10 @@ assert.equal(els[1].innerText.trim(), '2'); }); - test('escape key', () => { + test('escape key', async () => { const closeSpy = sinon.spy(element, 'close'); pressKey(element, Key.ESC); - flush(); + await waitEventLoop(); assert.isTrue(closeSpy.called); }); @@ -140,26 +145,26 @@ assert.equal(element.cursor.index, 0); }); - test('tapping selects item', () => { + test('tapping selects item', async () => { const itemSelectedStub = sinon.stub(); element.addEventListener('item-selected', itemSelectedStub); suggestionsEl().querySelectorAll('li')[1].click(); - flush(); + await waitEventLoop(); assert.deepEqual(itemSelectedStub.lastCall.args[0].detail, { trigger: 'click', selected: suggestionsEl().querySelectorAll('li')[1], }); }); - test('tapping child still selects item', () => { + test('tapping child still selects item', async () => { const itemSelectedStub = sinon.stub(); element.addEventListener('item-selected', itemSelectedStub); const lastElChild = queryAll<HTMLLIElement>(suggestionsEl(), 'li')[0] ?.lastElementChild; assertIsDefined(lastElChild); (lastElChild as HTMLSpanElement).click(); - flush(); + await waitEventLoop(); assert.deepEqual(itemSelectedStub.lastCall.args[0].detail, { trigger: 'click', selected: queryAll<HTMLElement>(suggestionsEl(), 'li')[0],
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts index 9cee8da..343bf51 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -354,13 +354,11 @@ :host([saving]) .date { opacity: 0.5; } - .body { - padding-top: var(--spacing-m); - } .header { align-items: center; cursor: pointer; display: flex; + padding-bottom: var(--spacing-m); } .headerLeft > span { font-weight: var(--font-weight-bold); @@ -1087,9 +1085,11 @@ }); } - private handleSaveButtonClicked() { - if (!this.permanentEditingMode) this.save(); - else this.editing = !this.editing; + private async handleSaveButtonClicked() { + await this.save(); + if (this.permanentEditingMode) { + this.editing = !this.editing; + } } private handlePleaseFix() {
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts index 8765d23..ef3b3b2 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts
@@ -552,6 +552,23 @@ assert.isFalse(element.saving); }); + test('previewing formatting triggers save', async () => { + element.permanentEditingMode = true; + + const saveStub = sinon.stub(element, 'save').returns(Promise.resolve()); + + element.comment = createDraft(); + element.editing = true; + element.messageText = 'something, not important'; + await element.updateComplete; + + assert.isFalse(saveStub.called); + + queryAndAssert<GrButton>(element, '.save').click(); + + assert.isTrue(saveStub.called); + }); + test('save failed', async () => { sinon .stub(element.getCommentsModel(), 'saveDraft')
diff --git a/polygerrit-ui/app/elements/shared/gr-copy-clipboard/gr-copy-clipboard_test.ts b/polygerrit-ui/app/elements/shared/gr-copy-clipboard/gr-copy-clipboard_test.ts index 3dfd925..0baff11 100644 --- a/polygerrit-ui/app/elements/shared/gr-copy-clipboard/gr-copy-clipboard_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-copy-clipboard/gr-copy-clipboard_test.ts
@@ -12,12 +12,17 @@ suite('gr-copy-clipboard tests', () => { let element: GrCopyClipboard; + let clipboardSpy: sinon.SinonStub; setup(async () => { + clipboardSpy = sinon + .stub(navigator.clipboard, 'writeText') + .returns(Promise.resolve()); + sinon.spy(document, 'dispatchEvent'); element = await fixture(html`<gr-copy-clipboard></gr-copy-clipboard>`); element.text = `git fetch http://gerrit@localhost:8080/a/test-project refs/changes/05/5/1 && git checkout FETCH_HEAD`; - await flush(); + await element.updateComplete; }); test('render', () => { @@ -55,7 +60,6 @@ }); test('copy to clipboard', () => { - const clipboardSpy = sinon.spy(navigator.clipboard, 'writeText'); queryAndAssert<GrButton>(element, '.copyToClipboard').click(); assert.isTrue(clipboardSpy.called); }); @@ -88,7 +92,7 @@ const input = queryAndAssert(element, 'input'); assert.notEqual(getComputedStyle(input).display, 'none'); element.hideInput = true; - await flush(); + await element.updateComplete; assert.equal(getComputedStyle(input).display, 'none'); });
diff --git a/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog_test.ts b/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog_test.ts index bbbfd5c..1bab855 100644 --- a/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog_test.ts
@@ -6,7 +6,12 @@ import '../../../test/common-test-setup-karma'; import './gr-dialog'; import {GrDialog} from './gr-dialog'; -import {isHidden, pressKey, queryAndAssert} from '../../../test/test-utils'; +import { + isHidden, + pressKey, + queryAndAssert, + waitEventLoop, +} from '../../../test/test-utils'; import {fixture, html, assert} from '@open-wc/testing'; import {GrButton} from '../gr-button/gr-button'; @@ -121,7 +126,7 @@ const handleConfirmStub = sinon.stub(element, '_handleConfirm'); const handleKeydownSpy = sinon.spy(element, '_handleKeydown'); pressKey(queryAndAssert(element, 'main'), 'Enter'); - await flush(); + await waitEventLoop(); assert.isTrue(handleKeydownSpy.called); assert.isFalse(handleConfirmStub.called); @@ -130,7 +135,7 @@ await element.updateComplete; pressKey(queryAndAssert(element, 'main'), 'Enter'); - await flush(); + await waitEventLoop(); assert.isTrue(handleConfirmStub.called); });
diff --git a/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list_test.ts b/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list_test.ts index 797570a..6026b05 100644 --- a/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list_test.ts
@@ -6,7 +6,12 @@ import '../../../test/common-test-setup-karma'; import './gr-dropdown-list'; import {GrDropdownList} from './gr-dropdown-list'; -import {query, queryAll, queryAndAssert} from '../../../test/test-utils'; +import { + query, + queryAll, + queryAndAssert, + waitEventLoop, +} from '../../../test/test-utils'; import {PaperListboxElement} from '@polymer/paper-listbox'; import {Timestamp} from '../../../types/common'; import {assertIsDefined} from '../../../utils/common-util'; @@ -201,7 +206,7 @@ }, ]; await element.updateComplete; - await flush(); + await waitEventLoop(); assert.equal( queryAndAssert<PaperListboxElement>(element, 'paper-listbox').selected,
diff --git a/polygerrit-ui/app/elements/shared/gr-editable-label/gr-editable-label_test.ts b/polygerrit-ui/app/elements/shared/gr-editable-label/gr-editable-label_test.ts index 9979fcb..bda6ff9 100644 --- a/polygerrit-ui/app/elements/shared/gr-editable-label/gr-editable-label_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-editable-label/gr-editable-label_test.ts
@@ -16,7 +16,7 @@ GrAutocomplete, } from '../gr-autocomplete/gr-autocomplete'; import {Key} from '../../../utils/dom-util'; -import {pressKey, waitUntil} from '../../../test/test-utils'; +import {pressKey, waitEventLoop, waitUntil} from '../../../test/test-utils'; import {IronInputElement} from '@polymer/iron-input'; suite('gr-editable-label tests', () => { @@ -120,7 +120,7 @@ assert.equal(elementNoPlaceholder.title, ''); element.value = 'value text'; - await flush(); + await waitEventLoop(); assert.equal(element.title, 'value text'); }); @@ -130,14 +130,14 @@ assert.isFalse(element.editing); label.click(); - await flush(); + await waitEventLoop(); assert.isTrue(element.editing); assert.isFalse(editedSpy.called); element.inputText = 'new text'; pressKey(input, Key.ENTER); - await flush(); + await waitEventLoop(); assert.isTrue(editedSpy.called); assert.equal(input.value, 'new text'); @@ -150,14 +150,14 @@ assert.isFalse(element.editing); label.click(); - await flush(); + await waitEventLoop(); assert.isTrue(element.editing); assert.isFalse(editedSpy.called); element.inputText = 'new text'; pressKey(queryAndAssert<GrButton>(element, '#saveBtn'), Key.ENTER); - await flush(); + await waitEventLoop(); assert.isTrue(editedSpy.called); assert.equal(input.value, 'new text'); @@ -170,14 +170,14 @@ assert.isFalse(element.editing); label.click(); - await flush(); + await waitEventLoop(); assert.isTrue(element.editing); assert.isFalse(editedSpy.called); element.inputText = 'new text'; pressKey(input, Key.ESC); - await flush(); + await waitEventLoop(); assert.isFalse(editedSpy.called); // Text changes should be discarded. @@ -191,7 +191,7 @@ assert.isFalse(element.editing); label.click(); - await flush(); + await waitEventLoop(); assert.isTrue(element.editing); assert.isFalse(editedSpy.called); @@ -199,7 +199,7 @@ element.inputText = 'new text'; // Press escape: queryAndAssert<GrButton>(element, '#cancelBtn').click(); - await flush(); + await waitEventLoop(); assert.isFalse(editedSpy.called); // Text changes should be discarded.
diff --git a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts index bff7a7b..7d21146 100644 --- a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.ts
@@ -19,13 +19,13 @@ AccountId, EmailAddress, ReviewerState, -} from '../../../api/rest-api.js'; +} from '../../../api/rest-api'; import { createAccountDetailWithId, createChange, createDetailedLabelInfo, -} from '../../../test/test-data-generators.js'; -import {GrButton} from '../gr-button/gr-button.js'; +} from '../../../test/test-data-generators'; +import {GrButton} from '../gr-button/gr-button'; import {EventType} from '../../../types/events'; suite('gr-hovercard-account tests', () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.js index b8631f4..7dd413f 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.js +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.js
@@ -9,7 +9,11 @@ import {EventType} from '../../../api/plugin'; import {PLUGIN_LOADING_TIMEOUT_MS} from './gr-api-utils'; import {getPluginLoader} from './gr-plugin-loader'; -import {stubRestApi, stubBaseUrl} from '../../../test/test-utils'; +import { + stubRestApi, + stubBaseUrl, + waitEventLoop, +} from '../../../test/test-utils'; import {getAppContext} from '../../../services/app-context'; import {assert} from '@open-wc/testing'; @@ -133,7 +137,7 @@ // Timeout on loading plugins clock.tick(PLUGIN_LOADING_TIMEOUT_MS * 2); - await flush(); + await waitEventLoop(); assert.isTrue(spy.called); });
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js index fdc44c0..2e46de8 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-action-context_test.js
@@ -6,7 +6,7 @@ import '../../../test/common-test-setup-karma'; import './gr-js-api-interface'; import {GrPluginActionContext} from './gr-plugin-action-context'; -import {addListenerForTest} from '../../../test/test-utils'; +import {addListenerForTest, waitEventLoop} from '../../../test/test-utils'; import {EventType} from '../../../types/events'; import {assert} from '@open-wc/testing'; @@ -29,7 +29,7 @@ sinon.stub(plugin, 'popup').returns(Promise.resolve(popupApiStub)); const el = document.createElement('span'); instance.popup(el); - await flush(); + await waitEventLoop(); assert.isTrue(popupApiStub._getElement.called); instance.hide(); assert.isTrue(popupApiStub.close.called); @@ -70,9 +70,9 @@ document.body.appendChild(button); }); - test('click', () => { + test('click', async () => { button.click(); - flush(); + await waitEventLoop(); assert.isTrue(clickStub.called); assert.equal(button.textContent, 'foo'); }); @@ -127,7 +127,7 @@ const errorStub = sinon.stub(); addListenerForTest(document, EventType.SHOW_ALERT, errorStub); instance.call(); - await flush(); + await waitEventLoop(); assert.isTrue(errorStub.calledOnce); assert.equal(errorStub.args[0][0].detail.message, 'Plugin network error: Error: boom');
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.ts b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.ts index cdac08e..91646f0 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-plugin-loader_test.ts
@@ -6,7 +6,11 @@ import '../../../test/common-test-setup-karma'; import {PLUGIN_LOADING_TIMEOUT_MS} from './gr-api-utils'; import {PluginLoader, _testOnly_resetPluginLoader} from './gr-plugin-loader'; -import {resetPlugins, stubBaseUrl} from '../../../test/test-utils'; +import { + resetPlugins, + stubBaseUrl, + waitEventLoop, +} from '../../../test/test-utils'; import {addListenerForTest, stubRestApi} from '../../../test/test-utils'; import {PluginApi} from '../../../api/plugin'; import {SinonFakeTimers} from 'sinon'; @@ -74,11 +78,11 @@ ); pluginsLoadedStub.reset(); (window.Gerrit as any)._loadPlugins([]); - await flush(); + await waitEventLoop(); assert.isTrue(pluginsLoadedStub.called); }); - test('arePluginsLoaded', () => { + test('arePluginsLoaded', async () => { assert.isFalse(pluginLoader.arePluginsLoaded()); const plugins = [ 'http://test.com/plugins/foo/static/test.js', @@ -90,7 +94,7 @@ // Timeout on loading plugins clock.tick(PLUGIN_LOADING_TIMEOUT_MS * 2); - flush(); + await waitEventLoop(); assert.isTrue(pluginLoader.arePluginsLoaded()); }); @@ -109,12 +113,12 @@ ]; pluginLoader.loadPlugins(plugins); - await flush(); + await waitEventLoop(); assert.isTrue(pluginsLoadedStub.calledWithExactly(['foo', 'bar'])); assert.isTrue(pluginLoader.arePluginsLoaded()); }); - test('isPluginEnabled and isPluginLoaded', () => { + test('isPluginEnabled and isPluginLoaded', async () => { sinon.stub(pluginLoader, '_loadJsPlugin').callsFake(url => { window.Gerrit.install(() => void 0, undefined, url); }); @@ -129,7 +133,7 @@ plugins.every(plugin => pluginLoader.isPluginEnabled(plugin)) ); - flush(); + await waitEventLoop(); assert.isTrue(pluginLoader.arePluginsLoaded()); assert.isTrue(plugins.every(plugin => pluginLoader.isPluginLoaded(plugin))); }); @@ -162,7 +166,7 @@ pluginLoader.loadPlugins(plugins); - await flush(); + await waitEventLoop(); assert.isTrue(pluginsLoadedStub.calledWithExactly(['bar'])); assert.isTrue(pluginLoader.arePluginsLoaded()); assert.isTrue(alertStub.calledOnce); @@ -199,7 +203,7 @@ plugins.every(plugin => pluginLoader.isPluginEnabled(plugin)) ); - await flush(); + await waitEventLoop(); assert.isTrue(pluginsLoadedStub.calledWithExactly(['bar'])); assert.isTrue(pluginLoader.arePluginsLoaded()); assert.isTrue(alertStub.calledOnce); @@ -233,7 +237,7 @@ pluginLoader.loadPlugins(plugins); - await flush(); + await waitEventLoop(); assert.isTrue(pluginsLoadedStub.calledWithExactly([])); assert.isTrue(pluginLoader.arePluginsLoaded()); assert.isTrue(alertStub.calledTwice); @@ -259,7 +263,7 @@ pluginLoader.loadPlugins(plugins); - await flush(); + await waitEventLoop(); assert.isTrue(pluginsLoadedStub.calledWithExactly(['foo'])); assert.isTrue(pluginLoader.arePluginsLoaded()); assert.isTrue(alertStub.calledOnce); @@ -281,7 +285,7 @@ ]; pluginLoader.loadPlugins(plugins); - await flush(); + await waitEventLoop(); assert.isTrue(pluginsLoadedStub.calledWithExactly(['foo', 'bar'])); assert.isTrue(pluginLoader.arePluginsLoaded()); });
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-reporting-js-api_test.ts b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-reporting-js-api_test.ts index 98e04a3..d1c9f93 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-reporting-js-api_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-reporting-js-api_test.ts
@@ -3,13 +3,13 @@ * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import '../../../test/common-test-setup-karma.js'; -import '../../change/gr-reply-dialog/gr-reply-dialog.js'; -import {getAppContext} from '../../../services/app-context.js'; -import {stubRestApi} from '../../../test/test-utils.js'; -import {PluginApi} from '../../../api/plugin.js'; -import {ReportingService} from '../../../services/gr-reporting/gr-reporting.js'; -import {ReportingPluginApi} from '../../../api/reporting.js'; +import '../../../test/common-test-setup-karma'; +import '../../change/gr-reply-dialog/gr-reply-dialog'; +import {getAppContext} from '../../../services/app-context'; +import {stubRestApi} from '../../../test/test-utils'; +import {PluginApi} from '../../../api/plugin'; +import {ReportingService} from '../../../services/gr-reporting/gr-reporting'; +import {ReportingPluginApi} from '../../../api/reporting'; import {assert} from '@open-wc/testing'; suite('gr-reporting-js-api tests', () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.ts b/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.ts index 8589214..12a40d8 100644 --- a/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.ts
@@ -5,6 +5,7 @@ */ import {assert} from '@open-wc/testing'; import '../../../test/common-test-setup-karma'; +import {waitEventLoop} from '../../../test/test-utils'; import './gr-lib-loader'; import {GrLibLoader} from './gr-lib-loader'; @@ -36,12 +37,12 @@ grLibLoader.getLibrary(libraryConfig).then(loaded2); resolveLoad(); - await flush(); + await waitEventLoop(); const lateLoaded = sinon.stub(); grLibLoader.getLibrary(libraryConfig).then(lateLoaded); - await flush(); + await waitEventLoop(); assert.isTrue(loaded1.calledOnce); assert.isTrue(loaded2.calledOnce); @@ -58,12 +59,12 @@ grLibLoader.getLibrary(libraryConfig).catch(failed2); rejectLoad(); - await flush(); + await waitEventLoop(); const lateFailed = sinon.stub(); grLibLoader.getLibrary(libraryConfig).catch(lateFailed); - await flush(); + await waitEventLoop(); assert.isTrue(failed1.calledOnce); assert.isTrue(failed2.calledOnce); @@ -84,12 +85,12 @@ grLibLoader.getLibrary(libraryConfig).then(loaded2); resolveLoad(); - await flush(); + await waitEventLoop(); const lateLoaded = sinon.stub(); grLibLoader.getLibrary(libraryConfig).then(lateLoaded); - await flush(); + await waitEventLoop(); assert.isTrue(configureCallback.calledOnce); }); @@ -110,7 +111,7 @@ (window as any).library = library; resolveLoad(); - await flush(); + await waitEventLoop(); assert.isTrue(loaded1.calledWith(library)); assert.isTrue(loaded2.calledWith(library)); @@ -118,7 +119,7 @@ const lateLoaded = sinon.stub(); grLibLoader.getLibrary(libraryConfig).then(lateLoaded); - await flush(); + await waitEventLoop(); assert.isTrue(lateLoaded.calledWith(library)); }); @@ -147,12 +148,12 @@ grLibLoader.getLibrary(libraryConfig).then(loaded2); resolveLoad(); - await flush(); + await waitEventLoop(); const lateLoaded = sinon.stub(); grLibLoader.getLibrary(libraryConfig).then(lateLoaded); - await flush(); + await waitEventLoop(); assert.isFalse(loadStub.called); assert.isTrue(loaded1.called); @@ -170,7 +171,7 @@ grLibLoader.getLibrary(libraryConfig); resolveLoad(); - await flush(); + await waitEventLoop(); assert.isTrue((window as any).library.initialize.calledOnce); }); @@ -185,7 +186,7 @@ grLibLoader.getLibrary(libraryConfig); resolveLoad(); - await flush(); + await waitEventLoop(); assert.isTrue(loadStub.called); });
diff --git a/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip_test.ts b/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip_test.ts index c79facc..bad44b5 100644 --- a/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-linked-chip/gr-linked-chip_test.ts
@@ -6,7 +6,7 @@ import '../../../test/common-test-setup-karma'; import './gr-linked-chip'; import {GrLinkedChip} from './gr-linked-chip'; -import {queryAndAssert} from '../../../test/test-utils'; +import {queryAndAssert, waitEventLoop} from '../../../test/test-utils'; import {fixture, html, assert} from '@open-wc/testing'; import {GrButton} from '../gr-button/gr-button'; @@ -40,7 +40,7 @@ test('remove fired', async () => { const spy = sinon.spy(); element.addEventListener('remove', spy); - await flush(); + await waitEventLoop(); queryAndAssert<GrButton>(element, '#remove').click(); assert.isTrue(spy.called); });
diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper_test.ts b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper_test.ts index b6e7098..18995df 100644 --- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper_test.ts
@@ -10,7 +10,7 @@ GrRestApiHelper, } from './gr-rest-api-helper'; import {getAppContext} from '../../../../services/app-context'; -import {stubAuth} from '../../../../test/test-utils'; +import {stubAuth, waitEventLoop} from '../../../../test/test-utils'; import {FakeScheduler} from '../../../../services/scheduler/fake-scheduler'; import {RetryScheduler} from '../../../../services/scheduler/retry-scheduler'; import {ParsedJSON} from '../../../../types/common'; @@ -71,13 +71,13 @@ async function assertReadRequest() { assert.equal(readScheduler.scheduled.length, 1); await readScheduler.resolve(); - await flush(); + await waitEventLoop(); } async function assertWriteRequest() { assert.equal(writeScheduler.scheduled.length, 1); await writeScheduler.resolve(); - await flush(); + await waitEventLoop(); } suite('send()', () => { @@ -292,7 +292,7 @@ ); // Flush the retry scheduler clock.tick(50); - await flush(); + await waitEventLoop(); // We expect a retry. await assertReadRequest(); const res: Response = await promise;
diff --git a/polygerrit-ui/app/elements/shared/gr-vote-chip/gr-vote-chip_test.ts b/polygerrit-ui/app/elements/shared/gr-vote-chip/gr-vote-chip_test.ts index ad1c5b3..32b703c 100644 --- a/polygerrit-ui/app/elements/shared/gr-vote-chip/gr-vote-chip_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-vote-chip/gr-vote-chip_test.ts
@@ -23,19 +23,14 @@ }); suite('with QuickLabelInfo', () => { - let element: GrVoteChip; - - setup(async () => { + test('renders positive', async () => { const labelInfo = { ...createQuickLabelInfo(), approved: createAccountWithIdNameAndEmail(), }; - element = await fixture<GrVoteChip>( + const element = await fixture<GrVoteChip>( html`<gr-vote-chip .label=${labelInfo}></gr-vote-chip>` ); - }); - - test('renders', () => { assert.shadowDom.equal( element, /* HTML */ ` <gr-tooltip-content @@ -47,6 +42,26 @@ </gr-tooltip-content>` ); }); + + test('renders negative', async () => { + const labelInfo = { + ...createQuickLabelInfo(), + rejected: createAccountWithIdNameAndEmail(), + }; + const element = await fixture<GrVoteChip>( + html`<gr-vote-chip .label=${labelInfo}></gr-vote-chip>` + ); + assert.shadowDom.equal( + element, + /* HTML */ ` <gr-tooltip-content + class="container" + has-tooltip="" + title="" + > + <div class="min vote-chip">✗</div> + </gr-tooltip-content>` + ); + }); }); suite('with DetailedLabelInfo', () => { @@ -116,5 +131,50 @@ </gr-tooltip-content>` ); }); + + test('renders with tooltip who voted', async () => { + vote.name = 'Tester'; + const labelInfo = { + all: [{value: 2}, {value: 1}], + values: {'+2': 'Great'}, + }; + element = await fixture<GrVoteChip>( + html`<gr-vote-chip + .label=${labelInfo} + .vote=${vote} + tooltip-with-who-voted + ></gr-vote-chip>` + ); + assert.shadowDom.equal( + element, + /* HTML */ ` <gr-tooltip-content + class="container" + has-tooltip="" + title="Tester: Great" + > + <div class="max vote-chip">+2</div> + </gr-tooltip-content>` + ); + }); + + test('renders with display value instead of latest vote', async () => { + element = await fixture<GrVoteChip>( + html`<gr-vote-chip + .displayValue=${-1} + .label=${labelInfo} + .vote=${vote} + ></gr-vote-chip>` + ); + assert.shadowDom.equal( + element, + /* HTML */ ` <gr-tooltip-content + class="container" + has-tooltip="" + title="" + > + <div class="min vote-chip">-1</div> + </gr-tooltip-content>` + ); + }); }); });
diff --git a/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls_test.ts b/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls_test.ts index 4d28f0b..ee920d2 100644 --- a/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls_test.ts +++ b/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls_test.ts
@@ -12,6 +12,7 @@ import {GrDiffGroup, GrDiffGroupType} from '../gr-diff/gr-diff-group'; import {DiffFileMetaInfo, DiffInfo, SyntaxBlock} from '../../../api/diff'; import {fixture, html, assert} from '@open-wc/testing'; +import {waitEventLoop} from '../../../test/test-utils'; suite('gr-context-control tests', () => { let element: GrContextControls; @@ -22,7 +23,7 @@ element.renderPreferences = {}; const div = await fixture(html`<div></div>`); div.appendChild(element); - await flush(); + await waitEventLoop(); }); function createContextGroup(options: {offset?: number; count?: number}) { @@ -45,7 +46,7 @@ test('no +10 buttons for 10 or less lines', async () => { element.group = createContextGroup({count: 10}); - await flush(); + await waitEventLoop(); const buttons = element.shadowRoot!.querySelectorAll( 'paper-button.showContext' @@ -58,7 +59,7 @@ element.group = createContextGroup({offset: 0, count: 20}); element.showConfig = 'below'; - await flush(); + await waitEventLoop(); const buttons = element.shadowRoot!.querySelectorAll( 'paper-button.showContext' @@ -76,7 +77,7 @@ element.group = createContextGroup({offset: 10, count: 20}); element.showConfig = 'both'; - await flush(); + await waitEventLoop(); const buttons = element.shadowRoot!.querySelectorAll( 'paper-button.showContext' @@ -96,7 +97,7 @@ element.group = createContextGroup({offset: 30, count: 20}); element.showConfig = 'above'; - await flush(); + await waitEventLoop(); const buttons = element.shadowRoot!.querySelectorAll( 'paper-button.showContext' @@ -122,7 +123,7 @@ element.group = createContextGroup({offset: 0, count: 20}); element.showConfig = 'below'; - await flush(); + await waitEventLoop(); const fullExpansionButtons = element.shadowRoot!.querySelectorAll( '.fullExpansion paper-button' @@ -151,7 +152,7 @@ element.group = createContextGroup({offset: 10, count: 20}); element.showConfig = 'both'; - await flush(); + await waitEventLoop(); const fullExpansionButtons = element.shadowRoot!.querySelectorAll( '.fullExpansion paper-button' @@ -188,7 +189,7 @@ element.group = createContextGroup({offset: 30, count: 20}); element.showConfig = 'above'; - await flush(); + await waitEventLoop(); const fullExpansionButtons = element.shadowRoot!.querySelectorAll( '.fullExpansion paper-button' @@ -228,7 +229,7 @@ element.group = createContextGroup({offset: 10, count: 20}); element.showConfig = 'both'; - await flush(); + await waitEventLoop(); const blockExpansionButtons = element.shadowRoot!.querySelectorAll( '.blockExpansion paper-button' @@ -280,7 +281,7 @@ element.group = createContextGroup({offset: 10, count: 20}); element.showConfig = 'both'; - await flush(); + await waitEventLoop(); const blockExpansionButtons = element.shadowRoot!.querySelectorAll( '.blockExpansion paper-button' @@ -325,7 +326,7 @@ ]); element.group = createContextGroup({offset: 10, count: 20}); element.showConfig = 'both'; - await flush(); + await waitEventLoop(); const blockExpansionButtons = element.shadowRoot!.querySelectorAll( '.blockExpansion paper-button' @@ -343,7 +344,7 @@ element.group = createContextGroup({offset: 10, count: 20}); element.showConfig = 'both'; - await flush(); + await waitEventLoop(); const blockExpansionButtons = element.shadowRoot!.querySelectorAll( '.blockExpansion paper-button'
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-side-by-side.ts b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-side-by-side.ts index 7e262a4..f7d1552 100644 --- a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-side-by-side.ts +++ b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-side-by-side.ts
@@ -111,8 +111,6 @@ rightLine.beforeNumber !== 'FILE' && rightLine.beforeNumber !== 'LOST' ) { - row.setAttribute('role', 'button'); - row.setAttribute('aria-roledescription', 'Code line'); row.setAttribute( 'aria-labelledby', [
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-unified.ts b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-unified.ts index 8fcdf2e..a06701b 100644 --- a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-unified.ts +++ b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-builder-unified.ts
@@ -124,8 +124,6 @@ // browsers will again compute a11y label even for tr when it is focused. // TODO: Remove when Chrome 102 is out of date for 1 year. if (line.beforeNumber !== 'FILE' && line.beforeNumber !== 'LOST') { - row.setAttribute('role', 'button'); - row.setAttribute('aria-roledescription', 'Code line'); row.setAttribute( 'aria-labelledby', [
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer.ts b/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer.ts index b96b156..19e0e22 100644 --- a/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer.ts +++ b/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer.ts
@@ -3,7 +3,7 @@ * Copyright 2021 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import {DiffLayer, DiffLayerListener} from '../../../types/types'; +import {DiffLayer} from '../../../types/types'; import {GrDiffLine, Side, TokenHighlightListener} from '../../../api/diff'; import {assertIsDefined} from '../../../utils/common-util'; import {GrAnnotation} from '../gr-diff-highlight/gr-annotation'; @@ -44,12 +44,6 @@ const TOKEN_OCCURRENCES_LIMIT = 1000; /** - * Token highlighting is only useful for code on-screen, so we only highlight - * the nearest set of tokens up to this limit. - */ -const TOKEN_HIGHLIGHT_LIMIT = 100; - -/** * When a user hovers over a token in the diff, then this layer makes sure that * all occurrences of this token are annotated with the 'token-highlight' css * class. And removes that class when the user moves the mouse away from the @@ -61,9 +55,6 @@ * And when that re-rendering happens the appropriate css class is added. */ export class TokenHighlightLayer implements DiffLayer { - /** The only listener is typically the renderer of gr-diff. */ - private listeners: DiffLayerListener[] = []; - /** The currently highlighted token. */ private currentHighlight?: string; @@ -92,9 +83,7 @@ * Keeps track of where tokens occur in a file during rendering, so that it is * easy to look up when processing mouse events. */ - private tokenToLinesLeft = new Map<string, Set<number>>(); - - private tokenToLinesRight = new Map<string, Set<number>>(); + private tokenToElements = new Map<string, Set<HTMLElement>>(); private hoveredElement?: Element; @@ -110,12 +99,7 @@ }); } - annotate( - el: HTMLElement, - _: HTMLElement, - line: GrDiffLine, - side: Side - ): void { + annotate(el: HTMLElement, _1: HTMLElement, _2: GrDiffLine, _3: Side): void { const text = el.textContent; if (!text) return; // Binary files encoded as text for example can have super long lines @@ -132,7 +116,7 @@ if (length > TOKEN_LENGTH_LIMIT) continue; atLeastOneTokenMatched = true; const highlightTypeClass = - token === this.currentHighlight ? CSS_HIGHLIGHT : CSS_TOKEN; + token === this.currentHighlight ? CSS_HIGHLIGHT : ''; const textClass = `${TOKEN_TEXT_PREFIX}${token}`; const indexClass = `${TOKEN_INDEX_PREFIX}${index}`; // We add the TOKEN_TEXT_PREFIX class so that we can look up the token later easily @@ -142,12 +126,12 @@ el, index, length, - `${textClass} ${indexClass} ${highlightTypeClass}` + `${textClass} ${indexClass} ${CSS_TOKEN} ${highlightTypeClass}` ); // We could try to detect whether we are re-rendering instead of initially // rendering the line. Then we would not have to call storeLineForToken() // again. But since the Set swallows the duplicates we don't care. - this.storeLineForToken(token, line, side); + this.storeElementsForToken(token, el, textClass); } if (atLeastOneTokenMatched) { // These listeners do not have to be cleaned, because listeners are @@ -162,21 +146,23 @@ } } - private storeLineForToken(token: string, line: GrDiffLine, side: Side) { - const tokenToLines = - side === Side.LEFT ? this.tokenToLinesLeft : this.tokenToLinesRight; - // Just to make sure that we don't break down on large files. - if (tokenToLines.size > TOKEN_COUNT_LIMIT) return; - let numbers = tokenToLines.get(token); - if (!numbers) { - numbers = new Set<number>(); - tokenToLines.set(token, numbers); + private storeElementsForToken( + token: string, + lineEl: HTMLElement, + cssClass: string + ) { + for (const el of lineEl.querySelectorAll(`.${cssClass}`)) { + let tokenEls = this.tokenToElements.get(token); + if (!tokenEls) { + // Just to make sure that we don't break down on large files. + if (this.tokenToElements.size > TOKEN_COUNT_LIMIT) return; + tokenEls = new Set<HTMLElement>(); + this.tokenToElements.set(token, tokenEls); + } + // Just to make sure that we don't break down on large files. + if (tokenEls.size > TOKEN_OCCURRENCES_LIMIT) return; + tokenEls.add(el as HTMLElement); } - // Just to make sure that we don't break down on large files. - if (numbers.size > TOKEN_OCCURRENCES_LIMIT) return; - const lineNumber = - side === Side.LEFT ? line.beforeNumber : line.afterNumber; - numbers.add(Number(lineNumber)); } private handleTokenMouseOut(e: MouseEvent) { @@ -234,10 +220,7 @@ } { if (!(el instanceof Element)) return {line: 0, token: undefined, element: undefined}; - if ( - el.classList.contains(CSS_TOKEN) || - el.classList.contains(CSS_HIGHLIGHT) - ) { + if (el.classList.contains(CSS_TOKEN)) { const tkTextClass = [...el.classList].find(c => c.startsWith(TOKEN_TEXT_PREFIX) ); @@ -265,8 +248,8 @@ this.currentHighlightLineNumber === newLineNumber ) return; + const oldHighlight = this.currentHighlight; - const oldLineNumber = this.currentHighlightLineNumber; this.currentHighlight = newHighlight; this.currentHighlightLineNumber = newLineNumber; this.triggerTokenHighlightEvent( @@ -274,8 +257,21 @@ newLineNumber, newHoveredElement ); - this.notifyForToken(oldHighlight, oldLineNumber); - this.notifyForToken(newHighlight, newLineNumber); + this.toggleTokenHighlight(oldHighlight, CSS_HIGHLIGHT); + this.toggleTokenHighlight(newHighlight, CSS_HIGHLIGHT); + } + + private toggleTokenHighlight(token: string | undefined, cssClass: string) { + if (!token) { + return; + } + const tokenEls = this.tokenToElements.get(token); + if (!tokenEls) { + return; + } + for (const el of tokenEls) { + el.classList.toggle(cssClass); + } } triggerTokenHighlightEvent( @@ -306,58 +302,4 @@ }; this.tokenHighlightListener({token, element, side, range}); } - - getSortedLinesForSide( - lineMapping: Map<string, Set<number>>, - token: string | undefined, - lineNumber: number - ): Array<number> { - if (!token) return []; - const lineSet = lineMapping.get(token); - if (!lineSet) return []; - const lines = [...lineSet]; - lines.sort((a, b) => { - const da = Math.abs(a - lineNumber); - const db = Math.abs(b - lineNumber); - // For equal distance, prefer lines later in the file over earlier in the - // file. This ensures total ordering. - if (da === db) return b - a; - // Compare the distance to lineNumber. - return da - db; - }); - return lines.slice(0, TOKEN_HIGHLIGHT_LIMIT); - } - - notifyForToken(token: string | undefined, lineNumber: number) { - const leftLines = this.getSortedLinesForSide( - this.tokenToLinesLeft, - token, - lineNumber - ); - for (const line of leftLines) { - this.notifyListeners(line, Side.LEFT); - } - const rightLines = this.getSortedLinesForSide( - this.tokenToLinesRight, - token, - lineNumber - ); - for (const line of rightLines) { - this.notifyListeners(line, Side.RIGHT); - } - } - - addListener(listener: DiffLayerListener) { - this.listeners.push(listener); - } - - removeListener(listener: DiffLayerListener) { - this.listeners = this.listeners.filter(f => f !== listener); - } - - notifyListeners(line: number, side: Side) { - for (const listener of this.listeners) { - listener(line, line, side); - } - } }
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer_test.ts b/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer_test.ts index ef2e3d9..9bcc7f4 100644 --- a/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer_test.ts +++ b/polygerrit-ui/app/embed/diff/gr-diff-builder/token-highlight-layer_test.ts
@@ -5,7 +5,7 @@ */ import '../../../test/common-test-setup-karma'; import {Side, TokenHighlightEventDetails} from '../../../api/diff'; -import {GrDiffLine, GrDiffLineType} from '../gr-diff/gr-diff-line.js'; +import {GrDiffLine, GrDiffLineType} from '../gr-diff/gr-diff-line'; import {HOVER_DELAY_MS, TokenHighlightLayer} from './token-highlight-layer'; import {GrAnnotation} from '../gr-diff-highlight/gr-annotation'; import {html, render} from 'lit'; @@ -55,6 +55,7 @@ highlightDetails?: TokenHighlightEventDetails ) { tokenHighlightingCalls.push({details: highlightDetails}); + listener.notify({details: highlightDetails}); } setup(async () => { @@ -63,7 +64,6 @@ container = document.createElement('div'); document.body.appendChild(container); highlighter = new TokenHighlightLayer(container, tokenHighlightListener); - highlighter.addListener((...args) => listener.notify(...args)); }); teardown(() => { @@ -126,21 +126,21 @@ el, 0, 5, - 'tk-text-these tk-index-0 token' + 'tk-text-these tk-index-0 token ' ); assertAnnotation( annotateElementStub.args[1], el, 6, 3, - 'tk-text-are tk-index-6 token' + 'tk-text-are tk-index-6 token ' ); assertAnnotation( annotateElementStub.args[2], el, 10, 5, - 'tk-text-words tk-index-10 token' + 'tk-text-words tk-index-10 token ' ); }); @@ -196,10 +196,8 @@ // After a total of HOVER_DELAY_MS ms the hover behavior should trigger. clock.tick(HOVER_DELAY_MS - 100); - assert.equal(listener.pending, 2); + assert.equal(listener.pending, 1); assert.equal(_testOnly_allTasks.size, 0); - assert.deepEqual(listener.shift(), [1, 1, Side.LEFT]); - assert.deepEqual(listener.shift(), [2, 2, Side.RIGHT]); }); test('highlighting spans many lines', async () => { @@ -216,10 +214,14 @@ // After a total of HOVER_DELAY_MS ms the hover behavior should trigger. clock.tick(HOVER_DELAY_MS); - assert.equal(listener.pending, 2); + assert.equal(listener.pending, 1); assert.equal(_testOnly_allTasks.size, 0); - assert.deepEqual(listener.shift(), [1, 1, Side.LEFT]); - assert.deepEqual(listener.shift(), [1000, 1000, Side.RIGHT]); + assert.deepEqual(tokenHighlightingCalls[0].details, { + token: 'words', + side: Side.RIGHT, + element: words1, + range: {start_line: 1, start_column: 5, end_line: 1, end_column: 9}, + }); }); test('highlighting mouse out before delay', async () => { @@ -259,10 +261,12 @@ element: words1, range: {start_line: 1, start_column: 5, end_line: 1, end_column: 9}, }); + assert.isTrue(words1.classList.contains('token-highlight')); container.click(); assert.equal(tokenHighlightingCalls.length, 2); assert.deepEqual(tokenHighlightingCalls[1].details, undefined); + assert.isFalse(words1.classList.contains('token-highlight')); }); test('triggers listener on token with single occurrence', async () => { @@ -303,13 +307,13 @@ dispatchMouseEvent('mouseover', words1); assert.equal(listener.pending, 0); clock.tick(HOVER_DELAY_MS); - assert.equal(listener.pending, 2); + assert.equal(listener.pending, 1); listener.flush(); assert.equal(listener.pending, 0); + assert.isTrue(words1.classList.contains('token-highlight')); container.click(); - assert.equal(listener.pending, 2); - assert.deepEqual(listener.shift(), [1, 1, Side.LEFT]); - assert.deepEqual(listener.shift(), [2, 2, Side.RIGHT]); + assert.equal(listener.pending, 1); + assert.isFalse(words1.classList.contains('token-highlight')); }); test('clicking on word does not clear highlight', async () => { @@ -323,11 +327,13 @@ dispatchMouseEvent('mouseover', words1); assert.equal(listener.pending, 0); clock.tick(HOVER_DELAY_MS); - assert.equal(listener.pending, 2); + assert.equal(listener.pending, 1); listener.flush(); assert.equal(listener.pending, 0); + assert.isTrue(words1.classList.contains('token-highlight')); words1.click(); assert.equal(listener.pending, 0); + assert.isTrue(words1.classList.contains('token-highlight')); }); }); });
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts index f484192..f0697df 100644 --- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts +++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts
@@ -1071,7 +1071,6 @@ <table id="diffTable" class=${this.diffTableClass} - role="presentation" ?contenteditable=${this.isContentEditable} ></table> ${when(
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts index 72c52b6..ff3bc10 100644 --- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts +++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts
@@ -24,6 +24,7 @@ query, queryAll, queryAndAssert, + waitEventLoop, waitQueryAndAssert, waitUntil, } from '../../../test/test-utils'; @@ -1121,7 +1122,7 @@ }, ]; await setupSampleDiff({content}); - flush(); + await waitEventLoop(); const diffLine = queryAll<HTMLElement>(element, '.contentText')[2]; assert.equal(getComputedStyle(diffLine).userSelect, 'none');
diff --git a/polygerrit-ui/app/embed/diff/gr-ranged-comment-hint/gr-ranged-comment-hint_test.ts b/polygerrit-ui/app/embed/diff/gr-ranged-comment-hint/gr-ranged-comment-hint_test.ts index f0890c3..7beee0c 100644 --- a/polygerrit-ui/app/embed/diff/gr-ranged-comment-hint/gr-ranged-comment-hint_test.ts +++ b/polygerrit-ui/app/embed/diff/gr-ranged-comment-hint/gr-ranged-comment-hint_test.ts
@@ -7,7 +7,7 @@ import './gr-ranged-comment-hint'; import {CommentRange} from '../../../types/common'; import {GrRangedCommentHint} from './gr-ranged-comment-hint'; -import {queryAndAssert} from '../../../test/test-utils'; +import {queryAndAssert, waitEventLoop} from '../../../test/test-utils'; import {GrRangeHeader} from '../gr-range-header/gr-range-header'; import {fixture, html, assert} from '@open-wc/testing'; @@ -18,7 +18,7 @@ element = await fixture( html`<gr-ranged-comment-hint></gr-ranged-comment-hint>` ); - await flush(); + await waitEventLoop(); }); test('shows line range', async () => { @@ -28,7 +28,7 @@ end_line: 5, end_character: 3, } as CommentRange; - await flush(); + await waitEventLoop(); const textDiv = queryAndAssert<GrRangeHeader>(element, 'gr-range-header'); assert.equal(textDiv?.innerText.trim(), 'Long comment range 2 - 5'); });
diff --git a/polygerrit-ui/app/mixins/hovercard-mixin/hovercard-mixin_test.ts b/polygerrit-ui/app/mixins/hovercard-mixin/hovercard-mixin_test.ts index 239e2a2..706c427 100644 --- a/polygerrit-ui/app/mixins/hovercard-mixin/hovercard-mixin_test.ts +++ b/polygerrit-ui/app/mixins/hovercard-mixin/hovercard-mixin_test.ts
@@ -7,7 +7,12 @@ import {HovercardMixin} from './hovercard-mixin'; import {LitElement} from 'lit'; import {customElement} from 'lit/decorators.js'; -import {MockPromise, mockPromise, pressKey} from '../../test/test-utils'; +import { + MockPromise, + mockPromise, + pressKey, + waitEventLoop, +} from '../../test/test-utils'; import {findActiveElement, Key} from '../../utils/dom-util'; import {fixture, html, assert} from '@open-wc/testing'; @@ -132,7 +137,7 @@ button!.dispatchEvent(new CustomEvent('mousemove')); await enterPromise; - await flush(); + await waitEventLoop(); assert.isTrue(element.isScheduledToShow); element.showTask!.flush(); assert.isTrue(element._isShowing); @@ -160,7 +165,7 @@ button!.dispatchEvent(new CustomEvent('mousemove')); await enterPromise; - await flush(); + await waitEventLoop(); assert.isTrue(element.isScheduledToShow); button!.click();
diff --git a/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts b/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts index b1bfa26..efdfded 100644 --- a/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts +++ b/polygerrit-ui/app/models/bulk-actions/bulk-actions-model_test.ts
@@ -24,7 +24,11 @@ import {BulkActionsModel, LoadingState} from './bulk-actions-model'; import {getAppContext} from '../../services/app-context'; import '../../test/common-test-setup-karma'; -import {stubRestApi, waitUntilObserved} from '../../test/test-utils'; +import { + stubRestApi, + waitEventLoop, + waitUntilObserved, +} from '../../test/test-utils'; import {mockPromise} from '../../test/test-utils'; import {SinonStubbedMember} from 'sinon'; import {RestApiService} from '../../services/gr-rest-api/gr-rest-api'; @@ -587,7 +591,7 @@ {...createChange(), _number: 1, subject: 'Subject 1-old'}, {...createChange(), _number: 2, subject: 'Subject 2-old'}, ] as ChangeInfo[]); - await flush(); + await waitEventLoop(); const model2 = bulkActionsModel.getState(); // No change should happen.
diff --git a/polygerrit-ui/app/models/dependency_test.ts b/polygerrit-ui/app/models/dependency_test.ts index fc6b13d..8f6b6e1 100644 --- a/polygerrit-ui/app/models/dependency_test.ts +++ b/polygerrit-ui/app/models/dependency_test.ts
@@ -6,7 +6,7 @@ import {define, provide, resolve} from './dependency'; import {html, LitElement} from 'lit'; import {customElement, property, query} from 'lit/decorators.js'; -import '../test/common-test-setup-karma.js'; +import '../test/common-test-setup-karma'; import {fixture, assert} from '@open-wc/testing'; interface FooService {
diff --git a/polygerrit-ui/app/models/di-provider-element_test.ts b/polygerrit-ui/app/models/di-provider-element_test.ts index 501e45c..4e2eb31 100644 --- a/polygerrit-ui/app/models/di-provider-element_test.ts +++ b/polygerrit-ui/app/models/di-provider-element_test.ts
@@ -6,7 +6,7 @@ import {html, LitElement} from 'lit'; import {customElement, state} from 'lit/decorators.js'; import {define, resolve} from './dependency'; -import '../test/common-test-setup-karma.js'; +import '../test/common-test-setup-karma'; import {fixture, assert} from '@open-wc/testing'; import {DIProviderElement, wrapInProvider} from './di-provider-element'; import {BehaviorSubject} from 'rxjs';
diff --git a/polygerrit-ui/app/services/app-context-init_test.ts b/polygerrit-ui/app/services/app-context-init_test.ts index 24b559a..d29ee8e 100644 --- a/polygerrit-ui/app/services/app-context-init_test.ts +++ b/polygerrit-ui/app/services/app-context-init_test.ts
@@ -3,10 +3,10 @@ * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import '../test/common-test-setup-karma.js'; -import {AppContext} from './app-context.js'; +import '../test/common-test-setup-karma'; +import {AppContext} from './app-context'; import {Finalizable} from './registry'; -import {createTestAppContext} from '../test/test-app-context-init.js'; +import {createTestAppContext} from '../test/test-app-context-init'; import {assert} from '@open-wc/testing'; suite('app context initializer tests', () => {
diff --git a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.js b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.js index 80dccb0..f2e9e01 100644 --- a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.js +++ b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.js
@@ -8,6 +8,7 @@ addListenerForTest, mockPromise, stubAuth, + waitEventLoop, } from '../../test/test-utils'; import {GrReviewerUpdatesParser} from '../../elements/shared/gr-rest-api-interface/gr-reviewer-updates-parser'; import { @@ -1431,8 +1432,8 @@ sinon.stub(element, '_changeBaseURL').returns(Promise.resolve('')); return element .getFileContent('1', 'tst/path', '1') + .then(() => waitEventLoop()) .then(() => { - flush(); assert.isFalse(spy.called); res.status = 500; @@ -1479,7 +1480,7 @@ }); }); - test('_logCall only reports requests with anonymized URLss', () => { + test('_logCall only reports requests with anonymized URLss', async () => { sinon.stub(Date, 'now').returns(200); const handler = sinon.stub(); addListenerForTest(document, 'gr-rpc-log', handler); @@ -1492,7 +1493,7 @@ 100, 200 ); - flush(); + await waitEventLoop(); assert.isTrue(handler.calledOnce); });
diff --git a/polygerrit-ui/app/services/registry_test.ts b/polygerrit-ui/app/services/registry_test.ts index 290855d..1a1ddcf 100644 --- a/polygerrit-ui/app/services/registry_test.ts +++ b/polygerrit-ui/app/services/registry_test.ts
@@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ import {create, Finalizable, Registry} from './registry'; -import '../test/common-test-setup-karma.js'; +import '../test/common-test-setup-karma'; import {assert} from '@open-wc/testing'; class Foo implements Finalizable {
diff --git a/polygerrit-ui/app/services/scheduler/fake-scheduler_test.ts b/polygerrit-ui/app/services/scheduler/fake-scheduler_test.ts index 166f18f..5223fc7 100644 --- a/polygerrit-ui/app/services/scheduler/fake-scheduler_test.ts +++ b/polygerrit-ui/app/services/scheduler/fake-scheduler_test.ts
@@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ import {assert} from '@open-wc/testing'; -import '../../test/common-test-setup-karma.js'; -import {assertFails} from '../../test/test-utils.js'; +import '../../test/common-test-setup-karma'; +import {assertFails} from '../../test/test-utils'; import {FakeScheduler} from './fake-scheduler'; suite('fake scheduler', () => {
diff --git a/polygerrit-ui/app/services/scheduler/max-in-flight-scheduler_test.ts b/polygerrit-ui/app/services/scheduler/max-in-flight-scheduler_test.ts index 53d92ca..0f24eda 100644 --- a/polygerrit-ui/app/services/scheduler/max-in-flight-scheduler_test.ts +++ b/polygerrit-ui/app/services/scheduler/max-in-flight-scheduler_test.ts
@@ -3,8 +3,8 @@ * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import '../../test/common-test-setup-karma.js'; -import {assertFails} from '../../test/test-utils.js'; +import '../../test/common-test-setup-karma'; +import {assertFails, waitEventLoop} from '../../test/test-utils'; import {Scheduler} from './scheduler'; import {MaxInFlightScheduler} from './max-in-flight-scheduler'; import {FakeScheduler} from './fake-scheduler'; @@ -67,7 +67,7 @@ assert.equal(fakeScheduler.scheduled.length, 2); fakeScheduler.resolve(); assert.equal(fakeScheduler.scheduled.length, 1); - await flush(); + await waitEventLoop(); assert.equal(fakeScheduler.scheduled.length, 2); }); @@ -78,7 +78,7 @@ assert.equal(fakeScheduler.scheduled.length, 2); fakeScheduler.reject(new Error('Fake Error')); assert.equal(fakeScheduler.scheduled.length, 1); - await flush(); + await waitEventLoop(); assert.equal(fakeScheduler.scheduled.length, 2); }); @@ -89,7 +89,7 @@ } for (let i = 0; i < 3; ++i) { fakeScheduler.resolve(); - await flush(); + await waitEventLoop(); } const res = await Promise.all(promises); assert.deepEqual(res, [0, 1, 2]);
diff --git a/polygerrit-ui/app/services/scheduler/retry-scheduler_test.ts b/polygerrit-ui/app/services/scheduler/retry-scheduler_test.ts index d1877b6..22f7dd5 100644 --- a/polygerrit-ui/app/services/scheduler/retry-scheduler_test.ts +++ b/polygerrit-ui/app/services/scheduler/retry-scheduler_test.ts
@@ -3,8 +3,8 @@ * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import '../../test/common-test-setup-karma.js'; -import {assertFails} from '../../test/test-utils.js'; +import '../../test/common-test-setup-karma'; +import {assertFails, waitEventLoop} from '../../test/test-utils'; import {Scheduler} from './scheduler'; import {RetryScheduler, RetryError} from './retry-scheduler'; import {FakeScheduler} from './fake-scheduler'; @@ -23,11 +23,11 @@ async function waitForRetry(ms: number) { // Flush the promise so that we can reach untilTimeout - await flush(); + await waitEventLoop(); // Advance the clock. clock.tick(ms); // Flush the promise that waits for the clock. - await flush(); + await waitEventLoop(); } test('executes tasks', async () => {
diff --git a/polygerrit-ui/app/services/scheduler/scheduler_test.ts b/polygerrit-ui/app/services/scheduler/scheduler_test.ts index 2ab75c1..7deb916 100644 --- a/polygerrit-ui/app/services/scheduler/scheduler_test.ts +++ b/polygerrit-ui/app/services/scheduler/scheduler_test.ts
@@ -4,8 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ import {assert} from '@open-wc/testing'; -import '../../test/common-test-setup-karma.js'; -import {assertFails} from '../../test/test-utils.js'; +import '../../test/common-test-setup-karma'; +import {assertFails} from '../../test/test-utils'; import {BaseScheduler} from './scheduler'; suite('naive scheduler', () => {
diff --git a/polygerrit-ui/app/test/common-test-setup-karma.ts b/polygerrit-ui/app/test/common-test-setup-karma.ts index eff2610..492d70a 100644 --- a/polygerrit-ui/app/test/common-test-setup-karma.ts +++ b/polygerrit-ui/app/test/common-test-setup-karma.ts
@@ -4,29 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ import {testResolver as testResolverImpl} from './common-test-setup'; -import {flush} from '@polymer/polymer/lib/utils/flush'; declare global { interface Window { - flush: typeof flushImpl; testResolver: typeof testResolverImpl; } - let flush: typeof flushImpl; let testResolver: typeof testResolverImpl; } -// Workaround for https://github.com/karma-runner/karma-mocha/issues/227 -let unhandledError: ErrorEvent; - -window.addEventListener('error', e => { - // For uncaught error mochajs doesn't print the full stack trace. - // We should print it ourselves. - console.error('Uncaught error:'); - console.error(e); - console.error(e.error.stack.toString()); - unhandledError = e; -}); - let originalOnBeforeUnload: typeof window.onbeforeunload; suiteSetup(() => { @@ -55,39 +40,6 @@ suiteTeardown(() => { // This suiteTeardown() method is called only once after all tests window.onbeforeunload = originalOnBeforeUnload; - if (unhandledError) { - throw unhandledError; - } }); -// Tests can use fake timers (sandbox.useFakeTimers) -// Keep the original one for use in test utils methods. -const nativeSetTimeout = window.setTimeout; - -function flushImpl(): Promise<void>; -function flushImpl(callback: () => void): void; -/** - * Triggers a flush of any pending events, observations, etc and calls you back - * after they have been processed if callback is passed; otherwise returns - * promise. - */ -function flushImpl(callback?: () => void): Promise<void> | void { - // Ideally, this function would be a call to Polymer.dom.flush, but that - // doesn't support a callback yet - // (https://github.com/Polymer/polymer-dev/issues/851) - // The type is used only in one place, disable eslint warning instead of - // creating an interface - // eslint-disable-next-line @typescript-eslint/no-explicit-any - flush(); - if (callback) { - nativeSetTimeout(callback, 0); - } else { - return new Promise(resolve => { - nativeSetTimeout(resolve, 0); - }); - } -} - -self.flush = flushImpl; - window.testResolver = testResolverImpl;
diff --git a/polygerrit-ui/app/test/common-test-setup.ts b/polygerrit-ui/app/test/common-test-setup.ts index 6628d8e..d9d98b9 100644 --- a/polygerrit-ui/app/test/common-test-setup.ts +++ b/polygerrit-ui/app/test/common-test-setup.ts
@@ -3,8 +3,6 @@ * Copyright 2017 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -// This should be the first import to install handler before any other code -import './source-map-support-install'; // TODO(dmfilippov): remove bundled-polymer.js imports when the following issue // https://github.com/Polymer/polymer-resin/issues/9 is resolved. import '../scripts/bundled-polymer';
diff --git a/polygerrit-ui/app/test/source-map-support-install.ts b/polygerrit-ui/app/test/source-map-support-install.ts deleted file mode 100644 index d7cdbc8..0000000 --- a/polygerrit-ui/app/test/source-map-support-install.ts +++ /dev/null
@@ -1,22 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -// Mark the file as a module. Otherwise typescript assumes this is a script -// and doesn't allow "declare global". -// See: https://www.typescriptlang.org/docs/handbook/modules.html -export {}; - -declare global { - interface Window { - sourceMapSupport?: { - install(): void; - }; - } -} - -// The karma.conf.js file loads required module before any other modules -// The source-map-support.js can't be imported with import ... statement -window.sourceMapSupport?.install();
diff --git a/polygerrit-ui/app/test/test-utils.ts b/polygerrit-ui/app/test/test-utils.ts index 47c21cc..f4c0091 100644 --- a/polygerrit-ui/app/test/test-utils.ts +++ b/polygerrit-ui/app/test/test-utils.ts
@@ -246,6 +246,20 @@ } /** + * sinon.useFakeTimers() overwrites window.setTimeout with a controlled, + * synchronous version for tests to use. Keep the original one for use in + * waitEventLoop + */ +const nativeSetTimeout = window.setTimeout; +/** + * Wait for the current event loop's tasks to complete by scheduling a promise + * to resolve during the next loop. Prefer other wait methods over this one to + * wait for specific work to be done or for specific states to exist. + */ +export function waitEventLoop(): Promise<void> { + return new Promise(resolve => nativeSetTimeout(resolve, 0)); +} +/** * Promisify an event callback to simplify async...await tests. * * Use like this:
diff --git a/polygerrit-ui/app/utils/async-util_test.ts b/polygerrit-ui/app/utils/async-util_test.ts index aa4b5fc..356080c 100644 --- a/polygerrit-ui/app/utils/async-util_test.ts +++ b/polygerrit-ui/app/utils/async-util_test.ts
@@ -6,6 +6,7 @@ import {assert} from '@open-wc/testing'; import {SinonFakeTimers} from 'sinon'; import '../test/common-test-setup-karma'; +import {waitEventLoop} from '../test/test-utils'; import {asyncForeach, debounceP} from './async-util'; suite('async-util tests', () => { @@ -56,18 +57,18 @@ promise.catch((_reason?: any) => { assert.fail(); }); - await flush(); + await waitEventLoop(); assert.isFalse(hasResolved); clock.tick(99); - await flush(); + await waitEventLoop(); assert.isFalse(hasResolved); clock.tick(1); - await flush(); + await waitEventLoop(); assert.isTrue(hasResolved); await promise; // Shouldn't do anything. promise.cancel(); - await flush(); + await waitEventLoop(); }); test('It resolves immediately on flush and finalizes', async () => { @@ -85,11 +86,11 @@ assert.fail(); }); promise.flush(); - await flush(); + await waitEventLoop(); assert.isTrue(hasResolved); // Shouldn't do anything. promise.cancel(); - await flush(); + await waitEventLoop(); }); test('It rejects on cancel', async () => { @@ -106,14 +107,14 @@ hasCanceled = true; assert.strictEqual(reason, 'because'); }); - await flush(); + await waitEventLoop(); assert.isFalse(hasCanceled); promise.cancel('because'); - await flush(); + await waitEventLoop(); assert.isTrue(hasCanceled); // Shouldn't do anything. promise.flush(); - await flush(); + await waitEventLoop(); }); test('It delegates correctly', async () => { @@ -130,10 +131,10 @@ promise1.catch((_reason?: any) => { assert.fail(); }); - await flush(); + await waitEventLoop(); assert.isFalse(hasResolved1); clock.tick(99); - await flush(); + await waitEventLoop(); const promise2 = debounceP<number>( promise1, () => Promise.resolve(6), @@ -148,16 +149,16 @@ assert.fail(); }); clock.tick(99); - await flush(); + await waitEventLoop(); assert.isFalse(hasResolved1); assert.isFalse(hasResolved2); clock.tick(2); - await flush(); + await waitEventLoop(); assert.isTrue(hasResolved1); assert.isTrue(hasResolved2); // Shouldn't do anything. promise1.cancel(); - await flush(); + await waitEventLoop(); }); test('It does not delegate after timeout', async () => { @@ -174,10 +175,10 @@ promise1.catch((_reason?: any) => { assert.fail(); }); - await flush(); + await waitEventLoop(); assert.isFalse(hasResolved1); clock.tick(100); - await flush(); + await waitEventLoop(); assert.isTrue(hasResolved1); const promise2 = debounceP<number>( @@ -194,14 +195,14 @@ assert.fail(); }); clock.tick(99); - await flush(); + await waitEventLoop(); assert.isFalse(hasResolved2); clock.tick(1); - await flush(); + await waitEventLoop(); assert.isTrue(hasResolved2); // Shouldn't do anything. promise1.cancel(); - await flush(); + await waitEventLoop(); }); }); });
diff --git a/polygerrit-ui/app/utils/change-util_test.ts b/polygerrit-ui/app/utils/change-util_test.ts index eb16706..bfb074b 100644 --- a/polygerrit-ui/app/utils/change-util_test.ts +++ b/polygerrit-ui/app/utils/change-util_test.ts
@@ -22,6 +22,8 @@ changePath, changeStatuses, isRemovableReviewer, + ListChangesOption, + listChangesOptionsToHex, } from './change-util'; suite('change-util tests', () => { @@ -232,4 +234,18 @@ change.status = ChangeStatus.NEW; assert.isFalse(changeIsAbandoned(change)); }); + + test('listChangesOptionsToHex', () => { + const changeActionsHex = listChangesOptionsToHex( + ListChangesOption.MESSAGES, + ListChangesOption.ALL_REVISIONS + ); + assert.equal(changeActionsHex, '204'); + const dashboardHex = listChangesOptionsToHex( + ListChangesOption.LABELS, + ListChangesOption.DETAILED_ACCOUNTS, + ListChangesOption.SUBMIT_REQUIREMENTS + ); + assert.equal(dashboardHex, '1000081'); + }); });
diff --git a/polygerrit-ui/app/utils/page-wrapper-utils.ts b/polygerrit-ui/app/utils/page-wrapper-utils.ts index 55181e4..3313106 100644 --- a/polygerrit-ui/app/utils/page-wrapper-utils.ts +++ b/polygerrit-ui/app/utils/page-wrapper-utils.ts
@@ -6,10 +6,9 @@ // @ts-ignore: Bazel is not yet configured to download the types import pagejs from 'page'; -// Reexport page.js. To make it work, karma, server.go and rollup patch -// page.js and replace "this" to "window". Otherwise, it can't assign global -// property. We can't import page.mjs because typescript doesn't support mjs -// extensions +// Reexport page.js. To make it work rollup patches page.js and replace "this" +// to "window". Otherwise, it can't assign global property. We can't import +// page.mjs because typescript doesn't support mjs extensions export interface Page { (pattern: string | RegExp, ...pageCallback: PageCallback[]): void; (pageCallback: PageCallback): void; @@ -42,5 +41,5 @@ ) => void; // TODO: Convert page usages to the real types and remove this file of wrapper -// types. Also remove workarounds in karma and rollup configs. +// types. Also remove workarounds in rollup config. export const page = pagejs as unknown as Page;
diff --git a/polygerrit-ui/grep-patch-karma.js b/polygerrit-ui/grep-patch-karma.js deleted file mode 100644 index 9789dee..0000000 --- a/polygerrit-ui/grep-patch-karma.js +++ /dev/null
@@ -1,36 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -// The IntelliJ (and probably other IDEs) passes test names as a regexp in -// the format: -// --grep=/some regexp.../ -// But mochajs doesn't expect the '/' characters before and after the regexp. -// The code below patches input args and removes '/' if they exists. -function installPatch(karma) { - const originalKarmaStart = karma.start; - - karma.start = function(config, ...args) { - const regexpGrepPrefix = '--grep=/'; - const regexpGrepSuffix = '/'; - if (config && config.args) { - for (let i = 0; i < config.args.length; i++) { - const arg = config.args[i]; - if (arg.startsWith(regexpGrepPrefix) && arg.endsWith(regexpGrepSuffix)) { - const regexpText = arg.slice(regexpGrepPrefix.length, -regexpGrepPrefix.length); - config.args[i] = '--grep=' + regexpText; - } - } - } - originalKarmaStart.apply(this, [config, ...args]); - } - -} - -const karma = window.__karma__; -if (karma && karma.start && !karma.__grep_patch_installed__) { - karma.__grep_patch_installed__ = true; - installPatch(karma); -}
diff --git a/polygerrit-ui/karma.conf.js b/polygerrit-ui/karma.conf.js deleted file mode 100644 index c78a867..0000000 --- a/polygerrit-ui/karma.conf.js +++ /dev/null
@@ -1,235 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -const runUnderBazel = !!process.env["RUNFILES_DIR"]; -const path = require('path'); - -function getModulesDir() { - if(runUnderBazel) { - // Run under bazel - return [ - `external/plugins_npm/node_modules`, - `external/ui_npm/node_modules`, - `external/ui_dev_npm/node_modules` - ]; - } - - // Run from intellij or npm run test:kdebug - return [ - path.join(__dirname, 'app/node_modules'), - path.join(__dirname, 'node_modules'), - ]; -} - -function getUiDevNpmFilePath(importPath) { - if(runUnderBazel) { - return `external/ui_dev_npm/node_modules/${importPath}`; - } - else { - return `polygerrit-ui/node_modules/${importPath}` - } -} - -function runInIde() { - // A simple detection of IDE. - // Default browserNoActivityTimeout is 30 seconds. An IDE usually - // runs karma in background and send commands when a user wants to - // execute test. If interval between user executed tests is bigger than - // browserNoActivityTimeout, the IDE reports error and doesn't restart - // server. - // We want to increase browserNoActivityTimeout when tests run in IDE. - // Wd don't want to increase it in other cases, oterhise hanging tests - // can slow down CI. - return !runUnderBazel && - process.argv.some(arg => arg.toLowerCase().contains('intellij')); -} - -module.exports = function(config) { - let root = config.root; - if (!root) { - console.warn(`--root argument not set. Falling back to __dirname.`) - root = path.resolve(__dirname) + '/'; - } - // Use --test-files to specify pattern for a test files. - // It can be just a file name, without a path: - // --test-files async-foreach-behavior_test.js - // If you specify --test-files without pattern, it gets true value - // In this case we will run all tests (usefull for package.json "debugtest" - // script) - // We will convert a .ts argument to .js and fill in .js if no extension is - // given. - let filePattern; - if (typeof config.testFiles === "string") { - if (config.testFiles.endsWith('.ts')) { - filePattern = config.testFiles.substr(0, config.testFiles.lastIndexOf(".")) + ".js"; - } else if (config.testFiles.endsWith('.js')) { - filePattern = config.testFiles; - } else { - filePattern = config.testFiles + '.js'; - } - } else { - filePattern = '*_test.js'; - } - const testFilesPattern = root + '**/' + filePattern; - - console.info(`Karma test file pattern: ${testFilesPattern}`) - // Special patch for grep parameters (see details in the grep-patch-karam.js) - const additionalFiles = runUnderBazel ? [] : ['polygerrit-ui/grep-patch-karma.js']; - config.set({ - browserNoActivityTimeout: runInIde ? 60 * 60 * 1000 : 30 * 1000, - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '../', - plugins: [ - // Do not use karma-* to load all installed plugin - // This can lead to unexpected behavior under bazel - // if you forget to add a plugin in a bazel rule. - require.resolve('@open-wc/karma-esm'), - 'karma-mocha', - 'karma-chrome-launcher', - 'karma-mocha-reporter', - ], - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha', 'esm'], - - // list of files / patterns to load in the browser - files: [ - ...additionalFiles, - getUiDevNpmFilePath('source-map-support/browser-source-map-support.js'), - getUiDevNpmFilePath('accessibility-developer-tools/dist/js/axs_testing.js'), - {pattern: getUiDevNpmFilePath('@open-wc/semantic-dom-diff/index.js'), type: 'module' }, - {pattern: getUiDevNpmFilePath('@open-wc/testing-helpers/index.js'), type: 'module' }, - getUiDevNpmFilePath('sinon/pkg/sinon.js'), - { pattern: testFilesPattern, type: 'module' }, - ], - esm: { - nodeResolve: { - // By default, it tries to use page.mjs file instead of page.js - // when importing 'page/page', so we shouldn't use .mjs extension - // in node resolve. - // The .ts extension is required to display source code in browser - // (otherwise esm plugin crashes) - extensions: ['.js', '.ts'], - }, - moduleDirs: getModulesDir(), - // Bazel and yarn uses symlinks for files. - // preserveSymlinks is necessary for correct modules paths resolving - preserveSymlinks: true, - // By default, esm-dev-server uses 'auto' compatibility mode. - // In the 'auto' mode it incorrectly applies polyfills and - // breaks tests in some browser versions - // (for example, Chrome 69 on gerrit-ci). - compatibility: 'none', - plugins: [ - { - resolveImport(importSpecifier) { - // esm-dev-server interprets .ts files as .js files and - // tries to replace all module imports with relative/absolute - // paths. In most cases this works correctly. However if - // a ts file imports type from .d.ts and there is no - // associated .js file then the esm-dev-server responds with - // 500 error. - // For example the following import .ts file causes problem - // import {PolymerDeepPropertyChange} from '@polymer/polymer/interfaces'; - // To avoid problems, we don't resolve imports in .ts files - // and instead always return original path - if (importSpecifier.context.originalUrl.endsWith(".ts")) { - return importSpecifier.source; - } - return undefined; - } - }, - { - transform(context) { - if (context.path.endsWith('/node_modules/page/page.js')) { - const orignalBody = context.body; - // Can't import page.js directly, because this is undefined. - // Replace it with window - // The same replace exists in server.go - // Rollup makes this replacement automatically - const transformedBody = orignalBody.replace( - '}(this, (function () { \'use strict\';', - '}(window, (function () { \'use strict\';' - ); - if(orignalBody.length === transformedBody.length) { - console.error('The page.js was updated. Please update transform accordingly'); - process.exit(1); - } - return {body: transformedBody}; - } - }, - } - ] - }, - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['mocha'], - - mochaReporter: { - showDiff: true - }, - - // Listen on localhost so it either listens to ipv4 - // or ipv6. Some OS's default to ipv6 for localhost - // and others ipv4. - // Nodejs 17 changed the behaviour from prefering ipv4 to - // using the OS settings. - // The default is 127.0.0.1 thus if localhost is on ipv6 only - // it'll fail to connect to the karma server. - // See https://github.com/karma-runner/karma/blob/e17698f950af83bf2b3edc540d2a3e1fb73cba59/lib/utils/dns-utils.js#L3 - listenAddress: 'localhost', - - // web server port - port: 9876, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ["CustomChromeHeadless"], - browserForDebugging: "CustomChromeHeadlessWithDebugPort", - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: true, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity, - - client: { - mocha: { - ui: 'tdd', - timeout: 5000, - } - }, - - customLaunchers: { - // Based on https://developers.google.com/web/updates/2017/06/headless-karma-mocha-chai - "CustomChromeHeadless": { - base: 'ChromeHeadless', - flags: ['--disable-translate', '--disable-extensions'], - }, - "ChromeDev": { - base: 'Chrome', - flags: ['--disable-extensions', ' --auto-open-devtools-for-tabs'], - }, - "CustomChromeHeadlessWithDebugPort": { - base: 'CustomChromeHeadless', - flags: ['--remote-debugging-port=9222'], - } - } - }); -};
diff --git a/polygerrit-ui/karma_test.sh b/polygerrit-ui/karma_test.sh deleted file mode 100755 index 940b969..0000000 --- a/polygerrit-ui/karma_test.sh +++ /dev/null
@@ -1,6 +0,0 @@ -#!/bin/bash - -set -euo pipefail -./$1 start $2 \ - --root 'polygerrit-ui/app/_pg_with_tests_out/**/' \ - --test-files '*_test.js'
diff --git a/polygerrit-ui/package.json b/polygerrit-ui/package.json index 6537f8d..5cff207 100644 --- a/polygerrit-ui/package.json +++ b/polygerrit-ui/package.json
@@ -3,23 +3,15 @@ "description": "Gerrit Code Review - Polygerrit dev dependencies", "browser": true, "dependencies": { - "@types/mocha": "^9.1.1", "@types/sinon": "^10.0.0" }, "devDependencies": { - "@open-wc/karma-esm": "^3.0.9", "@open-wc/semantic-dom-diff": "^0.19.5", "@open-wc/testing": "^3.1.6", "@web/dev-server-esbuild": "^0.3.2", "@web/test-runner": "^0.14.0", "accessibility-developer-tools": "^2.12.0", - "karma": "^6.3.20", - "karma-chrome-launcher": "^3.1.1", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "mocha": "9.2.2", - "sinon": "^13.0.0", - "source-map-support": "^0.5.19" + "sinon": "^13.0.0" }, "scripts": { "test": "web-test-runner",
diff --git a/polygerrit-ui/run-server.sh b/polygerrit-ui/run-server.sh deleted file mode 100755 index 62e1453..0000000 --- a/polygerrit-ui/run-server.sh +++ /dev/null
@@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -bazel_bin=$(which bazelisk 2>/dev/null) -if [[ -z "$bazel_bin" ]]; then - echo "Warning: bazelisk is not installed; falling back to bazel." - bazel_bin=bazel -fi - -set -eu -SCRIPTNAME=$(mktemp) -trap "{ rm -f $SCRIPTNAME; }" EXIT -${bazel_bin} run --script_path="$SCRIPTNAME" //polygerrit-ui:devserver -"$SCRIPTNAME" "$@"
diff --git a/polygerrit-ui/server.go b/polygerrit-ui/server.go deleted file mode 100644 index eccb38b..0000000 --- a/polygerrit-ui/server.go +++ /dev/null
@@ -1,649 +0,0 @@ -// Copyright (C) 2015 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "archive/zip" - "bufio" - "bytes" - "compress/gzip" - "encoding/json" - "errors" - "flag" - "io" - "io/ioutil" - "log" - "net" - "net/http" - "net/url" - "os" - "os/exec" - "path/filepath" - "regexp" - "strings" - "sync" - "time" - - "golang.org/x/tools/godoc/vfs/httpfs" - "golang.org/x/tools/godoc/vfs/zipfs" -) - -var ( - plugins = flag.String("plugins", "", "comma seperated plugin paths to serve") - port = flag.String("port", "localhost:8081", "address to serve HTTP requests on") - host = flag.String("host", "gerrit-review.googlesource.com", "Host to proxy requests to") - scheme = flag.String("scheme", "https", "URL scheme") - cdnPattern = regexp.MustCompile("https://cdn.googlesource.com/polygerrit_ui/[0-9.]*") -) - -func main() { - flag.Parse() - - fontsArchive, err := openDataArchive("fonts.zip") - if err != nil { - log.Fatal(err) - } - - workspace := os.Getenv("BUILD_WORKSPACE_DIRECTORY") - if err := os.Chdir(filepath.Join(workspace, "polygerrit-ui")); err != nil { - log.Fatal(err) - } - - compiledSrcPath := filepath.Join(workspace, "./.ts-out/server-go") - - tsInstance := newTypescriptInstance( - filepath.Join(workspace, "./node_modules/.bin/tsc"), - filepath.Join(workspace, "./polygerrit-ui/app/tsconfig.json"), - compiledSrcPath, - ) - - if err := tsInstance.StartWatch(); err != nil { - log.Fatal(err) - } - - dirListingMux := http.NewServeMux() - dirListingMux.Handle("/styles/", http.StripPrefix("/styles/", http.FileServer(http.Dir("app/styles")))) - dirListingMux.Handle("/samples/", http.StripPrefix("/samples/", http.FileServer(http.Dir("app/samples")))) - dirListingMux.Handle("/elements/", http.StripPrefix("/elements/", http.FileServer(http.Dir("app/elements")))) - dirListingMux.Handle("/behaviors/", http.StripPrefix("/behaviors/", http.FileServer(http.Dir("app/behaviors")))) - - http.HandleFunc("/", - func(w http.ResponseWriter, req *http.Request) { - // If typescript compiler hasn't finished yet, wait for it - tsInstance.WaitForCompilationComplete() - handleSrcRequest(compiledSrcPath, dirListingMux, w, req) - }) - - http.Handle("/fonts/", - addDevHeadersMiddleware(http.FileServer(httpfs.New(zipfs.New(fontsArchive, "fonts"))))) - - http.HandleFunc("/index.html", handleIndex) - http.HandleFunc("/changes/", handleProxy) - http.HandleFunc("/accounts/", handleProxy) - http.HandleFunc("/config/", handleProxy) - http.HandleFunc("/projects/", handleProxy) - http.HandleFunc("/static/", handleProxy) - http.HandleFunc("/accounts/self/detail", handleAccountDetail) - - if len(*plugins) > 0 { - http.Handle("/plugins/", http.StripPrefix("/plugins/", - http.FileServer(http.Dir("../plugins")))) - log.Println("Local plugins from", "../plugins") - } else { - http.HandleFunc("/plugins/", handleProxy) - // Serve local plugins from `plugins_` - http.Handle("/plugins_/", http.StripPrefix("/plugins_/", - http.FileServer(http.Dir("../plugins")))) - } - log.Println("Serving on port", *port) - log.Fatal(http.ListenAndServe(*port, &server{})) -} - -func addDevHeadersMiddleware(h http.Handler) http.Handler { - return http.HandlerFunc(func(writer http.ResponseWriter, req *http.Request) { - addDevHeaders(writer) - h.ServeHTTP(writer, req) - }) -} - -func addDevHeaders(writer http.ResponseWriter) { - writer.Header().Set("Access-Control-Allow-Origin", "*") - writer.Header().Set("Access-Control-Allow-Headers", "cache-control,x-test-origin") - writer.Header().Set("Cache-Control", "public, max-age=10, must-revalidate") -} - -func handleSrcRequest(compiledSrcPath string, dirListingMux *http.ServeMux, writer http.ResponseWriter, originalRequest *http.Request) { - parsedUrl, err := url.Parse(originalRequest.RequestURI) - if err != nil { - writer.WriteHeader(500) - return - } - if parsedUrl.Path != "/" && strings.HasSuffix(parsedUrl.Path, "/") { - dirListingMux.ServeHTTP(writer, originalRequest) - return - } - - normalizedContentPath := parsedUrl.Path - - if !strings.HasPrefix(normalizedContentPath, "/") { - normalizedContentPath = "/" + normalizedContentPath - } - - isJsFile := strings.HasSuffix(normalizedContentPath, ".js") || strings.HasSuffix(normalizedContentPath, ".mjs") - isTsFile := strings.HasSuffix(normalizedContentPath, ".ts") - - // Source map in a compiled js file point to a file inside /app/... directory - // Browser tries to load original file from the directory when debugger is - // activated. In this case we return original content without any processing - isOriginalFileRequest := strings.HasPrefix(normalizedContentPath, "/polygerrit-ui/app/") && (isTsFile || isJsFile) - - data, err := getContent(compiledSrcPath, normalizedContentPath, isOriginalFileRequest) - if err != nil { - if !isOriginalFileRequest { - data, err = getContent(compiledSrcPath, normalizedContentPath+".js", false) - } - if err != nil { - writer.WriteHeader(404) - return - } - isJsFile = true - } - if isOriginalFileRequest { - // Explicitly set text/html Content-Type. If live code tries - // to import javascript from the /app/ folder accidentally, browser fails - // with the import error, so we can catch this problem easily. - writer.Header().Set("Content-Type", "text/html") - } else if isJsFile { - // import ... from '@polymer/decorators' - // must be transformed into - // import ... from '@polymer/decorators/lib/decorators.js' - // The correct way to do it is to use value of the "main" property - // from the @polymer/decorators/package.json. However, parsing package.json - // is overcomplicated right now, hard-code exact path here. - moduleImportRegexp := regexp.MustCompile("(?m)^(import.*)'@polymer/decorators';$") - data = moduleImportRegexp.ReplaceAll(data, []byte("$1 '@polymer/decorators/lib/decorators.js';")) - - // The following code updates import statements. - // 1. if an in imported file has .js or .mjs extension, the code keeps - // the file extension unchanged. Otherwise, it adds .js extension - // 2. For module imports it adds '/node_modules/' prefix. - // Examples: - // '@polymer/polymer.js' -> '/node_modules/@polymer/polymer.js' - // 'page/page.mjs' -> '/node_modules/page.mjs' - // './element/file' -> './element/file.js' - moduleImportRegexp = regexp.MustCompile(`(import[^'";]*|export[^'";]*from ?)['"]([^;\s]*?)(\.(m?)js)?['"];`) - data = moduleImportRegexp.ReplaceAll(data, []byte("$1'$2.${4}js';")) - - moduleImportRegexp = regexp.MustCompile(`(import[^'";]*|export[^'";]*from ?)['"]([^/.;\s][^;\s]*)['"];`) - data = moduleImportRegexp.ReplaceAll(data, []byte("$1'/node_modules/$2';")) - - // The es module version of rxjs can be found in the _esm2015/ directory. - moduleImportRegexp = regexp.MustCompile("(?m)^((import|export).*'/node_modules/rxjs)(.*).js(';)$") - data = moduleImportRegexp.ReplaceAll(data, []byte("$1/_esm2015$3/index.js$4")) - - // The es module version of tslib.js can be found in tslib.es6.js. - moduleImportRegexp = regexp.MustCompile("(?m)^((import|export).*'/node_modules/)tslib.js';$") - data = moduleImportRegexp.ReplaceAll(data, []byte("${1}tslib/tslib.es6.js';")) - - // 'lit.js' has to be resolved as 'lit/index.js'. - moduleImportRegexp = regexp.MustCompile("(?m)^((import|export).*'/node_modules/)lit.js';$") - data = moduleImportRegexp.ReplaceAll(data, []byte("${1}lit/index.js';")) - // Some lit imports 'a.js' have to be resolved as 'a/a.js'. - moduleImportRegexp = regexp.MustCompile(`((import|export)[^'";]*'/node_modules/(@lit/)?)(lit-element|lit-html|reactive-element).js';`) - data = moduleImportRegexp.ReplaceAll(data, []byte("${1}${4}/${4}.js';")) - - // 'immer' imports and exports have to be resolved to 'immer/dist/immer.esm.js'. - moduleImportRegexp = regexp.MustCompile("(?m)^((import|export).*'/node_modules/)immer.js';$") - data = moduleImportRegexp.ReplaceAll(data, []byte("${1}/immer/dist/immer.esm.js';")) - - // 'webvital' imports - moduleImportRegexp = regexp.MustCompile("(?m)^((import|export).*'/node_modules/)web-vitals.js';$") - data = moduleImportRegexp.ReplaceAll(data, []byte("${1}/web-vitals/dist/web-vitals.js';")) - - if strings.HasSuffix(normalizedContentPath, "/node_modules/page/page.js") { - // Can't import page.js directly, because this is undefined. - // Replace it with window - // The same replace exists in karma.conf.js - // Rollup makes this replacement automatically - pageJsRegexp := regexp.MustCompile(`(?m)^}\(this, \(function \(\) { 'use strict';$`) - newData := pageJsRegexp.ReplaceAll(data, []byte("}(window, (function () { 'use strict';")) - if len(newData) == len(data) { - log.Fatal("The page.js was updated. Please update regexp/replace accordingly") - } - data = newData - } - - writer.Header().Set("Content-Type", "application/javascript") - } else if strings.HasSuffix(normalizedContentPath, ".css") { - writer.Header().Set("Content-Type", "text/css") - } else if strings.HasSuffix(normalizedContentPath, "_test.html") { - moduleImportRegexp := regexp.MustCompile("(?m)^(import.*)'([^/.].*)';$") - data = moduleImportRegexp.ReplaceAll(data, []byte("$1 '/node_modules/$2';")) - writer.Header().Set("Content-Type", "text/html") - } else if strings.HasSuffix(normalizedContentPath, ".html") { - writer.Header().Set("Content-Type", "text/html") - } - writer.WriteHeader(200) - addDevHeaders(writer) - writer.Write(data) -} - -func getContent(compiledSrcPath string, normalizedContentPath string, isOriginalFileRequest bool) ([]byte, error) { - // normalizedContentPath must always starts with '/' - - if isOriginalFileRequest { - data, err := ioutil.ReadFile(normalizedContentPath[len("/polygerrit-ui/"):]) - if err != nil { - return nil, errors.New("File not found") - } - return data, nil - } - - // gerrit loads gr-app.js as an ordinary script, without type="module" attribute. - // If server.go serves this file as is, browser shows the error: - // Uncaught SyntaxError: Cannot use import statement outside a module - // - // To load non-bundled gr-app.js as a module, we "virtually" renames original - // gr-app.js to gr-app.mjs and load it with dynamic import. - // - // Another option is to patch rewriteHostPage function and add type="module" attribute - // to <script src=".../elements/gr-app.js"> tag, but this solution is incompatible - // with --dev-cdn options. If you run local gerrit instance with --dev-cdn parameter, - // the server.go is used as cdn and it doesn't handle host page (i.e. rewriteHostPage - // method is not called). - if normalizedContentPath == "/elements/gr-app.js" { - return []byte("import('./gr-app.mjs')"), nil - } - - if normalizedContentPath == "/elements/gr-app.mjs" { - normalizedContentPath = "/elements/gr-app.js" - } - - pathsToTry := []string{compiledSrcPath + normalizedContentPath, "app" + normalizedContentPath} - bowerComponentsSuffix := "/bower_components/" - nodeModulesPrefix := "/node_modules/" - testComponentsPrefix := "/components/" - - if strings.HasPrefix(normalizedContentPath, testComponentsPrefix) { - pathsToTry = append(pathsToTry, "node_modules/wct-browser-legacy/node_modules/"+normalizedContentPath[len(testComponentsPrefix):]) - pathsToTry = append(pathsToTry, "node_modules/"+normalizedContentPath[len(testComponentsPrefix):]) - } - - if strings.HasPrefix(normalizedContentPath, bowerComponentsSuffix) { - pathsToTry = append(pathsToTry, "node_modules/@webcomponents/"+normalizedContentPath[len(bowerComponentsSuffix):]) - } - - if strings.HasPrefix(normalizedContentPath, nodeModulesPrefix) { - pathsToTry = append(pathsToTry, "node_modules/"+normalizedContentPath[len(nodeModulesPrefix):]) - } - - for _, path := range pathsToTry { - data, err := ioutil.ReadFile(path) - if err == nil { - return data, nil - } - } - - return nil, errors.New("File not found") -} - -func openDataArchive(path string) (*zip.ReadCloser, error) { - absBinPath, err := resourceBasePath() - if err != nil { - return nil, err - } - return zip.OpenReader(absBinPath + ".runfiles/gerrit/polygerrit-ui/" + path) -} - -func resourceBasePath() (string, error) { - return filepath.Abs(os.Args[0]) -} - -func handleIndex(writer http.ResponseWriter, originalRequest *http.Request) { - fakeRequest := &http.Request{ - URL: &url.URL{ - Path: "/", - RawQuery: originalRequest.URL.RawQuery, - }, - } - handleProxy(writer, fakeRequest) -} - -func handleProxy(writer http.ResponseWriter, originalRequest *http.Request) { - patchedRequest := &http.Request{ - Method: "GET", - URL: &url.URL{ - Scheme: *scheme, - Host: *host, - Opaque: originalRequest.URL.EscapedPath(), - RawQuery: originalRequest.URL.RawQuery, - }, - } - response, err := http.DefaultClient.Do(patchedRequest) - if err != nil { - http.Error(writer, err.Error(), http.StatusInternalServerError) - return - } - defer response.Body.Close() - for name, values := range response.Header { - for _, value := range values { - if name != "Content-Length" { - writer.Header().Add(name, value) - } - } - } - writer.WriteHeader(response.StatusCode) - if _, err := io.Copy(writer, patchResponse(originalRequest, response)); err != nil { - log.Println("Error copying response to ResponseWriter:", err) - return - } -} - -func getJsonPropByPath(json map[string]interface{}, path []string) interface{} { - prop, path := path[0], path[1:] - if json[prop] == nil { - return nil - } - switch json[prop].(type) { - case map[string]interface{}: // map - return getJsonPropByPath(json[prop].(map[string]interface{}), path) - case []interface{}: // array - return json[prop].([]interface{}) - default: - return json[prop].(interface{}) - } -} - -func setJsonPropByPath(json map[string]interface{}, path []string, value interface{}) { - prop, path := path[0], path[1:] - if json[prop] == nil { - return // path not found - } - if len(path) > 0 { - setJsonPropByPath(json[prop].(map[string]interface{}), path, value) - } else { - json[prop] = value - } -} - -func patchResponse(req *http.Request, res *http.Response) io.Reader { - switch req.URL.EscapedPath() { - case "/": - return rewriteHostPage(res.Body) - case "/config/server/info": - return injectLocalPlugins(res.Body) - default: - return res.Body - } -} - -func rewriteHostPage(reader io.Reader) io.Reader { - buf := new(bytes.Buffer) - buf.ReadFrom(reader) - original := buf.String() - - // Simply remove all CDN references, so files are loaded from the local file system or the proxy - // server instead. - replaced := cdnPattern.ReplaceAllString(original, "") - - // Modify window.INITIAL_DATA so that it has the same effect as injectLocalPlugins. To achieve - // this let's add JavaScript lines at the end of the <script>...</script> snippet that also - // contains window.INITIAL_DATA=... - // Here we rely on the fact that the <script> snippet that we want to append to is the first one. - if len(*plugins) > 0 { - insertionPoint := strings.Index(replaced, "</script>") - builder := new(strings.Builder) - builder.WriteString( - "window.INITIAL_DATA['/config/server/info'].plugin.js_resource_paths = []; ") - for _, p := range strings.Split(*plugins, ",") { - if filepath.Ext(p) == ".js" { - builder.WriteString( - "window.INITIAL_DATA['/config/server/info'].plugin.js_resource_paths.push('" + p + "'); ") - } - } - replaced = replaced[:insertionPoint] + builder.String() + replaced[insertionPoint:] - } - - return strings.NewReader(replaced) -} - -func injectLocalPlugins(reader io.Reader) io.Reader { - if len(*plugins) == 0 { - return reader - } - // Skip escape prefix - io.CopyN(ioutil.Discard, reader, 5) - dec := json.NewDecoder(reader) - - var response map[string]interface{} - err := dec.Decode(&response) - if err != nil { - log.Fatal(err) - } - - // Configuration path in the JSON server response - jsPluginsPath := []string{"plugin", "js_resource_paths"} - jsResources := getJsonPropByPath(response, jsPluginsPath).([]interface{}) - - for _, p := range strings.Split(*plugins, ",") { - if filepath.Ext(p) == ".js" { - jsResources = append(jsResources, p) - } - } - - setJsonPropByPath(response, jsPluginsPath, jsResources) - - reader, writer := io.Pipe() - go func() { - defer writer.Close() - io.WriteString(writer, ")]}'") // Write escape prefix - err := json.NewEncoder(writer).Encode(&response) - if err != nil { - log.Fatal(err) - } - }() - return reader -} - -func handleAccountDetail(w http.ResponseWriter, r *http.Request) { - http.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden) -} - -type gzipResponseWriter struct { - io.WriteCloser - http.ResponseWriter -} - -func newGzipResponseWriter(w http.ResponseWriter) *gzipResponseWriter { - gz := gzip.NewWriter(w) - return &gzipResponseWriter{WriteCloser: gz, ResponseWriter: w} -} - -func (w gzipResponseWriter) Write(b []byte) (int, error) { - return w.WriteCloser.Write(b) -} - -func (w gzipResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { - h, ok := w.ResponseWriter.(http.Hijacker) - if !ok { - return nil, nil, errors.New("gzipResponseWriter: ResponseWriter does not satisfy http.Hijacker interface") - } - return h.Hijack() -} - -type server struct{} - -// Any path prefixes that should resolve to index.html. -var ( - fePaths = []string{"/q/", "/c/", "/id/", "/p/", "/x/", "/dashboard/", "/admin/", "/settings/"} - issueNumRE = regexp.MustCompile(`^\/\d+\/?$`) -) - -func (_ *server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - log.Printf("%s %s %s %s\n", r.Proto, r.Method, r.RemoteAddr, r.URL) - for _, prefix := range fePaths { - if strings.HasPrefix(r.URL.Path, prefix) || r.URL.Path == "/" { - r.URL.Path = "/index.html" - log.Println("Redirecting to /index.html") - break - } else if match := issueNumRE.Find([]byte(r.URL.Path)); match != nil { - r.URL.Path = "/index.html" - log.Println("Redirecting to /index.html") - break - } - } - if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") { - http.DefaultServeMux.ServeHTTP(w, r) - return - } - w.Header().Set("Content-Encoding", "gzip") - addDevHeaders(w) - gzw := newGzipResponseWriter(w) - defer gzw.Close() - http.DefaultServeMux.ServeHTTP(gzw, r) -} - -// Typescript compiler support -// The code below runs typescript compiler in watch mode and redirect -// all output from the compiler to the standard logger with the prefix "TSC -" -// Additionally, the code analyzes messages produced by the typescript compiler -// and allows to wait until compilation is finished. -var ( - tsStartingCompilation = "- Starting compilation in watch mode..." - tsFileChangeDetectedMsg = "- File change detected. Starting incremental compilation..." - // If there is only one error typescript outputs: - // Found 1 error - // In all other cases it outputs - // Found X errors - tsStartWatchingMsg = regexp.MustCompile(`^.* - Found \d+ error(s)?\. Watching for file changes\.$`) - waitForNextChangeInterval = 1 * time.Second -) - -// typescriptLogWriter implements Writer interface and receives output -// (stdout and stderr) from the typescript compiler. It reads incoming -// data line-by-line, analyzes each line and updates compilationDoneWaiter -// according to the current compiler state. Additionally, the -// typescriptLogWriter passes all incoming lines to the underlying logger. -type typescriptLogWriter struct { - // unfinishedLine stores the portion of line which was partially received - // (i.e. all text received after the last EOL (\n) mark. - unfinishedLine string - // logger is used to pass-through all received strings - logger *log.Logger - // when WaitGroup counter is 0 the compilation is complete - compilationDoneWaiter *sync.WaitGroup -} - -func newTypescriptLogWriter(compilationCompleteWaiter *sync.WaitGroup) *typescriptLogWriter { - return &typescriptLogWriter{ - logger: log.New(log.Writer(), "TSC - ", log.Flags()), - compilationDoneWaiter: compilationCompleteWaiter, - } -} - -func (lw typescriptLogWriter) Write(p []byte) (n int, err error) { - // The input p can contain several lines and/or the partial line - // Code splits the input by EOL marker (\n) and stores the unfinished line - // for the next call to Write. - partialText := lw.unfinishedLine + string(p) - lines := strings.Split(partialText, "\n") - fullLines := lines - if strings.HasSuffix(partialText, "\n") { - lw.unfinishedLine = "" - } else { - fullLines = lines[:len(lines)-1] - lw.unfinishedLine = lines[len(lines)-1] - } - for _, fullLine := range fullLines { - text := strings.TrimSpace(fullLine) - if text == "" { - continue - } - if strings.HasSuffix(text, tsFileChangeDetectedMsg) || - strings.HasSuffix(text, tsStartingCompilation) { - lw.compilationDoneWaiter.Add(1) - } - if tsStartWatchingMsg.MatchString(text) { - // A source code can be changed while previous compiler run is in progress. - // In this case typescript reruns compilation again almost immediately - // after the previous run finishes. To detect this situation, we are - // waiting waitForNextChangeInterval before decreasing the counter. - // If another compiler run is started in this interval, we will wait - // again until it finishes. - go func() { - time.Sleep(waitForNextChangeInterval) - lw.compilationDoneWaiter.Done() - }() - } - lw.logger.Print(text) - } - return len(p), nil -} - -type typescriptInstance struct { - cmd *exec.Cmd - compilationCompleteWaiter *sync.WaitGroup -} - -func newTypescriptInstance(tscBinaryPath string, projectPath string, outdir string) *typescriptInstance { - cmd := exec.Command(tscBinaryPath, - "--watch", - "--preserveWatchOutput", - "--project", - projectPath, - "--outDir", - outdir) - - compilationCompleteWaiter := &sync.WaitGroup{} - logWriter := newTypescriptLogWriter(compilationCompleteWaiter) - // Note 1: (from https://golang.org/pkg/os/exec/#Cmd) - // If Stdout and Stderr are the same writer, and have a type that can - // be compared with ==, at most one goroutine at a time will call Write. - // - // Note 2: The typescript compiler reports all compilation errors to - // stdout by design (see https://github.com/microsoft/TypeScript/issues/615) - // It writes to stderr only when something unexpected happens (like internal - // exceptions). To print such errors in the same way as standard typescript - // error, the same logWriter is used both for Stdout and Stderr. - // - // If Stderr arrives in the middle of ordinary typescript output (i.e. - // something unexpected happens), the server.go can stop respond to http - // requests. However, this is not a problem for us: typescript compiler and - // server.go must be restarted anyway. - cmd.Stdout = logWriter - cmd.Stderr = logWriter - - return &typescriptInstance{ - cmd: cmd, - compilationCompleteWaiter: compilationCompleteWaiter, - } -} - -func (ts *typescriptInstance) StartWatch() error { - err := ts.cmd.Start() - if err != nil { - return err - } - go func() { - ts.cmd.Wait() - log.Fatal("Typescript exits unexpected") - }() - - return nil -} - -func (ts *typescriptInstance) WaitForCompilationComplete() { - ts.compilationCompleteWaiter.Wait() -}
diff --git a/polygerrit-ui/yarn.lock b/polygerrit-ui/yarn.lock index 49c4147..6e6df31 100644 --- a/polygerrit-ui/yarn.lock +++ b/polygerrit-ui/yarn.lock
@@ -9,260 +9,11 @@ dependencies: "@babel/highlight" "^7.16.0" -"@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.7", "@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== - -"@babel/core@^7.11.1": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8" - integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.0" - "@babel/helper-module-transforms" "^7.15.0" - "@babel/helpers" "^7.14.8" - "@babel/parser" "^7.15.0" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.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/generator@^7.15.0", "@babel/generator@^7.4.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" - integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== - dependencies: - "@babel/types" "^7.15.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5", "@babel/helper-compilation-targets@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818" - integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A== - dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.14.5": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7" - integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.15.0" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.0" - "@babel/helper-split-export-declaration" "^7.14.5" - -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-member-expression-to-functions@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b" - integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg== - dependencies: - "@babel/types" "^7.15.0" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" - integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.0" - "@babel/helper-simple-access" "^7.14.8" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.9" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.0" - -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-wrap-function" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4" - integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.15.0" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.0" - -"@babel/helper-simple-access@^7.14.8": - version "7.14.8" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" - integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== - dependencies: - "@babel/types" "^7.14.8" - -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== - "@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helpers@^7.14.8": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" - integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.0" - -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/highlight@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" @@ -272,635 +23,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.15.0", "@babel/parser@^7.4.3": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" - integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - -"@babel/plugin-proposal-async-generator-functions@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz#7028dc4fa21dc199bbacf98b39bab1267d0eaf9a" - integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.10.4", "@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" - integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" - -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.11.0", "@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-meta@^7.10.4": - 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== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-block-scoping@^7.14.5": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" - integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-classes@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f" - integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281" - integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig== - dependencies: - "@babel/helper-module-transforms" "^7.15.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.8" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== - dependencies: - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" - integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - -"@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-template-literals@^7.14.5", "@babel/plugin-transform-template-literals@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/preset-env@^7.9.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.0.tgz#e2165bf16594c9c05e52517a194bf6187d6fe464" - integrity sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q== - dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.9" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.14.5" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.14.5" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.9" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.14.5" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.15.0" - "@babel/plugin-transform-modules-systemjs" "^7.14.5" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.14.5" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.15.0" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.16.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" - integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.14.5", "@babel/template@^7.4.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0", "@babel/traverse@^7.4.3": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" - integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.0" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.15.0" - "@babel/types" "^7.15.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" - integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== - dependencies: - "@babel/helper-validator-identifier" "^7.14.9" - to-fast-properties "^2.0.0" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - "@esbuild/linux-loong64@0.14.54": version "0.14.54" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" @@ -913,13 +35,6 @@ dependencies: "@types/chai" "^4.2.12" -"@koa/cors@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-3.1.0.tgz#618bb073438cfdbd3ebd0e648a76e33b84f3a3b2" - integrity sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q== - dependencies: - vary "^1.1.2" - "@lit/reactive-element@^1.0.0": version "1.0.2" resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.0.2.tgz#daa7a7c7a6c63d735f0c9634de6b7dbd70a702ab" @@ -951,38 +66,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@open-wc/building-utils@^2.18.3": - version "2.18.4" - resolved "https://registry.yarnpkg.com/@open-wc/building-utils/-/building-utils-2.18.4.tgz#397e42039f5d26c38f7a2cc01e347e0e5c2e8e99" - integrity sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg== - dependencies: - "@babel/core" "^7.11.1" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@webcomponents/shadycss" "^1.10.2" - "@webcomponents/webcomponentsjs" "^2.5.0" - arrify "^2.0.1" - browserslist "^4.16.0" - chokidar "^3.4.3" - clean-css "^4.2.3" - clone "^2.1.2" - core-js-bundle "^3.8.1" - deepmerge "^4.2.2" - es-module-shims "^0.4.7" - html-minifier-terser "^5.1.1" - lru-cache "^5.1.1" - minimatch "^3.0.4" - parse5 "^5.1.1" - path-is-inside "^1.0.2" - regenerator-runtime "^0.13.7" - resolve "^1.19.0" - rimraf "^3.0.2" - shady-css-scoped-element "^0.0.2" - systemjs "^6.8.3" - terser "^4.6.7" - valid-url "^1.0.9" - whatwg-fetch "^3.5.0" - whatwg-url "^7.1.0" - "@open-wc/chai-dom-equals@^0.12.36": version "0.12.36" resolved "https://registry.yarnpkg.com/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz#ed0eb56b9e98c4d7f7280facce6215654aae9f4c" @@ -996,22 +79,6 @@ resolved "https://registry.yarnpkg.com/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz#0df5d438285fc3482838786ee81895318f0ff778" integrity sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw== -"@open-wc/karma-esm@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@open-wc/karma-esm/-/karma-esm-3.0.9.tgz#f2bb5c78f69685289718097b8d9cd742acfb07fe" - integrity sha512-GzpL/iHVBskZDmKC7cLYLBYzuSoIng7CxyMxp5Ai4VxMSwCVFG+6j/PKLOXVma+EAwwvmq2L5B9tWVbXR34Peg== - dependencies: - "@open-wc/building-utils" "^2.18.3" - babel-plugin-istanbul "^5.1.4" - chokidar "^3.0.0" - deepmerge "^4.2.2" - es-dev-server "^1.57.8" - minimatch "^3.0.4" - node-fetch "^2.6.0" - polyfills-loader "^1.7.4" - portfinder "^1.0.21" - request "^2.88.0" - "@open-wc/scoped-elements@^2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@open-wc/scoped-elements/-/scoped-elements-2.1.3.tgz#c4f06fa16091c6ebf2a69b3f40afc03821f42535" @@ -1076,18 +143,7 @@ is-module "^1.0.0" resolve "^1.19.0" -"@rollup/plugin-node-resolve@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" - integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== - dependencies: - "@rollup/pluginutils" "^3.0.8" - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.14.2" - -"@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": +"@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -1143,39 +199,6 @@ resolved "https://registry.yarnpkg.com/@types/babel__code-frame/-/babel__code-frame-7.0.3.tgz#eda94e1b7c9326700a4b69c485ebbc9498a0b63f" integrity sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw== -"@types/babel__core@^7.1.3": - version "7.1.15" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" - integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== - dependencies: - "@babel/types" "^7.3.0" - "@types/body-parser@*": version "1.19.1" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.1.tgz#0c0174c42a7d017b818303d4b5d969cb0b75929c" @@ -1184,23 +207,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/browserslist-useragent@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/browserslist-useragent/-/browserslist-useragent-3.0.4.tgz#385067529bf5a59d845c98d4c56d9e8223bbf34a" - integrity sha512-S/AhrluMHi8EcuxxCtTDBGr8u+XvwUfLvZdARuIS2LFZ/lHoeaeJJYCozD68GKH6wm52FbIHq4WWPF/Ec6a9qA== - -"@types/browserslist@^4.8.0": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@types/browserslist/-/browserslist-4.15.0.tgz#ba0265b33003a2581df1fc5f483321a30205f2d2" - integrity sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA== - dependencies: - browserslist "*" - -"@types/caniuse-api@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/caniuse-api/-/caniuse-api-3.0.2.tgz#684ba0c284b2a58346abf0000bd0a735ad072d75" - integrity sha512-YfCDMn7R59n7GFFfwjPAM0zLJQy4UvveC32rOJBmTqJJY8uSRqM4Dc7IJj8V9unA48Qy4nj5Bj3jD6Q8VZ1Seg== - "@types/chai-dom@^0.0.12": version "0.0.12" resolved "https://registry.yarnpkg.com/@types/chai-dom/-/chai-dom-0.0.12.tgz#fdd7a52bed4dd235ed1c94d3d2d31d4e7db1d03a" @@ -1236,16 +242,6 @@ resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.0.tgz#adbb77980a1cc376bb208e3f4142e907410430f6" integrity sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA== -"@types/command-line-usage@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.2.tgz#ba5e3f6ae5a2009d466679cc431b50635bf1a064" - integrity sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg== - -"@types/component-emitter@^1.2.10": - version "1.2.10" - resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" - integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== - "@types/connect@*": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -1263,11 +259,6 @@ resolved "https://registry.yarnpkg.com/@types/convert-source-map/-/convert-source-map-1.5.2.tgz#318dc22d476632a4855594c16970c6dc3ed086e7" integrity sha512-tHs++ZeXer40kCF2JpE51Hg7t4HPa18B1b1Dzy96S0eCw8QKECNMYMfwa1edK/x8yCN0r4e6ewvLcc5CsVGkdg== -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - "@types/cookies@*": version "0.7.7" resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.7.tgz#7a92453d1d16389c05a5301eef566f34946cfd81" @@ -1278,11 +269,6 @@ "@types/keygrip" "*" "@types/node" "*" -"@types/cors@^2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== - "@types/debounce@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/debounce/-/debounce-1.2.0.tgz#9ee99259f41018c640b3929e1bb32c3dcecdb192" @@ -1293,13 +279,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/etag@*": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@types/etag/-/etag-1.8.1.tgz#593ca8ddb43acb3db049bd0955fd64d281ab58b9" - integrity sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ== - dependencies: - "@types/node" "*" - "@types/express-serve-static-core@^4.17.18": version "4.17.24" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz#ea41f93bf7e0d59cd5a76665068ed6aab6815c07" @@ -1365,38 +344,7 @@ dependencies: "@types/koa" "*" -"@types/koa-compress@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@types/koa-compress/-/koa-compress-2.0.9.tgz#5d19f7d928f78b451a9afd148863e2b45f51e541" - integrity sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw== - dependencies: - "@types/koa" "*" - "@types/node" "*" - -"@types/koa-etag@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/koa-etag/-/koa-etag-3.0.0.tgz#d14d3dab45d5577b94bc72960631de96751341d3" - integrity sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ== - dependencies: - "@types/etag" "*" - "@types/koa" "*" - -"@types/koa-send@*": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/koa-send/-/koa-send-4.1.3.tgz#17193c6472ae9e5d1b99ae8086949cc4fd69179d" - integrity sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA== - dependencies: - "@types/koa" "*" - -"@types/koa-static@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/koa-static/-/koa-static-4.0.2.tgz#a199d2d64d2930755eb3ea370aeaf2cb6f501d67" - integrity sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w== - dependencies: - "@types/koa" "*" - "@types/koa-send" "*" - -"@types/koa@*", "@types/koa@^2.0.48", "@types/koa@^2.11.6": +"@types/koa@*", "@types/koa@^2.11.6": version "2.13.4" resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.4.tgz#10620b3f24a8027ef5cbae88b393d1b31205726b" integrity sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw== @@ -1410,44 +358,17 @@ "@types/koa-compose" "*" "@types/node" "*" -"@types/koa__cors@^3.0.1": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/koa__cors/-/koa__cors-3.0.3.tgz#49d75813b443ba3d4da28ea6cf6244b7e99a3b23" - integrity sha512-74Xb4hJOPGKlrQ4PRBk1A/p0gfLpgbnpT0o67OMVbwyeMXvlBN+ZCRztAAmkKZs+8hKbgMutUlZVbA52Hr/0IA== - dependencies: - "@types/koa" "*" - -"@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/mime-types@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" - integrity sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM= - "@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@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - "@types/mocha@^8.2.0": version "8.2.3" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== -"@types/mocha@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - -"@types/node@*", "@types/node@>=10.0.0": +"@types/node@*": version "16.6.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.1.tgz#aee62c7b966f55fc66c7b6dfa1d58db2a616da61" integrity sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw== @@ -1457,11 +378,6 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.2.tgz#99f6b72d82e34cea03a4d8f2ed72114d909c1c61" integrity sha512-+hQX+WyJAOne7Fh3zF5CxPemILIbuhNcqHHodzK9caYOLnC8pD5efmPleRnw0z++LfKUC/sVNMwk0Gap+B0baA== -"@types/path-is-inside@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/path-is-inside/-/path-is-inside-1.0.0.tgz#02d6ff38975d684bdec96204494baf9f29f0e17f" - integrity sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw== - "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -1472,13 +388,6 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -1526,13 +435,6 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== -"@types/whatwg-url@^6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-6.4.0.tgz#1e59b8c64bc0dbdf66d037cf8449d1c3d5270237" - integrity sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg== - dependencies: - "@types/node" "*" - "@types/ws@^7.4.0": version "7.4.7" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" @@ -1547,11 +449,6 @@ dependencies: "@types/node" "*" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - "@web/browser-logs@^0.2.1", "@web/browser-logs@^0.2.2": version "0.2.5" resolved "https://registry.yarnpkg.com/@web/browser-logs/-/browser-logs-0.2.5.tgz#0895efb641eacb0fbc1138c6092bd18c01df2734" @@ -1795,22 +692,7 @@ portfinder "^1.0.28" source-map "^0.7.3" -"@webcomponents/shadycss@^1.10.2": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webcomponents/shadycss/-/shadycss-1.11.0.tgz#73e289996c002d8be694cd3be0e83c46ad25e7e0" - integrity sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA== - -"@webcomponents/webcomponentsjs@^2.4.0", "@webcomponents/webcomponentsjs@^2.5.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz#7d1674c40bddf0c6dd974c44ffd34512fe7274ff" - integrity sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q== - -abortcontroller-polyfill@^1.4.0: - version "1.7.3" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== - -accepts@^1.3.5, accepts@~1.3.4: +accepts@^1.3.5: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== @@ -1830,21 +712,6 @@ dependencies: debug "4" -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-colors@4.1.1: - version "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@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1852,16 +719,6 @@ dependencies: type-fest "^0.21.3" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -1874,18 +731,13 @@ dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -any-promise@^1.0.0, any-promise@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -1894,11 +746,6 @@ normalize-path "^3.0.0" picomatch "^2.0.4" -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - array-back@^3.0.1, array-back@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" @@ -1914,35 +761,11 @@ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - async@^2.6.4: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" @@ -1950,67 +773,11 @@ dependencies: lodash "^4.17.14" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - axe-core@^4.3.3: version "4.4.3" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^5.1.4: - version "5.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" - integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -2021,18 +788,6 @@ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -2047,22 +802,6 @@ inherits "^2.0.4" readable-stream "^3.4.0" -body-parser@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2071,48 +810,18 @@ balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserslist-useragent@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz#d06c062a4e444ad5e1a80323131d4508450c9af5" - integrity sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA== - dependencies: - browserslist "^4.12.0" - semver "^7.3.2" - useragent "^2.3.0" - -browserslist@*, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.0, browserslist@^4.16.6, browserslist@^4.16.7, browserslist@^4.9.1: - version "4.16.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335" - integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA== - dependencies: - caniuse-lite "^1.0.30001248" - colorette "^1.2.2" - electron-to-chromium "^1.3.793" - escalade "^3.1.1" - node-releases "^1.1.73" - buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -2121,17 +830,12 @@ base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -bytes@3.1.0, bytes@^3.0.0: +bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== @@ -2152,49 +856,11 @@ function-bind "^1.1.1" get-intrinsic "^1.0.2" -camel-case@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001033, caniuse-lite@^1.0.30001248: - version "1.0.30001251" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" - integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chai-a11y-axe@^1.3.2: version "1.4.0" resolved "https://registry.yarnpkg.com/chai-a11y-axe/-/chai-a11y-axe-1.4.0.tgz#e584af967727a8656e27c32e845f5db21f2bf2e0" @@ -2202,7 +868,7 @@ dependencies: axe-core "^4.3.3" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: +chalk@^2.0.0, 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== @@ -2211,30 +877,7 @@ escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.0.0, chokidar@^3.4.3, chokidar@^3.5.1: +chokidar@^3.4.3: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== @@ -2264,13 +907,6 @@ is-wsl "^2.2.0" lighthouse-logger "^1.0.0" -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -2278,15 +914,6 @@ dependencies: restore-cursor "^3.1.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" @@ -2331,28 +958,6 @@ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" - integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-line-args@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.0.tgz#087b02748272169741f1fd7c785b295df079b9be" - integrity sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - command-line-args@^5.1.1: version "5.2.1" resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" @@ -2363,16 +968,6 @@ lodash.camelcase "^4.3.0" typical "^4.0.0" -command-line-usage@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" - integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA== - dependencies: - array-back "^4.0.1" - chalk "^2.4.2" - table-layout "^1.0.1" - typical "^5.2.0" - command-line-usage@^6.1.1: version "6.1.3" resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" @@ -2383,43 +978,11 @@ table-layout "^1.0.2" typical "^5.2.0" -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@^2.0.0: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - content-disposition@~0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -2427,7 +990,7 @@ dependencies: safe-buffer "5.1.2" -content-type@^1.0.4, content-type@~1.0.4: +content-type@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== @@ -2439,11 +1002,6 @@ dependencies: safe-buffer "~5.1.1" -cookie@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - cookies@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" @@ -2452,32 +1010,6 @@ depd "~2.0.0" keygrip "~1.1.0" -core-js-bundle@^3.6.0, core-js-bundle@^3.8.1: - version "3.16.1" - resolved "https://registry.yarnpkg.com/core-js-bundle/-/core-js-bundle-3.16.1.tgz#410c73317f7154dc4aac0674556b7003a7f4c47f" - integrity sha512-pPavAOLKXD2YXNBhS3jq4WMGJPeqgo4W9WZ7GebxXTZY/jvnD5ID+J3nUOCS7UXwCNsQKbbUg1+hp/4rmvzNeg== - -core-js-compat@^3.14.0, core-js-compat@^3.16.0: - version "3.16.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d" - integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ== - dependencies: - browserslist "^4.16.7" - semver "7.0.0" - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cors@~2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - cross-fetch@3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -2485,75 +1017,39 @@ dependencies: node-fetch "2.6.7" -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -date-format@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.10.tgz#7aa4bc0ad0c79f4ba858290e5dbb47f27d602e79" - integrity sha512-RuMIHocrVjF84bUSTcd1uokIsLsOsk1Awb7TexNOI3f48ukCu39mjslWquDTA08VaDMF2umr3MB9ow5EyJTWyA== - debounce@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@2.6.9, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@4.3.4, debug@^4.3.4: +debug@4, debug@4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - ms "2.1.2" + ms "2.0.0" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.7: +debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@~4.3.1, debug@~4.3.2: +debug@^4.1.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -2574,18 +1070,6 @@ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -2616,16 +1100,6 @@ resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.981744.tgz#9960da0370284577d46c28979a0b32651022bacf" integrity sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg== -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - diff@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" @@ -2638,53 +1112,17 @@ dependencies: path-type "^4.0.0" -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dynamic-import-polyfill@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz#e1f9eb1876ee242bd56572f8ed4df768e143083f" - integrity sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.793: - version "1.3.806" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.806.tgz#21502100f11aead6c501d1cd7f2504f16c936642" - integrity sha512-AH/otJLAAecgyrYp0XK1DPiGVWcOgwPeJBOLeuFQ5l//vhQhwC9u6d+GijClqJAmsHG4XDue81ndSQPohUu0xA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encodeurl@^1.0.2, encodeurl@~1.0.2: +encodeurl@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= @@ -2696,120 +1134,11 @@ dependencies: once "^1.4.0" -engine.io-parser@~5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" - integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== - -engine.io@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.0.tgz#003bec48f6815926f2b1b17873e576acd54f41d0" - integrity sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg== - dependencies: - "@types/cookie" "^0.4.1" - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~5.0.3" - ws "~8.2.3" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - errorstacks@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/errorstacks/-/errorstacks-2.3.2.tgz#cab2c7c83e199a2b2862de3fea46f68372094166" integrity sha512-cJp8qf5t2cXmVZJjZVrcU4ODFJeQOcUyjJEtPFtWO+3N6JPM6vCe4Sfv3cwIs/qS7gnUo/fvKX/mDCVQZq+P7A== -es-dev-server@^1.57.8: - version "1.60.2" - resolved "https://registry.yarnpkg.com/es-dev-server/-/es-dev-server-1.60.2.tgz#cca56fe452d46c3ec531c19745e0aa9d7b71e1b3" - integrity sha512-Lp9kZzawJ35HDKiqLNb/YbD2VufF+3tdxHgbP/kfdLI5JLgDJV4SuKTWWny3ZuBUAlZKGre7a0iXUByGQqfdPA== - dependencies: - "@babel/core" "^7.11.1" - "@babel/plugin-proposal-dynamic-import" "^7.10.4" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" - "@babel/plugin-proposal-optional-chaining" "^7.11.0" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/preset-env" "^7.9.0" - "@koa/cors" "^3.1.0" - "@open-wc/building-utils" "^2.18.3" - "@rollup/plugin-node-resolve" "^7.1.1" - "@rollup/pluginutils" "^3.0.0" - "@types/babel__core" "^7.1.3" - "@types/browserslist" "^4.8.0" - "@types/browserslist-useragent" "^3.0.0" - "@types/caniuse-api" "^3.0.0" - "@types/command-line-args" "^5.0.0" - "@types/command-line-usage" "^5.0.1" - "@types/debounce" "^1.2.0" - "@types/koa" "^2.0.48" - "@types/koa-compress" "^2.0.9" - "@types/koa-etag" "^3.0.0" - "@types/koa-static" "^4.0.1" - "@types/koa__cors" "^3.0.1" - "@types/lru-cache" "^5.1.0" - "@types/mime-types" "^2.1.0" - "@types/minimatch" "^3.0.3" - "@types/path-is-inside" "^1.0.0" - "@types/whatwg-url" "^6.4.0" - browserslist "^4.9.1" - browserslist-useragent "^3.0.2" - builtin-modules "^3.1.0" - camelcase "^5.3.1" - caniuse-api "^3.0.0" - caniuse-lite "^1.0.30001033" - chokidar "^3.0.0" - command-line-args "^5.0.2" - command-line-usage "^6.1.0" - debounce "^1.2.0" - deepmerge "^4.2.2" - es-module-lexer "^0.3.13" - get-stream "^5.1.0" - is-stream "^2.0.0" - isbinaryfile "^4.0.2" - koa "^2.7.0" - koa-compress "^3.0.0" - koa-etag "^3.0.0" - koa-static "^5.0.0" - lru-cache "^5.1.1" - mime-types "^2.1.27" - minimatch "^3.0.4" - open "^7.0.3" - parse5 "^5.1.1" - path-is-inside "^1.0.2" - polyfills-loader "^1.7.4" - portfinder "^1.0.21" - rollup "^2.7.2" - strip-ansi "^5.2.0" - systemjs "^6.3.1" - tslib "^1.11.1" - useragent "^2.3.0" - whatwg-url "^7.0.0" - -es-module-lexer@^0.3.13: - version "0.3.26" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" - integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== - es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" @@ -2820,11 +1149,6 @@ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.0.3.tgz#f0d8d35b36d13024110000d5e6fadc8eeaeb66b8" integrity sha512-iC67eXHToclrlVhQfpRawDiF8D8sQxNxmbqw5oebegOaJkyx/w9C/k57/5e6yJR2zIByRt9OXdqX50DV2t6ZKw== -es-module-shims@^0.4.6, es-module-shims@^0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/es-module-shims/-/es-module-shims-0.4.7.tgz#1419b65bbd38dfe91ab8ea5d7b4b454561e44641" - integrity sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg== - esbuild-android-64@0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" @@ -2952,51 +1276,31 @@ esbuild-windows-64 "0.14.54" esbuild-windows-arm64 "0.14.54" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@^1.0.3, escape-html@~1.0.3: +escape-html@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@^1.3.0, etag@^1.8.1: +etag@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - extract-zip@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -3008,21 +1312,6 @@ optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - fast-glob@^3.1.1: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" @@ -3034,11 +1323,6 @@ merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -3060,19 +1344,6 @@ dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - find-replace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" @@ -3080,21 +1351,6 @@ dependencies: array-back "^3.0.1" -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -3103,35 +1359,6 @@ locate-path "^5.0.0" path-exists "^4.0.0" -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -follow-redirects@^1.0.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3142,15 +1369,6 @@ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3166,16 +1384,6 @@ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "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-intrinsic@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -3197,13 +1405,6 @@ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -3211,19 +1412,7 @@ dependencies: is-glob "^4.0.1" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3, glob@^7.1.7: +glob@^7.1.3: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -3235,11 +1424,6 @@ once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globby@^11.0.1: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" @@ -3252,29 +1436,6 @@ merge2 "^1.3.0" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3304,34 +1465,11 @@ dependencies: function-bind "^1.1.1" -he@1.2.0, he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-minifier-terser@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - http-assert@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" @@ -3340,17 +1478,6 @@ deep-equal "~1.0.1" http-errors "~1.7.2" -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@1.7.3, http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" @@ -3383,24 +1510,6 @@ setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - https-proxy-agent@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -3449,21 +1558,11 @@ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -intersection-observer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.7.0.tgz#ee16bee978db53516ead2f0a8154b09b400bbdc9" - integrity sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg== - ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3524,27 +1623,12 @@ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -3556,44 +1640,16 @@ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isbinaryfile@^4.0.2, isbinaryfile@^4.0.6, isbinaryfile@^4.0.8: +isbinaryfile@^4.0.6: version "4.0.8" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - istanbul-lib-coverage@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -3616,132 +1672,11 @@ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^2.1.2: - 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== - dependencies: - minimist "^1.2.5" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - just-extend@^4.0.2: version "4.2.1" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== -karma-chrome-launcher@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz#baca9cc071b1562a1db241827257bfe5cab597ea" - integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== - dependencies: - which "^1.2.1" - -karma-mocha-reporter@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560" - integrity sha1-FRIAlejtgZGG5HoLAS8810GJVWA= - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - strip-ansi "^4.0.0" - -karma-mocha@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" - integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== - dependencies: - minimist "^1.2.3" - -karma@^6.3.20: - version "6.3.20" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.3.20.tgz#12f5c3b0e68f204607cb0a3a78d4751b42ef61a8" - integrity sha512-HRNQhMuKOwKpjYlWiJP0DUrJOh+QjaI/DTaD8b9rEm4Il3tJ8MijutVZH4ts10LuUFst/CedwTS6vieCN8yTSw== - dependencies: - "@colors/colors" "1.5.0" - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.5.1" - connect "^3.7.0" - di "^0.0.1" - dom-serialize "^2.2.1" - glob "^7.1.7" - graceful-fs "^4.2.6" - http-proxy "^1.18.1" - isbinaryfile "^4.0.8" - lodash "^4.17.21" - log4js "^6.4.1" - mime "^2.5.2" - minimatch "^3.0.4" - mkdirp "^0.5.5" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^4.4.1" - source-map "^0.6.1" - tmp "^0.2.1" - ua-parser-js "^0.7.30" - yargs "^16.1.1" - keygrip@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" @@ -3749,36 +1684,11 @@ dependencies: tsscmp "1.0.6" -koa-compose@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= - dependencies: - any-promise "^1.1.0" - koa-compose@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== -koa-compress@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/koa-compress/-/koa-compress-3.1.0.tgz#00fb0af695dc4661c6de261a18da669626ea3ca1" - integrity sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ== - dependencies: - bytes "^3.0.0" - compressible "^2.0.0" - koa-is-json "^1.0.0" - statuses "^1.0.0" - -koa-convert@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= - dependencies: - co "^4.6.0" - koa-compose "^3.0.0" - koa-convert@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" @@ -3787,14 +1697,6 @@ co "^4.6.0" koa-compose "^4.1.0" -koa-etag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/koa-etag/-/koa-etag-3.0.0.tgz#9ef7382ddd5a82ab0deb153415c915836f771d3f" - integrity sha1-nvc4Ld1agqsN6xU0FckVg293HT8= - dependencies: - etag "^1.3.0" - mz "^2.1.0" - koa-etag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/koa-etag/-/koa-etag-4.0.0.tgz#2c2bb7ae69ca1ac6ced09ba28dcb78523c810414" @@ -3802,11 +1704,6 @@ dependencies: etag "^1.8.1" -koa-is-json@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" - integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ= - koa-send@^5.0.0, koa-send@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" @@ -3853,35 +1750,6 @@ type-is "^1.6.16" vary "^1.1.2" -koa@^2.7.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051" - integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.8.0" - debug "~3.1.0" - delegates "^1.0.0" - depd "^2.0.0" - destroy "^1.0.4" - encodeurl "^1.0.2" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - lighthouse-logger@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz#ba6303e739307c4eee18f08249524e7dafd510db" @@ -3914,24 +1782,6 @@ lit-element "^3.0.0" lit-html "^2.0.0" -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -3939,63 +1789,21 @@ dependencies: p-locate "^4.1.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.14, lodash@^4.17.21: +lodash@^4.17.14: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -4006,39 +1814,6 @@ slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -log4js@^6.4.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.5.2.tgz#9ae371e5b3cb3a3a209c24686e5547f8670834e5" - integrity sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A== - dependencies: - date-format "^4.0.10" - debug "^4.3.4" - flatted "^3.2.5" - rfdc "^1.3.0" - streamroller "^3.1.1" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@4.1.x: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -4076,35 +1851,23 @@ braces "^3.0.1" picomatch "^2.2.3" -mime-db@1.49.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.49.0: version "1.49.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.24: version "2.1.32" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== dependencies: mime-db "1.49.0" -mime@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4112,11 +1875,6 @@ dependencies: brace-expansion "^1.1.7" -minimist@^1.2.3, 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== - minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -4127,13 +1885,6 @@ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.5: - 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" - mkdirp@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -4146,36 +1897,6 @@ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mocha@9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4186,30 +1907,16 @@ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mz@^2.1.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nanocolors@^0.2.1: version "0.2.13" resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.2.13.tgz#dfd1ed0bfab05e9fe540eb6874525f0a1684099b" integrity sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA== -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - nanoid@^3.1.25: version "3.1.30" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" @@ -4231,14 +1938,6 @@ just-extend "^4.0.2" path-to-regexp "^1.7.0" -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -4246,62 +1945,17 @@ dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-releases@^1.1.73: - version "1.1.74" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e" - integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - object-inspect@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -on-finished@^2.3.0, on-finished@~2.3.0: +on-finished@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= @@ -4327,14 +1981,6 @@ resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= -open@^7.0.3: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - open@^8.0.2: version "8.4.0" resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" @@ -4344,32 +1990,13 @@ is-docker "^2.1.1" is-wsl "^2.2.0" -os-tmpdir@~1.0.2: - 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-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -4377,62 +2004,21 @@ dependencies: p-limit "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -param-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parseurl@^1.3.2, parseurl@~1.3.3: +parseurl@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -4443,11 +2029,6 @@ 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.2: - 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-parse@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -4460,13 +2041,6 @@ dependencies: isarray "0.0.1" -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -4477,21 +2051,11 @@ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -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= - pkg-dir@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -4499,36 +2063,6 @@ dependencies: find-up "^4.0.0" -polyfills-loader@^1.7.4: - version "1.7.6" - resolved "https://registry.yarnpkg.com/polyfills-loader/-/polyfills-loader-1.7.6.tgz#5cff98bfc9689cf10e44bdd32f498cfeb4374c51" - integrity sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ== - dependencies: - "@babel/core" "^7.11.1" - "@open-wc/building-utils" "^2.18.3" - "@webcomponents/webcomponentsjs" "^2.4.0" - abortcontroller-polyfill "^1.4.0" - core-js-bundle "^3.6.0" - deepmerge "^4.2.2" - dynamic-import-polyfill "^0.1.1" - es-module-shims "^0.4.6" - intersection-observer "^0.7.0" - parse5 "^5.1.1" - regenerator-runtime "^0.13.3" - resize-observer-polyfill "^1.5.1" - systemjs "^6.3.1" - terser "^4.6.7" - whatwg-fetch "^3.0.0" - -portfinder@^1.0.21: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - portfinder@^1.0.28: version "1.0.32" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" @@ -4548,16 +2082,6 @@ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - 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" @@ -4566,7 +2090,7 @@ end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -4589,16 +2113,6 @@ unbzip2-stream "1.4.3" ws "8.5.0" -qjobs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - qs@^6.5.2: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" @@ -4606,38 +2120,11 @@ dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - raw-body@^2.3.3: version "2.4.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" @@ -4648,23 +2135,6 @@ iconv-lite "0.4.24" unpipe "1.0.0" -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -4686,105 +2156,6 @@ resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -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-path@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" @@ -4793,7 +2164,7 @@ http-errors "~1.6.2" path-is-absolute "1.0.1" -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0: +resolve@^1.19.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -4814,12 +2185,7 @@ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -4833,13 +2199,6 @@ optionalDependencies: fsevents "~2.3.2" -rollup@^2.7.2: - version "2.56.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f" - integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ== - optionalDependencies: - fsevents "~2.3.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -4852,38 +2211,21 @@ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - semver@^7.3.4: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -4891,13 +2233,6 @@ dependencies: lru-cache "^6.0.0" -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -4913,11 +2248,6 @@ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -shady-css-scoped-element@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz#c538fcfe2317e979cd02dfec533898b95b4ea8fe" - integrity sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -4958,111 +2288,17 @@ astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== - -socket.io-parser@~4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" - integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== - dependencies: - "@types/component-emitter" "^1.2.10" - component-emitter "~1.3.0" - debug "~4.3.1" - -socket.io@^4.4.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.1.tgz#aa7e73f8a6ce20ee3c54b2446d321bbb6b1a9029" - integrity sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - debug "~4.3.2" - engine.io "~6.2.0" - socket.io-adapter "~2.4.0" - socket.io-parser "~4.0.4" - -source-map-support@^0.5.19, source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.0.0, statuses@^1.5.0, statuses@~1.5.0: +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -streamroller@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.1.tgz#679aae10a4703acdf2740755307df0a05ad752e6" - integrity sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ== - dependencies: - date-format "^4.0.10" - debug "^4.3.4" - fs-extra "^10.1.0" - -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== @@ -5078,20 +2314,6 @@ dependencies: safe-buffer "~5.2.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -5099,23 +2321,6 @@ dependencies: ansi-regex "^5.0.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-json-comments@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -5130,12 +2335,7 @@ dependencies: has-flag "^4.0.0" -systemjs@^6.3.1, systemjs@^6.8.3: - version "6.10.2" - resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-6.10.2.tgz#c9870217bddf9cfd25d12d4fcd1989541ef1207c" - integrity sha512-PwaC0Z6Y1E6gFekY2u38EC5+5w2M65jYVrD1aAcOptpHVhCwPIwPFJvYJyryQKUyeuQ5bKKI3PBHWNjdE9aizg== - -table-layout@^1.0.1, table-layout@^1.0.2: +table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== @@ -5166,63 +2366,11 @@ inherits "^2.0.3" readable-stream "^3.1.1" -terser@^4.6.3, terser@^4.6.7: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tmp@0.0.x: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -5235,21 +2383,6 @@ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - tr46@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" @@ -5262,33 +2395,11 @@ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tslib@^1.11.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -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" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -5299,7 +2410,7 @@ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-is@^1.6.16, type-is@~1.6.17: +type-is@^1.6.16: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -5317,11 +2428,6 @@ resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== -ua-parser-js@^0.7.30: - version "0.7.30" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.30.tgz#4cf5170e8b55ac553fe8b38df3a82f0669671f0b" - integrity sha512-uXEtSresNUlXQ1QL4/3dQORcGv7+J2ookOG2ybA/ga9+HYEXueT2o+8dUJQkpedsyTyCJ6jCCirRcKtdtx1kbg== - ua-parser-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.2.tgz#e2976c34dbfb30b15d2c300b2a53eac87c57a775" @@ -5335,69 +2441,16 @@ buffer "^5.2.1" through "^2.3.8" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -useragent@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" - integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== - dependencies: - lru-cache "4.1.x" - tmp "0.0.x" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - v8-to-istanbul@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -5407,58 +2460,21 @@ convert-source-map "^1.6.0" source-map "^0.7.3" -valid-url@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" - integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@^1, vary@^1.1.2: +vary@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -whatwg-fetch@^3.0.0, whatwg-fetch@^3.5.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - whatwg-url@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" @@ -5475,29 +2491,6 @@ tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^7.0.0, whatwg-url@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - wordwrapjs@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" @@ -5506,11 +2499,6 @@ reduce-flatten "^2.0.0" typical "^5.2.0" -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -5520,15 +2508,6 @@ string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -5544,64 +2523,11 @@ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0, yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -5614,8 +2540,3 @@ version "1.2.1" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==