From 25759327b11354362f602e73dac68132244a23fd Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 6 Oct 2020 10:38:36 -0700 Subject: [PATCH 001/399] Initial commit --- .gitignore | 104 +++++++++++++++ LICENSE | 373 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 + 3 files changed, 479 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6704566 --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c6848e --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# demo-study-addon +Demonstrate that installing and managing study add-ons works From bd80983de9bc030ca816acf5bfdcb7a47a9ba863 Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 6 Oct 2020 10:45:56 -0700 Subject: [PATCH 002/399] basic demo study add-on --- README.md | 24 ++++++++++++++++++++++-- background.js | 23 +++++++++++++++++++++++ manifest.json | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 background.js create mode 100644 manifest.json diff --git a/README.md b/README.md index 2c6848e..50d7f62 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,22 @@ -# demo-study-addon -Demonstrate that installing and managing study add-ons works +A demo add-on for Ion Studies. + +This requires [Firefox](https://www.mozilla.org/en-US/firefox/) 78.0 or newer, which supports the [new `browser.telemetry.submitEncryptedPing` WebExtension API](https://bugzilla.mozilla.org/show_bug.cgi?id=1634557). + +NOTE - Only unbranded Firefox builds such as [Nightly](https://nightly.mozilla.org) will be able to load privileged APIs without a special signing key. + +```console +PIONEER_ID="abc123" +FIREFOX_BINARY="/Applications/Firefox Nightly.app/Contents/MacOS/firefox" +web-ext run --pref=extensions.experiments.enabled=true \ + --pref=toolkit.telemetry.pioneerId="${PIONEER_ID}" \ + --browser-console \ + --firefox-binary "${FIREFOX_BINARY}" + ``` + +To see extra details on what Firefox Telemetry is doing, enable Trace log level with `--pref=toolkit.telemetry.log.level=Trace`. + +On startup, this demo add-on sends an encrypted ping containing the current date and time to Mozilla's Telemetry servers. + +The schema for encrypted payloads sent via `browser.telemetry.submitEncryptedPing` is defined in [the Mozilla pipeline schema repository](https://github.com/mozilla-services/mozilla-pipeline-schemas/tree/master/schemas/pioneer-debug/debug). In this case `pioneer-debug` is the schema namespace and `debug` is the schema name. These are defined in [manifest.json](manifest.json). + +The schema for the new `manifest.json` entries for the `telemetry` key is [defined here](https://searchfox.org/mozilla-central/source/toolkit/components/extensions/schemas/telemetry.json). diff --git a/background.js b/background.js new file mode 100644 index 0000000..b81ec35 --- /dev/null +++ b/background.js @@ -0,0 +1,23 @@ +/* eslint-disable no-undef */ +async function sendPing() { + const currentDate = new Date(); + + const payload = { + datetime: currentDate, + }; + + const options = { + schemaName: "debug", + schemaVersion: 1, + }; + + await browser.telemetry.submitEncryptedPing(payload, options); +} + +sendPing() + .then((result) => + console.info( + "Telemetry submitted, check about:telemetry archived ping data." + ) + ) + .catch((error) => console.error("Could not send ping:", error)); diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..bd59527 --- /dev/null +++ b/manifest.json @@ -0,0 +1,37 @@ +{ + "description": "Demonstrate that Ion study add-ons work", + "author": "Mozilla", + "manifest_version": 2, + "name": "Ion Demo Study", + "version": "2.0", + "homepage_url": "https://github.com/mozilla-ion/demo-study-addon", + + "applications": { + "gecko": { + "id": "ion-demo-study@mozilla.org", + "strict_min_version": "77.0a1" + } + }, + + "permissions": ["telemetry"], + + "telemetry": { + "pioneer_id": true, + "study_name": "ion-demo-study", + "ping_type": "pioneer-study", + "schemaNamespace": "pioneer-debug", + "public_key": { + "id": "debug", + "key": { + "crv": "P-256", + "kty": "EC", + "x": "XLkI3NaY3-AF2nRMspC63BT1u0Y3moXYSfss7VuQ0mk", + "y": "SB0KnIW-pqk85OIEYZenoNkEyOOp5GeWQhS1KeRtEUE" + } + } + }, + + "background": { + "scripts": ["background.js"] + } +} From 493ba5842ecbc688110595116f075982b36520fe Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Fri, 9 Oct 2020 11:57:01 -0700 Subject: [PATCH 003/399] use `-t nightly` instead of path to Firefox on macOS --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 50d7f62..64497be 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,10 @@ NOTE - Only unbranded Firefox builds such as [Nightly](https://nightly.mozilla.o ```console PIONEER_ID="abc123" -FIREFOX_BINARY="/Applications/Firefox Nightly.app/Contents/MacOS/firefox" web-ext run --pref=extensions.experiments.enabled=true \ --pref=toolkit.telemetry.pioneerId="${PIONEER_ID}" \ --browser-console \ - --firefox-binary "${FIREFOX_BINARY}" + -t nightly ``` To see extra details on what Firefox Telemetry is doing, enable Trace log level with `--pref=toolkit.telemetry.log.level=Trace`. From a3869fb49aaba85b9ad2e1c02b56a20b510330ec Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 13 Oct 2020 08:55:50 -0700 Subject: [PATCH 004/399] issue #3 - remove privileged code from demo study --- README.md | 27 ++++++++++----------------- background.js | 3 ++- manifest.json | 18 +----------------- 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 50d7f62..5b854db 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,15 @@ A demo add-on for Ion Studies. -This requires [Firefox](https://www.mozilla.org/en-US/firefox/) 78.0 or newer, which supports the [new `browser.telemetry.submitEncryptedPing` WebExtension API](https://bugzilla.mozilla.org/show_bug.cgi?id=1634557). +This is a normal, unprivileged WebExtension. -NOTE - Only unbranded Firefox builds such as [Nightly](https://nightly.mozilla.org) will be able to load privileged APIs without a special signing key. +To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `web-ext`: -```console -PIONEER_ID="abc123" -FIREFOX_BINARY="/Applications/Firefox Nightly.app/Contents/MacOS/firefox" -web-ext run --pref=extensions.experiments.enabled=true \ - --pref=toolkit.telemetry.pioneerId="${PIONEER_ID}" \ - --browser-console \ - --firefox-binary "${FIREFOX_BINARY}" - ``` +Firefox: +```bash +web-ext run +``` -To see extra details on what Firefox Telemetry is doing, enable Trace log level with `--pref=toolkit.telemetry.log.level=Trace`. - -On startup, this demo add-on sends an encrypted ping containing the current date and time to Mozilla's Telemetry servers. - -The schema for encrypted payloads sent via `browser.telemetry.submitEncryptedPing` is defined in [the Mozilla pipeline schema repository](https://github.com/mozilla-services/mozilla-pipeline-schemas/tree/master/schemas/pioneer-debug/debug). In this case `pioneer-debug` is the schema namespace and `debug` is the schema name. These are defined in [manifest.json](manifest.json). - -The schema for the new `manifest.json` entries for the `telemetry` key is [defined here](https://searchfox.org/mozilla-central/source/toolkit/components/extensions/schemas/telemetry.json). +Chrome: +```bash +web-ext run -t chromium +``` \ No newline at end of file diff --git a/background.js b/background.js index b81ec35..ab5f49d 100644 --- a/background.js +++ b/background.js @@ -11,7 +11,8 @@ async function sendPing() { schemaVersion: 1, }; - await browser.telemetry.submitEncryptedPing(payload, options); + // FIXME pass messages to core add-on + throw new Error("not implemented"); } sendPing() diff --git a/manifest.json b/manifest.json index bd59527..082ffbf 100644 --- a/manifest.json +++ b/manifest.json @@ -13,23 +13,7 @@ } }, - "permissions": ["telemetry"], - - "telemetry": { - "pioneer_id": true, - "study_name": "ion-demo-study", - "ping_type": "pioneer-study", - "schemaNamespace": "pioneer-debug", - "public_key": { - "id": "debug", - "key": { - "crv": "P-256", - "kty": "EC", - "x": "XLkI3NaY3-AF2nRMspC63BT1u0Y3moXYSfss7VuQ0mk", - "y": "SB0KnIW-pqk85OIEYZenoNkEyOOp5GeWQhS1KeRtEUE" - } - } - }, + "permissions": ["management"], "background": { "scripts": ["background.js"] From a96d663c633849116fc47a8c8c0d126bfa56c06a Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 13 Oct 2020 09:23:41 -0700 Subject: [PATCH 005/399] check for core add-on and open sign-up page if not present --- background.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/background.js b/background.js index ab5f49d..438b978 100644 --- a/background.js +++ b/background.js @@ -1,4 +1,15 @@ -/* eslint-disable no-undef */ +const ION_SIGNUP_URL = "https://mozilla-ion.github.io/ion-core-addon/"; +const CORE_ADDON_ID = "ion-core-addon@mozilla.org"; + +async function checkIonCore() { + try { + const addon = await browser.management.get(CORE_ADDON_ID); + } catch (ex) { + console.debug("Core add-on not found, opening sign-up URL", ex); + await browser.tabs.create({ url: ION_SIGNUP_URL }); + } +} + async function sendPing() { const currentDate = new Date(); @@ -15,6 +26,14 @@ async function sendPing() { throw new Error("not implemented"); } +checkIonCore() + .then((result) => { + console.debug("Done checking for core add-on"); + }) + .catch((ex) => { + console.error("Checking for core add-on failed, will re-try on startup"); + }); + sendPing() .then((result) => console.info( From 76612d173ce51e017f050e17d176903c1b9c834d Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 13 Oct 2020 09:46:10 -0700 Subject: [PATCH 006/399] rename from demo to basic --- README.md | 2 +- manifest.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5b854db..829d01b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -A demo add-on for Ion Studies. +A basic Mozilla Ion Study. This is a normal, unprivileged WebExtension. diff --git a/manifest.json b/manifest.json index 082ffbf..ee6a363 100644 --- a/manifest.json +++ b/manifest.json @@ -1,14 +1,14 @@ { - "description": "Demonstrate that Ion study add-ons work", + "description": "A basic Mozilla Ion Study.", "author": "Mozilla", "manifest_version": 2, - "name": "Ion Demo Study", + "name": "Ion Basic Study", "version": "2.0", - "homepage_url": "https://github.com/mozilla-ion/demo-study-addon", + "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", "applications": { "gecko": { - "id": "ion-demo-study@mozilla.org", + "id": "ion-basic-study@mozilla.org", "strict_min_version": "77.0a1" } }, From e92672fd3a50adc7bfa4b6270b50573c3e2326fd Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 13 Oct 2020 14:23:17 -0700 Subject: [PATCH 007/399] Update README.md Co-authored-by: Alessio Placitelli --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 829d01b..99c76ab 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ A basic Mozilla Ion Study. -This is a normal, unprivileged WebExtension. +This is an unprivileged WebExtension. To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `web-ext`: @@ -12,4 +12,4 @@ web-ext run Chrome: ```bash web-ext run -t chromium -``` \ No newline at end of file +``` From fa1214ad3ede97d0765c2da0368892a9db46293b Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 13 Oct 2020 14:39:49 -0700 Subject: [PATCH 008/399] add license header --- background.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/background.js b/background.js index 438b978..9d96834 100644 --- a/background.js +++ b/background.js @@ -1,3 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + const ION_SIGNUP_URL = "https://mozilla-ion.github.io/ion-core-addon/"; const CORE_ADDON_ID = "ion-core-addon@mozilla.org"; From 3f73d7f8ae4d92afef32acd590c87a6f8af67451 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Wed, 14 Oct 2020 15:28:08 +0200 Subject: [PATCH 009/399] Move shared functionalities to ion.js This additionally adds support for addon uninstallation when requested by the Core addon. --- background.js | 21 ++------------- ion.js | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++ manifest.json | 5 +++- 3 files changed, 79 insertions(+), 20 deletions(-) create mode 100644 ion.js diff --git a/background.js b/background.js index 9d96834..cdf35ff 100644 --- a/background.js +++ b/background.js @@ -2,18 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -const ION_SIGNUP_URL = "https://mozilla-ion.github.io/ion-core-addon/"; -const CORE_ADDON_ID = "ion-core-addon@mozilla.org"; - -async function checkIonCore() { - try { - const addon = await browser.management.get(CORE_ADDON_ID); - } catch (ex) { - console.debug("Core add-on not found, opening sign-up URL", ex); - await browser.tabs.create({ url: ION_SIGNUP_URL }); - } -} - async function sendPing() { const currentDate = new Date(); @@ -30,13 +18,8 @@ async function sendPing() { throw new Error("not implemented"); } -checkIonCore() - .then((result) => { - console.debug("Done checking for core add-on"); - }) - .catch((ex) => { - console.error("Checking for core add-on failed, will re-try on startup"); - }); +let ion = new Ion(); +ion.initialize(); sendPing() .then((result) => diff --git a/ion.js b/ion.js new file mode 100644 index 0000000..4d4be03 --- /dev/null +++ b/ion.js @@ -0,0 +1,73 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +const CORE_ADDON_ID = "ion-core-addon@mozilla.org"; +const ION_SIGNUP_URL = "https://mozilla-ion.github.io/ion-core-addon/"; + +class Ion { + /** + * Initialize the Ion library. + */ + async initialize() { + console.debug("Ion.initialize"); + + await this._checkIonCore().then( + () => console.debug("Ion.initialize - Found Ion Core") + ).catch( + async () => await browser.tabs.create({ url: ION_SIGNUP_URL }) + ); + + // Listen for incoming messages from the Core addon. + browser.runtime.onMessageExternal.addListener( + (m, s) => this._handleExternalMessage(m, s)); + } + + /** + * Check if the Core addon is installed. + * + * @returns {Promise} resolved if the core addon was found and + * communication was successful, rejected otherwise. + */ + async _checkIonCore() { + try { + return await browser.management.get(CORE_ADDON_ID); + } catch (ex) { + console.error("Ion._checkIonCore - core addon not found", ex); + return Promise.reject(ex); + } + + // TODO: in addition to checking if the addon is installed, + // this should check if user has joined the platform by sending + // a message to the addon and waiting for its response. + } + + /** + * Handles messages coming in from external addons. + * + * @param {Object} message + * The payload of the message. + * @param {runtime.MessageSender} sender + * An object containing informations about who sent + * the message. + * @returns {Promise} The response to the received message. + * It can be resolved with a value that is sent to the + * `sender`. + */ + _handleExternalMessage(message, sender) { + // We only expect messages coming from the core addon. + if (sender.id != CORE_ADDON_ID) { + return Promise.reject( + new Error(`Ion._handleExternalMessage - unexpected sender ${sender.id}`)); + } + + switch (message.type) { + case "uninstall": { + return browser.management.uninstallSelf({showConfirmDialog: false}); + } break; + default: + return Promise.reject( + new Error(`Ion._handleExternalMessage - unexpected message type ${message.type}`)); + } + } +}; diff --git a/manifest.json b/manifest.json index ee6a363..da75f87 100644 --- a/manifest.json +++ b/manifest.json @@ -16,6 +16,9 @@ "permissions": ["management"], "background": { - "scripts": ["background.js"] + "scripts": [ + "ion.js", + "background.js" + ] } } From 895f34d13f2b1193bd0587357d2acecb2a2d088e Mon Sep 17 00:00:00 2001 From: hamilton Date: Thu, 15 Oct 2020 19:56:20 -0700 Subject: [PATCH 010/399] adds CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..381cdf8 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,8 @@ +# Community Participation Guidelines + +This repository is governed by Mozilla's code of conduct and etiquette guidelines. +For more details, please read the +[Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/). + +## How to Report +For more information on how to report violations of the Community Participation Guidelines, please read our [How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/) page. \ No newline at end of file From b4da59e4cbbb10c28d0f8e46d11c5be1fd90d75b Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 16 Oct 2020 13:27:30 +0200 Subject: [PATCH 011/399] Add support for sending encrypted pings This adds the ion function to send encrypted pings through the core addon, using the study provided encryption keys. --- background.js | 37 ++++++------------ ion.js | 101 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 112 insertions(+), 26 deletions(-) diff --git a/background.js b/background.js index cdf35ff..bd24f2a 100644 --- a/background.js +++ b/background.js @@ -2,29 +2,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -async function sendPing() { - const currentDate = new Date(); - - const payload = { - datetime: currentDate, - }; - - const options = { - schemaName: "debug", - schemaVersion: 1, - }; - - // FIXME pass messages to core add-on - throw new Error("not implemented"); -} - let ion = new Ion(); -ion.initialize(); - -sendPing() - .then((result) => - console.info( - "Telemetry submitted, check about:telemetry archived ping data." - ) - ) - .catch((error) => console.error("Could not send ping:", error)); +ion.initialize( + // A sample key id used for encrypting data. + "sample-invalid-key-id", + // A sample *valid* JWK object for the encryption. + { + "kty":"EC", + "crv":"P-256", + "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", + "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", + "kid":"Public key used in JWS spec Appendix A.3 example" + } +); diff --git a/ion.js b/ion.js index 4d4be03..67b6ecf 100644 --- a/ion.js +++ b/ion.js @@ -8,10 +8,30 @@ const ION_SIGNUP_URL = "https://mozilla-ion.github.io/ion-core-addon/"; class Ion { /** * Initialize the Ion library. + * + * @param {String} keyId + * The id of the key used to encrypt outgoing data. + * @param {Object} key + * The JSON Web Key (JWK) used to encrypt the outgoing data. + * See the RFC 7517 https://tools.ietf.org/html/rfc7517 + * for additional information. For example: + * + * { + * "kty":"EC", + * "crv":"P-256", + * "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", + * "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", + * "kid":"Public key used in JWS spec Appendix A.3 example" + * } */ - async initialize() { + async initialize(keyId, key) { console.debug("Ion.initialize"); + this._validateEncryptionKey(keyId, key); + + this._keyId = keyId; + this._key = key; + await this._checkIonCore().then( () => console.debug("Ion.initialize - Found Ion Core") ).catch( @@ -21,6 +41,10 @@ class Ion { // Listen for incoming messages from the Core addon. browser.runtime.onMessageExternal.addListener( (m, s) => this._handleExternalMessage(m, s)); + + // We went through the whole init process, it's now safe + // to use the Ion public APIs. + this._initialized = true; } /** @@ -70,4 +94,79 @@ class Ion { new Error(`Ion._handleExternalMessage - unexpected message type ${message.type}`)); } } + + /** + * Validate the provided encryption keys. + * + * @param {String} keyId + * The id of the key used to encrypt outgoing data. + * @param {Object} key + * The JSON Web Key (JWK) used to encrypt the outgoing data. + * See the RFC 7517 https://tools.ietf.org/html/rfc7517 + * for additional information. For example: + * + * { + * "kty":"EC", + * "crv":"P-256", + * "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", + * "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", + * "kid":"Public key used in JWS spec Appendix A.3 example" + * } + * + * @throws {Error} if either the key id or the JWK key object are + * invalid. + */ + _validateEncryptionKey(keyId, key) { + if (typeof keyId !== "string") { + throw new Error(`Ion._validateEncryptionKey - Invalid encryption key id ${keyId}`); + } + + if (typeof key !== "object") { + throw new Error(`Ion._validateEncryptionKey - Invalid encryption key ${key}`); + } + } + + /** + * Submit an encrypted ping through the Ion Core addon. + * + * @param {String} payloadType + * The type of the encrypted payload. This will define the + * `schemaName` of the ping. + * @param {Object} payload + * A JSON-serializable payload to be sent with the ping. + */ + async sendPing(payloadType, payload) { + if (!this._initialized) { + console.error("Ion.sendPing - Not initialzed, call `initialize()`"); + return; + } + + // Wrap everything in a try block, as we don't really want + // data collection to be the culprit of a bug hindering user + // experience. + try { + // The unique identifier of the study can be used as the + // namespace, in order to make sure data is routed to the + // proper analysis sandbox. + let studyName = browser.runtime.id; + + // This function may be mistakenly called while init has not + // finished. Let's be safe and check for key validity again. + this._validateEncryptionKey(this._keyId, this._key); + + const msg = { + type: "telemetry-ping", + data: { + payloadType: payloadType, + payload: payload, + namespace: studyName, + keyId: this._keyId, + key: this._key + } + } + await browser.runtime.sendMessage(CORE_ADDON_ID, msg, {}); + } catch (ex) { + console.error(`Ion.sendPing - error while sending ${payloadType}`, ex); + } + } }; From 8c1a20e57073be2f6467181e23abd0210d6e9821 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 13:08:08 +0100 Subject: [PATCH 012/399] Tweak the name and description of the manifest --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index da75f87..1d1daf2 100644 --- a/manifest.json +++ b/manifest.json @@ -1,8 +1,8 @@ { - "description": "A basic Mozilla Ion Study.", + "description": "A basic template for a Mozilla Ion Study.", "author": "Mozilla", "manifest_version": 2, - "name": "Ion Basic Study", + "name": "Ion Basic Study Template", "version": "2.0", "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", From f827a4a6f4ff11c550ca8dff135f9bed25d10f5d Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 13:10:31 +0100 Subject: [PATCH 013/399] Provide a basic NPM configuration This includes web-ext (for building the addon) and webextension-polyfill (to future-proof for other browsers). --- package-lock.json | 5332 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 31 + 2 files changed, 5363 insertions(+) create mode 100644 package-lock.json create mode 100644 package.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ecd0d7c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5332 @@ +{ + "name": "Mozilla Ion - Basic study template", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/polyfill": { + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.11.5.tgz", + "integrity": "sha512-FunXnE0Sgpd61pKSj2OSOs1D44rKTD3pGOfGilZ6LGrrIH0QEtJlTjqOqdF8Bs98JmjfGhni2BBkTfv9KcKJ9g==", + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@cliqz-oss/firefox-client": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz", + "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==", + "requires": { + "colors": "0.5.x", + "js-select": "~0.6.0" + } + }, + "@cliqz-oss/node-firefox-connect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz", + "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==", + "requires": { + "@cliqz-oss/firefox-client": "0.3.1", + "es6-promise": "^2.0.1" + } + }, + "@devicefarmer/adbkit": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz", + "integrity": "sha512-rsgWREAvSRQjdP9/3GoAV6Tq+o97haywgbTfCgt5yUqiDpaaq3hlH9FTo9XsdG8x+Jd0VQ9nTC2IXsDu8JGRSA==", + "requires": { + "@devicefarmer/adbkit-logcat": "^1.1.0", + "@devicefarmer/adbkit-monkey": "~1.0.1", + "bluebird": "~2.9.24", + "commander": "^2.3.0", + "debug": "~2.6.3", + "node-forge": "^0.10.0", + "split": "~0.3.3" + } + }, + "@devicefarmer/adbkit-logcat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz", + "integrity": "sha512-K90P5gUXM/w+yzLvJIRQ+tJooNU6ipUPPQkljtPJ0laR66TGtpt4Gqsjm0n9dPHK1W5KGgU1R5wnCd6RTSlPNA==" + }, + "@devicefarmer/adbkit-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz", + "integrity": "sha512-HilPrVrCosYWqSyjfpDtaaN1kJwdlBpS+IAflP3z+e7nsEgk3JGJf1Vg0NgHJooTf5HDfXSyZqMVg+5jvXCK0g==", + "requires": { + "async": "~0.2.9" + } + }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/node": { + "version": "14.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==" + }, + "JSONSelect": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", + "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=" + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + }, + "addons-linter": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.9.0.tgz", + "integrity": "sha512-OrkDQ9S/GAJzMe+izsFMFOtRq9geFFt3O5c7Fi6pehGi7RY2PSMpPmKjMK1j/rPa9jrG0e9zocptMrOi11uvug==", + "requires": { + "@babel/runtime": "7.11.2", + "ajv": "6.12.6", + "ajv-merge-patch": "4.1.0", + "chalk": "4.1.0", + "cheerio": "1.0.0-rc.3", + "columnify": "1.5.4", + "common-tags": "1.8.0", + "deepmerge": "4.2.2", + "dispensary": "0.57.0", + "es6-promisify": "6.1.1", + "eslint": "7.11.0", + "eslint-plugin-no-unsanitized": "3.1.4", + "eslint-visitor-keys": "2.0.0", + "espree": "7.3.0", + "esprima": "4.0.1", + "first-chunk-stream": "4.0.0", + "fluent-syntax": "0.13.0", + "fsevents": "2.1.3", + "glob": "7.1.6", + "is-mergeable-object": "1.1.1", + "jed": "1.1.1", + "mdn-browser-compat-data": "1.0.40", + "os-locale": "5.0.0", + "pino": "6.7.0", + "postcss": "8.1.1", + "probe-image-size": "5.0.0", + "relaxed-json": "1.0.3", + "semver": "7.3.2", + "source-map-support": "0.5.19", + "strip-bom-stream": "4.0.0", + "tosource": "1.0.0", + "upath": "2.0.0", + "whatwg-url": "8.4.0", + "yargs": "15.4.1", + "yauzl": "2.10.0" + } + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-merge-patch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ajv-merge-patch/-/ajv-merge-patch-4.1.0.tgz", + "integrity": "sha512-0mAYXMSauA8RZ7r+B4+EAOYcZEcO9OK5EiQCR7W7Cv4E44pJj56ZnkKLJ9/PAcOc0dT+LlV9fdDcq2TxVJfOYw==", + "requires": { + "fast-json-patch": "^2.0.6", + "json-merge-patch": "^0.2.3" + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "archiver": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", + "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.1.4", + "zip-stream": "^4.0.0" + }, + "dependencies": { + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "2.9.34", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bunyan": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", + "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", + "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-launcher": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", + "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", + "requires": { + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compress-commons": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", + "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", + "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepcopy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", + "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", + "requires": { + "type-detect": "^4.0.8" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dispensary": { + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.57.0.tgz", + "integrity": "sha512-vgRaZa9Ok8QdrAVtx+s6heBgI1RGT+Y6VA336oPWYADZZz83K+5NOTpLamEKRyJdRY5pYLaWhV2Js7bau1JyKg==", + "requires": { + "async": "~3.2.0", + "natural-compare-lite": "~1.4.0", + "pino": "~6.6.0", + "request": "~2.88.0", + "sha.js": "~2.4.4", + "source-map-support": "~0.5.4", + "yargs": "~15.4.0" + }, + "dependencies": { + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "pino": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.6.1.tgz", + "integrity": "sha512-DOgm7rn6ctBkBYemHXSLj7+j3o3U1q1FWBXbHcprur8mA93QcJSycEkEqhqKiFB9Mx/3Qld2FGr6+9yfQza0kA==", + "requires": { + "fast-redact": "^2.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.2" + } + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "requires": { + "nan": "^2.14.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, + "es6-promise": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=" + }, + "es6-promisify": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "eslint-plugin-no-unsanitized": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", + "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==" + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "event-to-promise": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", + "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=" + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-patch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", + "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==", + "requires": { + "fast-deep-equal": "^2.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fast-redact": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.1.0.tgz", + "integrity": "sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "firefox-profile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.0.0.tgz", + "integrity": "sha512-Vw31AsjfLDbcApMDwwnhZcz3tWjV6lxB9BNf84FaV44rZXtU87cVbFMBzPEtrJdUDbwPYiuYzprp6yksYGwjSw==", + "requires": { + "adm-zip": "~0.4.x", + "archiver": "~5.0.2", + "async": "~2.5.0", + "fs-extra": "~4.0.2", + "ini": "~1.3.3", + "jetpack-id": "1.0.0", + "lazystream": "~1.0.0", + "lodash": "~4.17.2", + "minimist": "^1.1.1", + "uuid": "^3.0.0", + "xml2js": "~0.4.4" + }, + "dependencies": { + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "requires": { + "lodash": "^4.14.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "first-chunk-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-4.0.0.tgz", + "integrity": "sha512-8TOz/mJp7+zc2HN63vnJHotwceq4gQI1+/gdJVnJcG4dEB96oUxw7wV9We4QKjSFWUc/V0ADDfaGba5cDoG6EA==" + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "fluent-syntax": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz", + "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "dependencies": { + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "fx-runner": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", + "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "requires": { + "commander": "2.9.0", + "shell-quote": "1.6.1", + "spawn-sync": "1.0.15", + "when": "3.7.7", + "which": "1.2.4", + "winreg": "0.0.12" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "isexe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=" + }, + "which": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", + "integrity": "sha1-FVf5YIBgTlsRs1meufRbUKnv1yI=", + "requires": { + "is-absolute": "^0.1.7", + "isexe": "^1.1.1" + } + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "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-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "requires": { + "ini": "^1.3.5" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" + }, + "is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "requires": { + "is-relative": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-mergeable-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", + "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==" + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jed": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", + "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=" + }, + "jetpack-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", + "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=" + }, + "js-select": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", + "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", + "requires": { + "JSONSelect": "0.2.1", + "traverse": "0.4.x" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-merge-patch": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-0.2.3.tgz", + "integrity": "sha1-+ixrWvh9p3uuKWalidUuI+2B/kA=", + "requires": { + "deep-equal": "^1.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", + "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "requires": { + "pako": "~1.0.2" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "requires": { + "invert-kv": "^3.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lighthouse-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", + "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", + "requires": { + "debug": "^2.6.8", + "marky": "^1.2.0" + } + }, + "line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", + "requires": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "marky": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", + "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==" + }, + "mdn-browser-compat-data": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-1.0.40.tgz", + "integrity": "sha512-yjM/OG0krZIgi+XrhJWS3CJ9UQuGM4FfjIUIt2f65er6qczkM+WjtNEv/9ZF9DxDs/2GR3SO6hDaZLplTRrrfw==", + "requires": { + "extend": "3.0.2" + } + }, + "mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "requires": { + "glob": "^6.0.1" + } + } + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "nanoid": { + "version": "3.1.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", + "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=" + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node-notifier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", + "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-is": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "requires": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + } + }, + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "requires": { + "@types/node": "*" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pino": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz", + "integrity": "sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw==", + "requires": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.2" + }, + "dependencies": { + "fast-redact": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", + "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==" + } + } + }, + "pino-std-serializers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.1.tgz", + "integrity": "sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg==", + "requires": { + "colorette": "^1.2.1", + "line-column": "^1.0.2", + "nanoid": "^3.1.12", + "source-map": "^0.6.1" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "probe-image-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz", + "integrity": "sha512-V6uBYw5eBc5UVIE7MUZD6Nxg0RYuGDWLDenEn0B1WC6PcTvn1xdQ6HLDDuznefsiExC6rNrCz7mFRBo0f3Xekg==", + "requires": { + "deepmerge": "^4.0.0", + "inherits": "^2.0.3", + "next-tick": "^1.0.0", + "request": "^2.83.0", + "stream-parser": "~0.3.1" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "quick-format-unescaped": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + }, + "registry-auth-token": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "relaxed-json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", + "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", + "requires": { + "chalk": "^2.4.2", + "commander": "^2.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "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": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "sign-addon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.1.0.tgz", + "integrity": "sha512-zZ7nKc5/3QWM3skYBosGDvYQf2jkKhW2u8BELrZoN1wgCSOnwsV9T47Vx9uaNbA3CyZ+V9XSA0tDVHoV1QfVPw==", + "requires": { + "common-tags": "1.8.0", + "core-js": "3.6.5", + "deepcopy": "2.1.0", + "es6-error": "4.1.1", + "es6-promisify": "6.1.1", + "jsonwebtoken": "8.5.1", + "mz": "2.7.0", + "request": "2.88.2", + "source-map-support": "0.5.19", + "stream-to-promise": "3.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + } + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sonic-boom": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.0.tgz", + "integrity": "sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw==", + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "requires": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "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" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "requires": { + "debug": "2" + } + }, + "stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", + "requires": { + "any-promise": "^1.1.0" + } + }, + "stream-to-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", + "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", + "requires": { + "any-promise": "~1.3.0", + "end-of-stream": "~1.4.1", + "stream-to-array": "~2.3.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "strip-bom-buf": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", + "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", + "requires": { + "is-utf8": "^0.2.1" + } + }, + "strip-bom-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", + "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", + "requires": { + "first-chunk-stream": "^3.0.0", + "strip-bom-buf": "^2.0.0" + }, + "dependencies": { + "first-chunk-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", + "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==" + } + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar-stream": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "tosource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", + "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "requires": { + "punycode": "^2.1.1" + } + }, + "traverse": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", + "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "upath": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.0.tgz", + "integrity": "sha512-ghi1XxsVYPOZPDsOZrfOJIwQU5I3JVYB3Q6IbBGn1KFeOa89i0nUy5tCEkY9pVm83U83qZ1QG40RQKGknllV4w==" + }, + "update-notifier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", + "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "requires": { + "boxen": "^4.2.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver": "^7.3.2", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + } + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "web-ext": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.3.0.tgz", + "integrity": "sha512-LlOmVSddfBVHd9Liv3SL1Cvftr+YS6GNiKVIugDotUm3jVT9otHsw1SrCi11MGaGBw4g0s8ndjcbuttr1ZQjwg==", + "dev": true, + "requires": { + "@babel/polyfill": "7.11.5", + "@babel/runtime": "7.11.2", + "@cliqz-oss/firefox-client": "0.3.1", + "@cliqz-oss/node-firefox-connect": "1.2.1", + "@devicefarmer/adbkit": "2.11.3", + "addons-linter": "2.9.0", + "bunyan": "1.8.14", + "camelcase": "6.0.0", + "chrome-launcher": "0.13.4", + "debounce": "1.2.0", + "decamelize": "4.0.0", + "es6-error": "4.1.1", + "event-to-promise": "0.8.0", + "firefox-profile": "4.0.0", + "fs-extra": "9.0.1", + "fx-runner": "1.0.13", + "import-fresh": "3.2.1", + "mkdirp": "1.0.4", + "multimatch": "4.0.0", + "mz": "2.7.0", + "node-notifier": "8.0.0", + "open": "7.3.0", + "parse-json": "5.0.1", + "sign-addon": "3.1.0", + "source-map-support": "0.5.19", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1", + "update-notifier": "5.0.0", + "watchpack": "1.7.4", + "ws": "7.3.1", + "yargs": "15.4.1", + "zip-dir": "1.0.2" + } + }, + "webextension-polyfill": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.6.0.tgz", + "integrity": "sha512-PlYwiX8e4bNZrEeBFxbFFsLtm0SMPxJliLTGdNCA0Bq2XkWrAn2ejUd+89vZm+8BnfFB1BclJyCz3iKsm2atNg==", + "dev": true + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, + "when": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", + "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "winreg": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", + "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==" + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "zip-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", + "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=", + "requires": { + "async": "^1.5.2", + "jszip": "^2.4.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + } + } + }, + "zip-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", + "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.0.0", + "readable-stream": "^3.6.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..efc1133 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "ion-study-template", + "version": "0.0.1", + "scripts": { + "build": "rollup -c", + "dev": "rollup -c -w", + "lint": "npm-run-all lint-*", + "test": "npm run test-addon" + }, + "devDependencies": { + "web-ext": "^5.3.0", + "webextension-polyfill": "^0.6.0" + }, + "dependencies": {}, + "engines": { + "node": ">=14.0.0" + }, + "description": "This is the Ion Core Add-on: a cross-browser WebExtension that allows users to participate to Ion studies.", + "repository": { + "type": "git", + "url": "git+https://github.com/mozilla-ion/ion-basic-study.git" + }, + "keywords": [], + "author": "Mozilla", + "license": "MPL-2.0", + "private": true, + "bugs": { + "url": "https://github.com/mozilla-ion/ion-basic-study/issues" + }, + "homepage": "https://github.com/mozilla-ion/ion-basic-study#readme" +} From 34d9fca84aa8d0034ac83abd6f9cb9cd2956a0fa Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 15:11:09 +0100 Subject: [PATCH 014/399] Enable code linting --- .eslintrc.js | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ion.js | 5 ++--- package.json | 4 +++- 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..199b15d --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,59 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +module.exports = { + env: { + browser: true, + es6: true, + node: true, + webextensions: true, + }, + extends: [ + "eslint:recommended", + //"plugin:import/warnings", + "plugin:node/recommended", + ], + globals: { + ChromeUtils: false, + ExtensionAPI: false, + // NOTE: These get injected via Rollup. + __API_ENDPOINT__: false, + __ION_STUDIES_LIST__: false, + __ION_WEBSITE_URL__: false, + __STORE_IMPLEMENTATION__: false, + }, + /*overrides: [ + { + files: "tests/**", + env: { + mocha: true, + }, + extends: [ + "plugin:mocha/recommended", + ], + }, + ],*/ + parserOptions: { + ecmaVersion: 2021, + sourceType: "module", + }, + plugins: [ + //"import", + //"mocha", + "node", + ], + root: true, + rules: { + "node/no-deprecated-api": "error", + "node/no-extraneous-require": "off", + "node/no-missing-import": "off", + "node/no-unpublished-import": "off", + "node/no-unpublished-require": "off", + "node/no-unsupported-features/es-syntax": "off", + + "no-unused-vars": [ "error", { vars: "all", args: "none", ignoreRestSiblings: false } ], + "no-var": "off", // TODO: "warn", + "prefer-const": "off", // TODO: "warn", + }, +}; diff --git a/ion.js b/ion.js index 67b6ecf..6998596 100644 --- a/ion.js +++ b/ion.js @@ -86,9 +86,8 @@ class Ion { } switch (message.type) { - case "uninstall": { + case "uninstall": return browser.management.uninstallSelf({showConfirmDialog: false}); - } break; default: return Promise.reject( new Error(`Ion._handleExternalMessage - unexpected message type ${message.type}`)); @@ -169,4 +168,4 @@ class Ion { console.error(`Ion.sendPing - error while sending ${payloadType}`, ex); } } -}; +} diff --git a/package.json b/package.json index efc1133..d0178ad 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,12 @@ "scripts": { "build": "rollup -c", "dev": "rollup -c -w", - "lint": "npm-run-all lint-*", + "lint": "eslint . && web-ext lint", "test": "npm run test-addon" }, "devDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-node": "^11.1.0", "web-ext": "^5.3.0", "webextension-polyfill": "^0.6.0" }, From ed5e0400fb1e4b1bf58c6fdd022e8d544be33e10 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 15:33:35 +0100 Subject: [PATCH 015/399] Move background.js to src/ --- manifest.json | 2 +- background.js => src/background.js | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename background.js => src/background.js (100%) diff --git a/manifest.json b/manifest.json index 1d1daf2..704aecb 100644 --- a/manifest.json +++ b/manifest.json @@ -18,7 +18,7 @@ "background": { "scripts": [ "ion.js", - "background.js" + "src/background.js" ] } } diff --git a/background.js b/src/background.js similarity index 100% rename from background.js rename to src/background.js From 121bd84a859f775419044b8383ea2d887d3a12b0 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 15:42:55 +0100 Subject: [PATCH 016/399] Add RollupJS as a web packer --- package-lock.json | 1805 ++++++++++++++++++++++++++++++++++++--------- package.json | 5 +- rollup.config.js | 34 + 3 files changed, 1502 insertions(+), 342 deletions(-) create mode 100644 rollup.config.js diff --git a/package-lock.json b/package-lock.json index ecd0d7c..e8f64a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "Mozilla Ion - Basic study template", + "name": "ion-study-template", "version": "0.0.1", "lockfileVersion": 1, "requires": true, @@ -8,6 +8,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, "requires": { "@babel/highlight": "^7.10.4" } @@ -15,12 +16,14 @@ "@babel/helper-validator-identifier": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true }, "@babel/highlight": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", @@ -31,6 +34,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -39,6 +43,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -49,6 +54,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -56,17 +62,20 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -77,6 +86,7 @@ "version": "7.11.5", "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.11.5.tgz", "integrity": "sha512-FunXnE0Sgpd61pKSj2OSOs1D44rKTD3pGOfGilZ6LGrrIH0QEtJlTjqOqdF8Bs98JmjfGhni2BBkTfv9KcKJ9g==", + "dev": true, "requires": { "core-js": "^2.6.5", "regenerator-runtime": "^0.13.4" @@ -86,6 +96,7 @@ "version": "7.11.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } @@ -94,6 +105,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz", "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==", + "dev": true, "requires": { "colors": "0.5.x", "js-select": "~0.6.0" @@ -103,6 +115,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz", "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==", + "dev": true, "requires": { "@cliqz-oss/firefox-client": "0.3.1", "es6-promise": "^2.0.1" @@ -112,6 +125,7 @@ "version": "2.11.3", "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz", "integrity": "sha512-rsgWREAvSRQjdP9/3GoAV6Tq+o97haywgbTfCgt5yUqiDpaaq3hlH9FTo9XsdG8x+Jd0VQ9nTC2IXsDu8JGRSA==", + "dev": true, "requires": { "@devicefarmer/adbkit-logcat": "^1.1.0", "@devicefarmer/adbkit-monkey": "~1.0.1", @@ -125,20 +139,23 @@ "@devicefarmer/adbkit-logcat": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz", - "integrity": "sha512-K90P5gUXM/w+yzLvJIRQ+tJooNU6ipUPPQkljtPJ0laR66TGtpt4Gqsjm0n9dPHK1W5KGgU1R5wnCd6RTSlPNA==" + "integrity": "sha512-K90P5gUXM/w+yzLvJIRQ+tJooNU6ipUPPQkljtPJ0laR66TGtpt4Gqsjm0n9dPHK1W5KGgU1R5wnCd6RTSlPNA==", + "dev": true }, "@devicefarmer/adbkit-monkey": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz", "integrity": "sha512-HilPrVrCosYWqSyjfpDtaaN1kJwdlBpS+IAflP3z+e7nsEgk3JGJf1Vg0NgHJooTf5HDfXSyZqMVg+5jvXCK0g==", + "dev": true, "requires": { "async": "~0.2.9" } }, "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", + "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -156,6 +173,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, "requires": { "ms": "2.1.2" } @@ -163,52 +181,124 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@rollup/plugin-commonjs": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", + "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", + "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true } } }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, "requires": { "defer-to-connect": "^1.0.1" } }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true }, "@types/node": { "version": "14.14.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", - "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==" + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } }, "JSONSelect": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", - "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=" + "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", + "dev": true }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true }, "addons-linter": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.9.0.tgz", "integrity": "sha512-OrkDQ9S/GAJzMe+izsFMFOtRq9geFFt3O5c7Fi6pehGi7RY2PSMpPmKjMK1j/rPa9jrG0e9zocptMrOi11uvug==", + "dev": true, "requires": { "@babel/runtime": "7.11.2", "ajv": "6.12.6", @@ -245,17 +335,114 @@ "whatwg-url": "8.4.0", "yargs": "15.4.1", "yauzl": "2.10.0" + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -267,6 +454,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/ajv-merge-patch/-/ajv-merge-patch-4.1.0.tgz", "integrity": "sha512-0mAYXMSauA8RZ7r+B4+EAOYcZEcO9OK5EiQCR7W7Cv4E44pJj56ZnkKLJ9/PAcOc0dT+LlV9fdDcq2TxVJfOYw==", + "dev": true, "requires": { "fast-json-patch": "^2.0.6", "json-merge-patch": "^0.2.3" @@ -276,6 +464,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, "requires": { "string-width": "^3.0.0" }, @@ -283,22 +472,26 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -309,6 +502,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -318,17 +512,20 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -336,12 +533,15 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -351,6 +551,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "dev": true, "requires": { "archiver-utils": "^2.1.0", "async": "^3.2.0", @@ -364,7 +565,8 @@ "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true } } }, @@ -372,6 +574,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, "requires": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -389,6 +592,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -402,12 +606,14 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -418,6 +624,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -425,57 +632,72 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "optional": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "optional": true }, "array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true }, "array-reduce": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -483,67 +705,84 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "optional": true }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "optional": true }, "atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "optional": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -558,6 +797,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^1.0.0" } @@ -566,6 +807,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -574,6 +817,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -582,6 +827,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -591,19 +838,23 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -611,12 +862,15 @@ "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true }, "bl": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -626,17 +880,20 @@ "bluebird": { "version": "2.9.34", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", - "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=" + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", + "dev": true }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true }, "boxen": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, "requires": { "ansi-align": "^3.0.0", "camelcase": "^5.3.1", @@ -651,12 +908,14 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -668,6 +927,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -677,6 +937,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, "requires": { "fill-range": "^7.0.1" } @@ -685,6 +947,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -693,22 +956,32 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true }, "bunyan": { "version": "1.8.14", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", + "dev": true, "requires": { "dtrace-provider": "~0.8", "moment": "^2.19.3", @@ -720,6 +993,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "optional": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -735,7 +1010,9 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, @@ -743,6 +1020,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -756,7 +1034,8 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true } } }, @@ -764,6 +1043,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.0" @@ -772,22 +1052,26 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "camelcase": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==" + "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -797,6 +1081,7 @@ "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, "requires": { "css-select": "~1.2.0", "dom-serializer": "~0.1.1", @@ -810,6 +1095,8 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "optional": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -825,6 +1112,7 @@ "version": "0.13.4", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", + "dev": true, "requires": { "@types/node": "*", "escape-string-regexp": "^1.0.5", @@ -838,6 +1126,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -846,6 +1135,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -855,12 +1145,15 @@ "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "optional": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -872,6 +1165,8 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -879,19 +1174,23 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -901,12 +1200,14 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -916,12 +1217,14 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -930,6 +1233,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "optional": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -939,6 +1244,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -946,22 +1252,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "colorette": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true }, "colors": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true }, "columnify": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, "requires": { "strip-ansi": "^3.0.0", "wcwidth": "^1.0.0" @@ -971,6 +1281,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -978,22 +1289,33 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "common-tags": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true, + "optional": true }, "compress-commons": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "dev": true, "requires": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.0", @@ -1004,12 +1326,14 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -1021,6 +1345,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1034,12 +1359,14 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -1050,6 +1377,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, "requires": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -1062,22 +1390,27 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true }, "core-js": { "version": "2.6.11", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "crc": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, "requires": { "buffer": "^5.1.0" } @@ -1086,6 +1419,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", + "dev": true, "requires": { "crc": "^3.4.4", "readable-stream": "^3.4.0" @@ -1095,6 +1429,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1104,12 +1439,14 @@ "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, "requires": { "boolbase": "~1.0.0", "css-what": "2.1", @@ -1120,12 +1457,14 @@ "css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -1133,12 +1472,14 @@ "debounce": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==", + "dev": true }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -1146,17 +1487,21 @@ "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "optional": true }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -1165,6 +1510,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, "requires": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -1177,17 +1523,20 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "deepcopy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", + "dev": true, "requires": { "type-detect": "^4.0.8" } @@ -1195,12 +1544,14 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, "requires": { "clone": "^1.0.2" } @@ -1208,12 +1559,14 @@ "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -1222,6 +1575,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -1231,6 +1586,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -1239,6 +1596,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -1247,6 +1606,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1256,19 +1617,23 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "dispensary": { "version": "0.57.0", "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.57.0.tgz", "integrity": "sha512-vgRaZa9Ok8QdrAVtx+s6heBgI1RGT+Y6VA336oPWYADZZz83K+5NOTpLamEKRyJdRY5pYLaWhV2Js7bau1JyKg==", + "dev": true, "requires": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", @@ -1282,12 +1647,14 @@ "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true }, "pino": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/pino/-/pino-6.6.1.tgz", "integrity": "sha512-DOgm7rn6ctBkBYemHXSLj7+j3o3U1q1FWBXbHcprur8mA93QcJSycEkEqhqKiFB9Mx/3Qld2FGr6+9yfQza0kA==", + "dev": true, "requires": { "fast-redact": "^2.0.0", "fast-safe-stringify": "^2.0.7", @@ -1303,6 +1670,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "requires": { "esutils": "^2.0.2" } @@ -1311,6 +1679,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, "requires": { "domelementtype": "^1.3.0", "entities": "^1.1.1" @@ -1319,12 +1688,14 @@ "domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true }, "domhandler": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, "requires": { "domelementtype": "1" } @@ -1333,6 +1704,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, "requires": { "dom-serializer": "0", "domelementtype": "1" @@ -1342,6 +1714,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, "requires": { "is-obj": "^2.0.0" } @@ -1350,6 +1723,8 @@ "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, + "optional": true, "requires": { "nan": "^2.14.0" } @@ -1357,12 +1732,14 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -1372,6 +1749,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -1379,12 +1757,14 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -1393,6 +1773,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "requires": { "ansi-colors": "^4.1.1" } @@ -1400,12 +1781,14 @@ "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -1414,6 +1797,7 @@ "version": "1.18.0-next.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -1433,6 +1817,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -1442,35 +1827,41 @@ "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, "es6-promise": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=" + "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", + "dev": true }, "es6-promisify": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", - "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", + "dev": true }, "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "eslint": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", - "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz", + "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1511,12 +1902,14 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, "requires": { "ms": "2.1.2" } @@ -1524,27 +1917,69 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } } } }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, "eslint-plugin-no-unsanitized": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", - "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==" + "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==", + "dev": true + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -1554,6 +1989,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" }, @@ -1561,19 +1997,22 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true } } }, "eslint-visitor-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true }, "espree": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, "requires": { "acorn": "^7.4.0", "acorn-jsx": "^5.2.0", @@ -1583,19 +2022,22 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true } } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esquery": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, "requires": { "estraverse": "^5.1.0" }, @@ -1603,7 +2045,8 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true } } }, @@ -1611,6 +2054,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -1618,29 +2062,40 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz", + "integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==", + "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true }, "event-to-promise": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", - "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=" + "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=", + "dev": true }, "execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -1657,6 +2112,8 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -1671,6 +2128,8 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1679,6 +2138,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -1688,12 +2149,15 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -1703,6 +2167,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -1713,6 +2179,8 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -1728,6 +2196,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1736,6 +2206,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -1744,6 +2216,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -1752,6 +2226,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -1760,6 +2236,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1771,17 +2249,20 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-json-patch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==", + "dev": true, "requires": { "fast-deep-equal": "^2.0.1" }, @@ -1789,34 +2270,40 @@ "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true } } }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fast-redact": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.1.0.tgz", - "integrity": "sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==" + "integrity": "sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==", + "dev": true }, "fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, "requires": { "pend": "~1.2.0" } @@ -1825,6 +2312,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, "requires": { "flat-cache": "^2.0.1" } @@ -1833,6 +2321,8 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, "requires": { "to-regex-range": "^5.0.1" } @@ -1841,6 +2331,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1850,6 +2341,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.0.0.tgz", "integrity": "sha512-Vw31AsjfLDbcApMDwwnhZcz3tWjV6lxB9BNf84FaV44rZXtU87cVbFMBzPEtrJdUDbwPYiuYzprp6yksYGwjSw==", + "dev": true, "requires": { "adm-zip": "~0.4.x", "archiver": "~5.0.2", @@ -1868,6 +2360,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, "requires": { "lodash": "^4.14.0" } @@ -1876,6 +2369,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -1887,12 +2381,14 @@ "first-chunk-stream": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-4.0.0.tgz", - "integrity": "sha512-8TOz/mJp7+zc2HN63vnJHotwceq4gQI1+/gdJVnJcG4dEB96oUxw7wV9We4QKjSFWUc/V0ADDfaGba5cDoG6EA==" + "integrity": "sha512-8TOz/mJp7+zc2HN63vnJHotwceq4gQI1+/gdJVnJcG4dEB96oUxw7wV9We4QKjSFWUc/V0ADDfaGba5cDoG6EA==", + "dev": true }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, "requires": { "flatted": "^2.0.0", "rimraf": "2.6.3", @@ -1902,32 +2398,39 @@ "flatstr": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", + "dev": true }, "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true }, "fluent-syntax": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz", - "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==" + "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==", + "dev": true }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -1938,6 +2441,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "optional": true, "requires": { "map-cache": "^0.2.2" } @@ -1945,12 +2450,14 @@ "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "fs-extra": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -1962,6 +2469,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -1970,42 +2478,49 @@ "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } } }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true } } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true }, "fx-runner": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "dev": true, "requires": { "commander": "2.9.0", "shell-quote": "1.6.1", @@ -2019,6 +2534,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, "requires": { "graceful-readlink": ">= 1.0.0" } @@ -2026,12 +2542,14 @@ "isexe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=" + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true }, "which": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", "integrity": "sha1-FVf5YIBgTlsRs1meufRbUKnv1yI=", + "dev": true, "requires": { "is-absolute": "^0.1.7", "isexe": "^1.1.1" @@ -2042,12 +2560,14 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-intrinsic": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -2058,6 +2578,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -2065,12 +2586,15 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -2079,6 +2603,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2092,6 +2617,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -2100,6 +2626,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "dev": true, "requires": { "ini": "^1.3.5" } @@ -2108,6 +2635,7 @@ "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, "requires": { "type-fest": "^0.8.1" } @@ -2116,6 +2644,7 @@ "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -2134,6 +2663,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -2143,27 +2673,32 @@ "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true }, "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -2173,6 +2708,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -2180,17 +2716,21 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -2200,7 +2740,9 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, @@ -2208,6 +2750,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "optional": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -2217,6 +2761,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -2225,6 +2771,8 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -2235,6 +2783,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -2244,12 +2794,14 @@ "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, "requires": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", @@ -2262,12 +2814,14 @@ "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -2277,22 +2831,26 @@ "human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2301,17 +2859,20 @@ "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2320,22 +2881,26 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "invert-kv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "dev": true }, "is-absolute": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, "requires": { "is-relative": "^0.1.0" } @@ -2344,6 +2909,8 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -2352,6 +2919,8 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -2361,17 +2930,21 @@ "is-arguments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, "requires": { "binary-extensions": "^2.0.0" } @@ -2379,25 +2952,40 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true }, "is-callable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "requires": { "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -2406,6 +2994,8 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -2415,12 +3005,15 @@ "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -2430,34 +3023,42 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true } } }, "is-docker": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -2466,6 +3067,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, "requires": { "global-dirs": "^2.0.1", "is-path-inside": "^3.0.1" @@ -2474,37 +3076,52 @@ "is-mergeable-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", - "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==" + "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true }, "is-negative-zero": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true }, "is-path-inside": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "optional": true, "requires": { "isobject": "^3.0.1" }, @@ -2512,14 +3129,26 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, "is-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, "requires": { "has-symbols": "^1.0.1" } @@ -2527,17 +3156,20 @@ "is-relative": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=" + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, "requires": { "has-symbols": "^1.0.1" } @@ -2545,22 +3177,27 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "optional": true }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "requires": { "is-docker": "^2.0.0" } @@ -2568,22 +3205,26 @@ "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -2591,22 +3232,26 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "jed": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", - "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=" + "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", + "dev": true }, "jetpack-id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", - "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=" + "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=", + "dev": true }, "js-select": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", + "dev": true, "requires": { "JSONSelect": "0.2.1", "traverse": "0.4.x" @@ -2615,12 +3260,14 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2629,17 +3276,20 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true }, "json-merge-patch": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-0.2.3.tgz", "integrity": "sha1-+ixrWvh9p3uuKWalidUuI+2B/kA=", + "dev": true, "requires": { "deep-equal": "^1.0.0" } @@ -2647,32 +3297,38 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -2680,12 +3336,14 @@ "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -2702,12 +3360,14 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -2715,6 +3375,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -2726,6 +3387,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "dev": true, "requires": { "pako": "~1.0.2" } @@ -2734,6 +3396,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -2744,6 +3407,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -2753,6 +3417,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "requires": { "json-buffer": "3.0.0" } @@ -2760,12 +3425,15 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "optional": true }, "latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, "requires": { "package-json": "^6.3.0" } @@ -2774,6 +3442,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, "requires": { "readable-stream": "^2.0.5" }, @@ -2782,6 +3451,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2795,12 +3465,14 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -2811,6 +3483,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dev": true, "requires": { "invert-kv": "^3.0.0" } @@ -2819,6 +3492,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -2828,6 +3502,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", + "dev": true, "requires": { "debug": "^2.6.8", "marky": "^1.2.0" @@ -2837,6 +3512,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", + "dev": true, "requires": { "isarray": "^1.0.0", "isobject": "^2.0.0" @@ -2845,12 +3521,14 @@ "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -2858,77 +3536,101 @@ "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true }, "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true }, "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true }, "lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true }, "lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { "semver": "^6.0.0" }, @@ -2936,7 +3638,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -2944,6 +3647,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, "requires": { "p-defer": "^1.0.0" } @@ -2951,12 +3655,16 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "optional": true, "requires": { "object-visit": "^1.0.0" } @@ -2964,12 +3672,14 @@ "marky": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", - "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==" + "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", + "dev": true }, "mdn-browser-compat-data": { "version": "1.0.40", "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-1.0.40.tgz", "integrity": "sha512-yjM/OG0krZIgi+XrhJWS3CJ9UQuGM4FfjIUIt2f65er6qczkM+WjtNEv/9ZF9DxDs/2GR3SO6hDaZLplTRrrfw==", + "dev": true, "requires": { "extend": "3.0.2" } @@ -2978,6 +3688,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "dev": true, "requires": { "map-age-cleaner": "^0.1.3", "mimic-fn": "^2.1.0", @@ -2987,12 +3698,15 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -3013,6 +3727,8 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -3030,6 +3746,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -3040,6 +3758,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -3051,6 +3771,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -3061,6 +3783,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -3069,6 +3793,8 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -3078,12 +3804,16 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -3094,12 +3824,14 @@ "mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true }, "mime-types": { "version": "2.1.27", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, "requires": { "mime-db": "1.44.0" } @@ -3107,17 +3839,20 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3125,12 +3860,15 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "optional": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -3140,6 +3878,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -3149,22 +3889,27 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true, + "optional": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "multimatch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, "requires": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", @@ -3177,6 +3922,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "dev": true, + "optional": true, "requires": { "mkdirp": "~0.5.1", "ncp": "~2.0.0", @@ -3187,6 +3934,8 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, "requires": { "inflight": "^1.0.4", "inherits": "2", @@ -3199,6 +3948,8 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "optional": true, "requires": { "minimist": "^1.2.5" } @@ -3207,6 +3958,8 @@ "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "dev": true, + "optional": true, "requires": { "glob": "^6.0.1" } @@ -3217,6 +3970,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, "requires": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -3226,17 +3980,22 @@ "nan": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true }, "nanoid": { "version": "3.1.16", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", - "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==" + "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==", + "dev": true }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -3254,37 +4013,45 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true }, "natural-compare-lite": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=" + "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", + "dev": true }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true, + "optional": true }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true }, "node-notifier": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "dev": true, "requires": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -3297,24 +4064,28 @@ "uuid": { "version": "8.3.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "dev": true } } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-url": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "requires": { "path-key": "^3.0.0" } @@ -3323,6 +4094,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, "requires": { "boolbase": "~1.0.0" } @@ -3330,17 +4102,21 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -3351,6 +4127,8 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -3359,6 +4137,8 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -3368,12 +4148,14 @@ "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true }, "object-is": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" @@ -3382,12 +4164,15 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "optional": true, "requires": { "isobject": "^3.0.0" }, @@ -3395,7 +4180,9 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, @@ -3403,6 +4190,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -3414,6 +4202,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "optional": true, "requires": { "isobject": "^3.0.1" }, @@ -3421,7 +4211,9 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, @@ -3429,6 +4221,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -3437,6 +4230,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -3445,6 +4239,7 @@ "version": "7.3.0", "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "dev": true, "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -3454,6 +4249,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -3467,6 +4263,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "dev": true, "requires": { "execa": "^4.0.0", "lcid": "^3.0.0", @@ -3476,27 +4273,32 @@ "os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true }, "p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -3505,6 +4307,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -3512,12 +4315,14 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, "requires": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -3528,19 +4333,22 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "requires": { "callsites": "^3.0.0" } @@ -3549,6 +4357,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3560,6 +4369,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, "requires": { "@types/node": "*" } @@ -3567,47 +4377,64 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true }, "pino": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz", "integrity": "sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw==", + "dev": true, "requires": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.7", @@ -3620,24 +4447,29 @@ "fast-redact": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", - "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==" + "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", + "dev": true } } }, "pino-std-serializers": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", - "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==" + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", + "dev": true }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "optional": true }, "postcss": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.1.tgz", "integrity": "sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg==", + "dev": true, "requires": { "colorette": "^1.2.1", "line-column": "^1.0.2", @@ -3648,17 +4480,20 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true }, "probe-image-size": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz", "integrity": "sha512-V6uBYw5eBc5UVIE7MUZD6Nxg0RYuGDWLDenEn0B1WC6PcTvn1xdQ6HLDDuznefsiExC6rNrCz7mFRBo0f3Xekg==", + "dev": true, "requires": { "deepmerge": "^4.0.0", "inherits": "^2.0.3", @@ -3670,22 +4505,26 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -3694,12 +4533,14 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, "requires": { "escape-goat": "^2.0.0" } @@ -3707,17 +4548,20 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "quick-format-unescaped": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", - "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==" + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", + "dev": true }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3728,7 +4572,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true } } }, @@ -3736,6 +4581,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3746,6 +4592,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dev": true, "requires": { "minimatch": "^3.0.4" } @@ -3754,6 +4601,8 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "optional": true, "requires": { "picomatch": "^2.2.1" } @@ -3761,12 +4610,15 @@ "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "optional": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -3776,6 +4628,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" @@ -3785,6 +4638,7 @@ "version": "1.17.7", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -3804,12 +4658,14 @@ "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true }, "registry-auth-token": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "dev": true, "requires": { "rc": "^1.2.8" } @@ -3818,6 +4674,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, "requires": { "rc": "^1.2.8" } @@ -3826,6 +4683,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", + "dev": true, "requires": { "chalk": "^2.4.2", "commander": "^2.6.0" @@ -3835,6 +4693,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -3843,6 +4702,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3853,6 +4713,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -3860,17 +4721,20 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -3880,22 +4744,29 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "optional": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -3922,27 +4793,43 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "dev": true, + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true, + "optional": true }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, "requires": { "lowercase-keys": "^1.0.0" } @@ -3950,30 +4837,47 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "optional": true }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { "glob": "^7.1.3" } }, + "rollup": { + "version": "2.33.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz", + "integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safe-json-stringify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": true, "requires": { "ret": "~0.1.10" } @@ -3981,22 +4885,26 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, "requires": { "semver": "^6.3.0" }, @@ -4004,19 +4912,23 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -4028,6 +4940,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -4038,6 +4952,7 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -4047,6 +4962,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -4054,12 +4970,14 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true }, "shell-quote": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, "requires": { "array-filter": "~0.0.0", "array-map": "~0.0.0", @@ -4070,12 +4988,14 @@ "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true }, "sign-addon": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.1.0.tgz", "integrity": "sha512-zZ7nKc5/3QWM3skYBosGDvYQf2jkKhW2u8BELrZoN1wgCSOnwsV9T47Vx9uaNbA3CyZ+V9XSA0tDVHoV1QfVPw==", + "dev": true, "requires": { "common-tags": "1.8.0", "core-js": "3.6.5", @@ -4092,19 +5012,22 @@ "core-js": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true } } }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -4115,6 +5038,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -4123,6 +5047,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -4130,12 +5055,14 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true } } }, @@ -4143,6 +5070,8 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "optional": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -4158,6 +5087,8 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4166,6 +5097,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -4173,7 +5106,9 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true } } }, @@ -4181,6 +5116,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "optional": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -4191,6 +5128,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^1.0.0" } @@ -4199,6 +5138,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -4207,6 +5148,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -4215,6 +5158,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -4224,7 +5169,9 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, @@ -4232,6 +5179,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.2.0" }, @@ -4240,6 +5189,8 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -4250,6 +5201,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.0.tgz", "integrity": "sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw==", + "dev": true, "requires": { "atomic-sleep": "^1.0.0", "flatstr": "^1.0.12" @@ -4258,12 +5210,15 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "optional": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -4276,6 +5231,7 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -4284,12 +5240,21 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true, + "optional": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true }, "spawn-sync": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "dev": true, "requires": { "concat-stream": "^1.4.7", "os-shim": "^0.1.2" @@ -4299,6 +5264,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, "requires": { "through": "2" } @@ -4307,6 +5273,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, "requires": { "extend-shallow": "^3.0.0" } @@ -4314,12 +5282,14 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -4336,6 +5306,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -4345,6 +5317,8 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4355,6 +5329,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dev": true, "requires": { "debug": "2" } @@ -4363,6 +5338,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", + "dev": true, "requires": { "any-promise": "^1.1.0" } @@ -4371,6 +5347,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", + "dev": true, "requires": { "any-promise": "~1.3.0", "end-of-stream": "~1.4.1", @@ -4381,6 +5358,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4390,12 +5368,14 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -4406,6 +5386,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" @@ -4415,6 +5396,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" @@ -4424,6 +5406,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -4432,6 +5415,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4439,12 +5423,14 @@ "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true }, "strip-bom-buf": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", + "dev": true, "requires": { "is-utf8": "^0.2.1" } @@ -4453,6 +5439,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", + "dev": true, "requires": { "first-chunk-stream": "^3.0.0", "strip-bom-buf": "^2.0.0" @@ -4461,24 +5448,28 @@ "first-chunk-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", - "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==" + "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", + "dev": true } } }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -4487,6 +5478,7 @@ "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, "requires": { "ajv": "^6.10.2", "lodash": "^4.17.14", @@ -4497,22 +5489,26 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -4523,6 +5519,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -4533,6 +5530,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "dev": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -4544,17 +5542,20 @@ "term-size": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, "requires": { "any-promise": "^1.0.0" } @@ -4563,6 +5564,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, "requires": { "thenify": ">= 3.1.0 < 4" } @@ -4570,12 +5572,14 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "requires": { "rimraf": "^3.0.0" }, @@ -4584,6 +5588,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -4594,6 +5599,8 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -4602,6 +5609,8 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -4611,12 +5620,15 @@ "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "optional": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -4628,6 +5640,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, "requires": { "is-number": "^7.0.0" } @@ -4635,12 +5649,14 @@ "tosource": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", - "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=" + "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=", + "dev": true }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -4650,6 +5666,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, "requires": { "punycode": "^2.1.1" } @@ -4657,12 +5674,14 @@ "traverse": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", - "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=" + "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", + "dev": true }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -4670,12 +5689,14 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "requires": { "prelude-ls": "^1.2.1" } @@ -4683,22 +5704,26 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "requires": { "is-typedarray": "^1.0.0" } @@ -4707,6 +5732,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "optional": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -4718,6 +5745,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, "requires": { "crypto-random-string": "^2.0.0" } @@ -4725,12 +5753,15 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "optional": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -4740,6 +5771,8 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "optional": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -4750,6 +5783,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, "requires": { "isarray": "1.0.0" } @@ -4759,24 +5794,30 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "optional": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true } } }, "upath": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.0.tgz", - "integrity": "sha512-ghi1XxsVYPOZPDsOZrfOJIwQU5I3JVYB3Q6IbBGn1KFeOa89i0nUy5tCEkY9pVm83U83qZ1QG40RQKGknllV4w==" + "integrity": "sha512-ghi1XxsVYPOZPDsOZrfOJIwQU5I3JVYB3Q6IbBGn1KFeOa89i0nUy5tCEkY9pVm83U83qZ1QG40RQKGknllV4w==", + "dev": true }, "update-notifier": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "dev": true, "requires": { "boxen": "^4.2.0", "chalk": "^4.1.0", @@ -4798,6 +5839,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -4805,12 +5847,15 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true, + "optional": true }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, "requires": { "prepend-http": "^2.0.0" } @@ -4818,27 +5863,33 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "optional": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true }, "v8-compile-cache": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -4849,6 +5900,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", @@ -4860,6 +5912,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, "requires": { "chokidar": "^2.1.8" }, @@ -4868,6 +5922,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -4877,6 +5933,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -4886,12 +5944,16 @@ "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -4909,6 +5971,8 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -4928,6 +5992,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -4936,6 +6002,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -4947,6 +6015,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, "optional": true, "requires": { "nan": "^2.12.1" @@ -4956,6 +6025,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -4965,6 +6036,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, "requires": { "is-extglob": "^2.1.0" } @@ -4975,6 +6048,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, "requires": { "binary-extensions": "^1.0.0" } @@ -4983,6 +6058,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" } @@ -4990,12 +6067,16 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -5004,6 +6085,8 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5018,6 +6101,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -5027,12 +6112,16 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, "requires": { "safe-buffer": "~5.1.0" } @@ -5041,6 +6130,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -5049,7 +6140,9 @@ "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true } } }, @@ -5057,6 +6150,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, "requires": { "defaults": "^1.0.3" } @@ -5111,12 +6205,14 @@ "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true }, "whatwg-url": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^2.0.2", @@ -5126,12 +6222,14 @@ "when": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", - "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=" + "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=", + "dev": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -5139,12 +6237,14 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, "requires": { "string-width": "^4.0.0" } @@ -5152,17 +6252,20 @@ "winreg": { "version": "0.0.12", "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", - "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=" + "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=", + "dev": true }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5172,12 +6275,14 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -5187,12 +6292,14 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, "requires": { "mkdirp": "^0.5.1" }, @@ -5201,6 +6308,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -5211,6 +6319,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -5221,17 +6330,20 @@ "ws": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==" + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "dev": true }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -5240,17 +6352,20 @@ "xmlbuilder": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -5268,7 +6383,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true } } }, @@ -5276,6 +6392,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -5284,12 +6401,14 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true } } }, @@ -5297,6 +6416,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -5306,6 +6426,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=", + "dev": true, "requires": { "async": "^1.5.2", "jszip": "^2.4.0" @@ -5314,7 +6435,8 @@ "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true } } }, @@ -5322,6 +6444,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "dev": true, "requires": { "archiver-utils": "^2.1.0", "compress-commons": "^4.0.0", diff --git a/package.json b/package.json index d0178ad..78d75a0 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,11 @@ "test": "npm run test-addon" }, "devDependencies": { + "@rollup/plugin-commonjs": "^16.0.0", + "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", "eslint-plugin-node": "^11.1.0", + "rollup": "^2.33.1", "web-ext": "^5.3.0", "webextension-polyfill": "^0.6.0" }, @@ -17,7 +20,7 @@ "engines": { "node": ">=14.0.0" }, - "description": "This is the Ion Core Add-on: a cross-browser WebExtension that allows users to participate to Ion studies.", + "description": "This a basic template for an Ion study.", "repository": { "type": "git", "url": "git+https://github.com/mozilla-ion/ion-basic-study.git" diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..15c6bce --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,34 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import commonjs from "@rollup/plugin-commonjs"; +import resolve from "@rollup/plugin-node-resolve"; + +export default () => { + return [ + { + input: "src/background.js", + output: { + file: "dist/background.js" + }, + plugins: [ + resolve({ + browser: true, + }), + commonjs(), + ], + }, + { + input: "src/content-script.js", + output: { + file: "dist/content-script.js" + }, + plugins: [ + resolve({ + browser: true, + }), + commonjs(), + ], + }, +]}; From 0302901e6abfef55dbe336b1ae5c547bdc8b4fbc Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 15:45:36 +0100 Subject: [PATCH 017/399] Add a sample content script --- manifest.json | 2 +- src/content-script.js | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/content-script.js diff --git a/manifest.json b/manifest.json index 704aecb..9a26c67 100644 --- a/manifest.json +++ b/manifest.json @@ -18,7 +18,7 @@ "background": { "scripts": [ "ion.js", - "src/background.js" + "dist/background.js" ] } } diff --git a/src/content-script.js b/src/content-script.js new file mode 100644 index 0000000..5a15580 --- /dev/null +++ b/src/content-script.js @@ -0,0 +1,9 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +window.browser = require("webextension-polyfill"); + +// ... Add more implementation here! + +console.debug("Ion - Running content script"); From c1875317030811d7d66e7151103625d0b41ee1be Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 15:48:38 +0100 Subject: [PATCH 018/399] Enable webextesion-polyfill in the background script --- src/background.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/background.js b/src/background.js index bd24f2a..73b35e4 100644 --- a/src/background.js +++ b/src/background.js @@ -2,6 +2,10 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +window.browser = require("webextension-polyfill"); + +// ... Add more implementation here! + let ion = new Ion(); ion.initialize( // A sample key id used for encrypting data. From 3a3ad9bd0dd0177fc6ce0a6e9f7262d791d91a35 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 15:58:21 +0100 Subject: [PATCH 019/399] Use ion.js as a separate module --- ion.js | 2 +- manifest.json | 1 - src/background.js | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ion.js b/ion.js index 6998596..2450d2a 100644 --- a/ion.js +++ b/ion.js @@ -5,7 +5,7 @@ const CORE_ADDON_ID = "ion-core-addon@mozilla.org"; const ION_SIGNUP_URL = "https://mozilla-ion.github.io/ion-core-addon/"; -class Ion { +module.exports = class Ion { /** * Initialize the Ion library. * diff --git a/manifest.json b/manifest.json index 9a26c67..c26c45f 100644 --- a/manifest.json +++ b/manifest.json @@ -17,7 +17,6 @@ "background": { "scripts": [ - "ion.js", "dist/background.js" ] } diff --git a/src/background.js b/src/background.js index 73b35e4..7e99af5 100644 --- a/src/background.js +++ b/src/background.js @@ -3,6 +3,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ window.browser = require("webextension-polyfill"); +const Ion = require("../ion.js"); // ... Add more implementation here! From bd61bf929e7f5b7a59ff606ca8778c7f8fddc32c Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 16:02:39 +0100 Subject: [PATCH 020/399] Add support for the import/export syntax in eslint --- package-lock.json | 440 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 441 insertions(+) diff --git a/package-lock.json b/package-lock.json index e8f64a6..080eb94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -255,6 +255,12 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -662,6 +668,38 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -687,6 +725,37 @@ "dev": true, "optional": true }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -1387,6 +1456,12 @@ "xdg-basedir": "^4.0.0" } }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1931,6 +2006,26 @@ } } }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + } + }, "eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -1941,6 +2036,39 @@ "regexpp": "^3.0.0" } }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, "eslint-plugin-no-unsanitized": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", @@ -2797,6 +2925,12 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -3165,6 +3299,12 @@ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -3324,6 +3464,15 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -3524,6 +3673,35 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4069,6 +4247,26 @@ } } }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4217,6 +4415,39 @@ } } }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4412,6 +4643,15 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -4430,6 +4670,12 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, "pino": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz", @@ -4458,6 +4704,66 @@ "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", "dev": true }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -4577,6 +4883,78 @@ } } }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5260,6 +5638,38 @@ "os-shim": "^0.1.2" } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -5677,6 +6087,26 @@ "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", "dev": true }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5885,6 +6315,16 @@ "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", diff --git a/package.json b/package.json index 78d75a0..0d0fa52 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "@rollup/plugin-commonjs": "^16.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", "rollup": "^2.33.1", "web-ext": "^5.3.0", From 6a75c5d85011002f46bb190c10d9c81a1dbb6165 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 19:08:54 +0100 Subject: [PATCH 021/399] Use @rollup/plugin-commonjs": "^14.0.0" Due to rollup/plugins#501, from version 15.0.0 onwards the generated addon breaks: the rollup plugin automatically creates an `export default` section at the end of the generated code, which the addon system doesn't really like. --- package-lock.json | 24 ++++++++++++------------ package.json | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 080eb94..473f680 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,18 +187,18 @@ } }, "@rollup/plugin-commonjs": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", - "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz", + "integrity": "sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", + "@rollup/pluginutils": "^3.0.8", "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" + "estree-walker": "^1.0.1", + "glob": "^7.1.2", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" } }, "@rollup/plugin-node-resolve": { @@ -2202,9 +2202,9 @@ "dev": true }, "estree-walker": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz", - "integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, "esutils": { diff --git a/package.json b/package.json index 0d0fa52..974d266 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "test": "npm run test-addon" }, "devDependencies": { - "@rollup/plugin-commonjs": "^16.0.0", + "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", "eslint-plugin-import": "^2.22.1", From 5f3a97d81b7faf523bb289330e6940d4e1a58d3d Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 6 Nov 2020 19:11:32 +0100 Subject: [PATCH 022/399] Enable the "plugin:import/warnings" eslint plugin --- .eslintrc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 199b15d..ed2e83a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -11,7 +11,7 @@ module.exports = { }, extends: [ "eslint:recommended", - //"plugin:import/warnings", + "plugin:import/warnings", "plugin:node/recommended", ], globals: { @@ -39,7 +39,7 @@ module.exports = { sourceType: "module", }, plugins: [ - //"import", + "import", //"mocha", "node", ], From 5abf217bd2161bf96c2a3f0deb28f47bbca1b9bd Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 9 Nov 2020 12:04:17 +0100 Subject: [PATCH 023/399] Enable additional linting rules and add .eslintignore --- .eslintignore | 1 + .eslintrc.js | 9 ++------- ion.js | 2 +- src/background.js | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +dist diff --git a/.eslintrc.js b/.eslintrc.js index ed2e83a..5dde08a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -17,11 +17,6 @@ module.exports = { globals: { ChromeUtils: false, ExtensionAPI: false, - // NOTE: These get injected via Rollup. - __API_ENDPOINT__: false, - __ION_STUDIES_LIST__: false, - __ION_WEBSITE_URL__: false, - __STORE_IMPLEMENTATION__: false, }, /*overrides: [ { @@ -53,7 +48,7 @@ module.exports = { "node/no-unsupported-features/es-syntax": "off", "no-unused-vars": [ "error", { vars: "all", args: "none", ignoreRestSiblings: false } ], - "no-var": "off", // TODO: "warn", - "prefer-const": "off", // TODO: "warn", + "no-var": "warn", + "prefer-const": "warn", }, }; diff --git a/ion.js b/ion.js index 2450d2a..5f0a478 100644 --- a/ion.js +++ b/ion.js @@ -147,7 +147,7 @@ module.exports = class Ion { // The unique identifier of the study can be used as the // namespace, in order to make sure data is routed to the // proper analysis sandbox. - let studyName = browser.runtime.id; + const studyName = browser.runtime.id; // This function may be mistakenly called while init has not // finished. Let's be safe and check for key validity again. diff --git a/src/background.js b/src/background.js index 7e99af5..69a048b 100644 --- a/src/background.js +++ b/src/background.js @@ -7,7 +7,7 @@ const Ion = require("../ion.js"); // ... Add more implementation here! -let ion = new Ion(); +const ion = new Ion(); ion.initialize( // A sample key id used for encrypting data. "sample-invalid-key-id", From 1b4863a9c0342df3948ec044e12018c70c4f5970 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 9 Nov 2020 12:05:34 +0100 Subject: [PATCH 024/399] Remove the 'test' command --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 974d266..93b0557 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,7 @@ "scripts": { "build": "rollup -c", "dev": "rollup -c -w", - "lint": "eslint . && web-ext lint", - "test": "npm run test-addon" + "lint": "eslint . && web-ext lint" }, "devDependencies": { "@rollup/plugin-commonjs": "^14.0.0", From 59627b39f9226fca6393e24b36ff612973e901d1 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 9 Nov 2020 12:49:58 +0100 Subject: [PATCH 025/399] Remove the 'dev' command and provide a 'start' --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93b0557..96c2b44 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "scripts": { "build": "rollup -c", - "dev": "rollup -c -w", + "start": "npm run build && web-ext run", "lint": "eslint . && web-ext lint" }, "devDependencies": { From 13176490e0e75173c23fbf4994e8f8b4d5e8f230 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 9 Nov 2020 14:04:29 +0100 Subject: [PATCH 026/399] Update the README file --- README.md | 76 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 99c76ab..55b981f 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,75 @@ -A basic Mozilla Ion Study. +# Mozilla Ion study template. +The purpose of this repository is to provide a starting point to build an Ion study. -This is an unprivileged WebExtension. +## Getting started -To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `web-ext`: +1. Fork this repository. +2. Customize the [manifest.json](./manifest.json) file: + * change the `name`, `author` and `description` properties; + * swap the value of `application.gecko.id` (e.g. `ion-basic-study@mozilla.org`) with the one provided you by the Ion team; +3. Provide the encryption data to the `Ion` class constructor in the [src/background.js](./src/background.js) file: -Firefox: -```bash -web-ext run +```js +ion.initialize( + // A sample key id used for encrypting data. + "sample-invalid-key-id", + // A sample *valid* JWK object for the encryption. + { + "kty":"EC", + "crv":"P-256", + "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", + "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", + "kid":"Public key used in JWS spec Appendix A.3 example" + } +); ``` -Chrome: +4. From the forked repository directory, install all the NPM dependencies: + ```bash -web-ext run -t chromium +fork-dir> npm install . +``` + +5. Test the customized study in Firefox and commit your changes: doing this right after the initial fork provides a nice and clean cutting point with the original repository, which will simplify future updates (if needed). + +## Building upon this template +This template uses [rollup.js](https://rollupjs.org/) as a module bundler and NPM for dependency management. The [manifest.json](./manifest.json) file already includes a sample background scripts. + +Dependencies can be added using the [`npm install`](https://docs.npmjs.com/cli/v6/commands/npm-install) command, using the appropriate `--save-dev` or `--save-prod` switch. This command will take care of automatically updating the [package.json](./package.json) file. + +New modules can be added in the `src/` directory. Modules need to expose the exported functions using the `module.exports` syntax. For example, a class can be exported as follows in a `MyClass.js` file: + +```js +module.exports = class MyClass { + myFunc() { + console.log("Testing!"); + } +} ``` + +And then be imported in another file with `const MyClass = require("./MyClass.js");`. + +Plain functions can be exposed as follows in a `MyFuncs.js` file: + +```js +module.exports = { + myTest() { + //... something! + }, + otherFunc() { + // ... other function! + } +}; +``` + +And then be imported in another file with `const {myTest, otherFunc} = require("./MyFuncs.js");`. + +## Supported NPM commands +The template comes with a set of pre-defined NPM commands (to run as `npm run `) to help study authors: + +* `build`: assembles the final addon and writes the generated code in the `dist/` directory. +* `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. +* `lint`: run linting on the add-on code. + +## Manual testing in the browser +To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `npm run start`. From ef46c851bc213afbf4201edb99c65533703e1892 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 10 Nov 2020 18:25:54 +0100 Subject: [PATCH 027/399] Remove dead code in .eslintrc.js --- .eslintrc.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5dde08a..6f39c57 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -18,24 +18,12 @@ module.exports = { ChromeUtils: false, ExtensionAPI: false, }, - /*overrides: [ - { - files: "tests/**", - env: { - mocha: true, - }, - extends: [ - "plugin:mocha/recommended", - ], - }, - ],*/ parserOptions: { ecmaVersion: 2021, sourceType: "module", }, plugins: [ "import", - //"mocha", "node", ], root: true, From aef7e2fee6a8afda51667c16c17730304b563588 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Thu, 12 Nov 2020 10:44:37 +0100 Subject: [PATCH 028/399] Introduce a command to package the final addon --- .gitignore | 3 +++ README.md | 5 +++-- package.json | 5 +++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 6704566..69c21cb 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ dist # TernJS port file .tern-port + +# Generated study files +web-ext-artifacts/ diff --git a/README.md b/README.md index 55b981f..660e0ac 100644 --- a/README.md +++ b/README.md @@ -67,9 +67,10 @@ And then be imported in another file with `const {myTest, otherFunc} = require(" ## Supported NPM commands The template comes with a set of pre-defined NPM commands (to run as `npm run `) to help study authors: -* `build`: assembles the final addon and writes the generated code in the `dist/` directory. -* `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. +* `build`: assembles the final addon. The budler generated code is saved in the `dist/` directory. * `lint`: run linting on the add-on code. +* `package`: packages the final archive containing the bundled addon, is saved in the `web-ext-artifacts` directory. +* `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. ## Manual testing in the browser To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `npm run start`. diff --git a/package.json b/package.json index 96c2b44..9263e75 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,9 @@ "version": "0.0.1", "scripts": { "build": "rollup -c", - "start": "npm run build && web-ext run", - "lint": "eslint . && web-ext lint" + "lint": "eslint . && web-ext lint", + "package": "npm run build && web-ext build --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", + "start": "npm run build && web-ext run" }, "devDependencies": { "@rollup/plugin-commonjs": "^14.0.0", From b11056d6c444501327ff9acb2301a86092e6f38d Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 16 Nov 2020 15:16:33 +0100 Subject: [PATCH 029/399] Use rally.js from NPM --- README.md | 2 +- ion.js | 171 ---------------------------------------------- package-lock.json | 6 ++ package.json | 1 + src/background.js | 6 +- 5 files changed, 11 insertions(+), 175 deletions(-) delete mode 100644 ion.js diff --git a/README.md b/README.md index 660e0ac..5e92223 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The purpose of this repository is to provide a starting point to build an Ion st 3. Provide the encryption data to the `Ion` class constructor in the [src/background.js](./src/background.js) file: ```js -ion.initialize( +rally.initialize( // A sample key id used for encrypting data. "sample-invalid-key-id", // A sample *valid* JWK object for the encryption. diff --git a/ion.js b/ion.js deleted file mode 100644 index 5f0a478..0000000 --- a/ion.js +++ /dev/null @@ -1,171 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -const CORE_ADDON_ID = "ion-core-addon@mozilla.org"; -const ION_SIGNUP_URL = "https://mozilla-ion.github.io/ion-core-addon/"; - -module.exports = class Ion { - /** - * Initialize the Ion library. - * - * @param {String} keyId - * The id of the key used to encrypt outgoing data. - * @param {Object} key - * The JSON Web Key (JWK) used to encrypt the outgoing data. - * See the RFC 7517 https://tools.ietf.org/html/rfc7517 - * for additional information. For example: - * - * { - * "kty":"EC", - * "crv":"P-256", - * "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", - * "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", - * "kid":"Public key used in JWS spec Appendix A.3 example" - * } - */ - async initialize(keyId, key) { - console.debug("Ion.initialize"); - - this._validateEncryptionKey(keyId, key); - - this._keyId = keyId; - this._key = key; - - await this._checkIonCore().then( - () => console.debug("Ion.initialize - Found Ion Core") - ).catch( - async () => await browser.tabs.create({ url: ION_SIGNUP_URL }) - ); - - // Listen for incoming messages from the Core addon. - browser.runtime.onMessageExternal.addListener( - (m, s) => this._handleExternalMessage(m, s)); - - // We went through the whole init process, it's now safe - // to use the Ion public APIs. - this._initialized = true; - } - - /** - * Check if the Core addon is installed. - * - * @returns {Promise} resolved if the core addon was found and - * communication was successful, rejected otherwise. - */ - async _checkIonCore() { - try { - return await browser.management.get(CORE_ADDON_ID); - } catch (ex) { - console.error("Ion._checkIonCore - core addon not found", ex); - return Promise.reject(ex); - } - - // TODO: in addition to checking if the addon is installed, - // this should check if user has joined the platform by sending - // a message to the addon and waiting for its response. - } - - /** - * Handles messages coming in from external addons. - * - * @param {Object} message - * The payload of the message. - * @param {runtime.MessageSender} sender - * An object containing informations about who sent - * the message. - * @returns {Promise} The response to the received message. - * It can be resolved with a value that is sent to the - * `sender`. - */ - _handleExternalMessage(message, sender) { - // We only expect messages coming from the core addon. - if (sender.id != CORE_ADDON_ID) { - return Promise.reject( - new Error(`Ion._handleExternalMessage - unexpected sender ${sender.id}`)); - } - - switch (message.type) { - case "uninstall": - return browser.management.uninstallSelf({showConfirmDialog: false}); - default: - return Promise.reject( - new Error(`Ion._handleExternalMessage - unexpected message type ${message.type}`)); - } - } - - /** - * Validate the provided encryption keys. - * - * @param {String} keyId - * The id of the key used to encrypt outgoing data. - * @param {Object} key - * The JSON Web Key (JWK) used to encrypt the outgoing data. - * See the RFC 7517 https://tools.ietf.org/html/rfc7517 - * for additional information. For example: - * - * { - * "kty":"EC", - * "crv":"P-256", - * "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", - * "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", - * "kid":"Public key used in JWS spec Appendix A.3 example" - * } - * - * @throws {Error} if either the key id or the JWK key object are - * invalid. - */ - _validateEncryptionKey(keyId, key) { - if (typeof keyId !== "string") { - throw new Error(`Ion._validateEncryptionKey - Invalid encryption key id ${keyId}`); - } - - if (typeof key !== "object") { - throw new Error(`Ion._validateEncryptionKey - Invalid encryption key ${key}`); - } - } - - /** - * Submit an encrypted ping through the Ion Core addon. - * - * @param {String} payloadType - * The type of the encrypted payload. This will define the - * `schemaName` of the ping. - * @param {Object} payload - * A JSON-serializable payload to be sent with the ping. - */ - async sendPing(payloadType, payload) { - if (!this._initialized) { - console.error("Ion.sendPing - Not initialzed, call `initialize()`"); - return; - } - - // Wrap everything in a try block, as we don't really want - // data collection to be the culprit of a bug hindering user - // experience. - try { - // The unique identifier of the study can be used as the - // namespace, in order to make sure data is routed to the - // proper analysis sandbox. - const studyName = browser.runtime.id; - - // This function may be mistakenly called while init has not - // finished. Let's be safe and check for key validity again. - this._validateEncryptionKey(this._keyId, this._key); - - const msg = { - type: "telemetry-ping", - data: { - payloadType: payloadType, - payload: payload, - namespace: studyName, - keyId: this._keyId, - key: this._key - } - } - await browser.runtime.sendMessage(CORE_ADDON_ID, msg, {}); - } catch (ex) { - console.error(`Ion.sendPing - error while sending ${payloadType}`, ex); - } - } -} diff --git a/package-lock.json b/package-lock.json index 473f680..1877c46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -186,6 +186,12 @@ } } }, + "@mozilla/rally": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.0.2.tgz", + "integrity": "sha512-GB5YuaV7o2CMCSqY6eKXTdHGhwzGAdqdwjFTUUaEyljh+BJg2ALh3zjfaIPginPhyE84fqVjf1SuQL5lBde7lA==", + "dev": true + }, "@rollup/plugin-commonjs": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz", diff --git a/package.json b/package.json index 9263e75..9691665 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "start": "npm run build && web-ext run" }, "devDependencies": { + "@mozilla/rally": "^0.0.2", "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", diff --git a/src/background.js b/src/background.js index 69a048b..244b687 100644 --- a/src/background.js +++ b/src/background.js @@ -3,12 +3,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ window.browser = require("webextension-polyfill"); -const Ion = require("../ion.js"); +const Rally = require("@mozilla/rally"); // ... Add more implementation here! -const ion = new Ion(); -ion.initialize( +const rally = new Rally(); +rally.initialize( // A sample key id used for encrypting data. "sample-invalid-key-id", // A sample *valid* JWK object for the encryption. From e5c74041357ea1fdc4a6f51de65d62239759616f Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 1 Dec 2020 11:41:49 +0100 Subject: [PATCH 030/399] Update to rally 0.0.3 --- package-lock.json | 24 +++++++++++++++++++++--- package.json | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1877c46..cdc50de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,9 +187,9 @@ } }, "@mozilla/rally": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.0.2.tgz", - "integrity": "sha512-GB5YuaV7o2CMCSqY6eKXTdHGhwzGAdqdwjFTUUaEyljh+BJg2ALh3zjfaIPginPhyE84fqVjf1SuQL5lBde7lA==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.0.3.tgz", + "integrity": "sha512-MULsa3KFe9dfupsYY5f6fvYf40zesnAORCJRE9ngMyiBkW97Gi0tJ7Y+HQoQkEXbT3udAGNOikrrD8KF34OJog==", "dev": true }, "@rollup/plugin-commonjs": { @@ -941,6 +941,16 @@ "dev": true, "optional": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", @@ -2451,6 +2461,13 @@ "flat-cache": "^2.0.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6464,6 +6481,7 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, diff --git a/package.json b/package.json index 9691665..00ef4e1 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "start": "npm run build && web-ext run" }, "devDependencies": { - "@mozilla/rally": "^0.0.2", + "@mozilla/rally": "0.0.3", "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", From f4bda10cd2d88a23a8c5060011afc2798a940dff Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 1 Dec 2020 11:42:20 +0100 Subject: [PATCH 031/399] Remove the "management" permission This is no longer required by the latest partner support library (rally.js) --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index c26c45f..395b349 100644 --- a/manifest.json +++ b/manifest.json @@ -13,7 +13,7 @@ } }, - "permissions": ["management"], + "permissions": [], "background": { "scripts": [ From 9394cebb263eb0852c953b119ff6a74ac8f68688 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Wed, 2 Dec 2020 12:16:28 +0100 Subject: [PATCH 032/399] Rebrand Ion to Rally --- README.md | 8 ++++---- package.json | 4 ++-- src/content-script.js | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5e92223..25f73c2 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# Mozilla Ion study template. -The purpose of this repository is to provide a starting point to build an Ion study. +# Mozilla Rally study template. +The purpose of this repository is to provide a starting point to build a Rally study. ## Getting started 1. Fork this repository. 2. Customize the [manifest.json](./manifest.json) file: * change the `name`, `author` and `description` properties; - * swap the value of `application.gecko.id` (e.g. `ion-basic-study@mozilla.org`) with the one provided you by the Ion team; -3. Provide the encryption data to the `Ion` class constructor in the [src/background.js](./src/background.js) file: + * swap the value of `application.gecko.id` (e.g. `ion-basic-study@mozilla.org`) with the one provided you by the Rally team; +3. Provide the encryption data to the `Rally` class constructor in the [src/background.js](./src/background.js) file: ```js rally.initialize( diff --git a/package.json b/package.json index 00ef4e1..37cff5c 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ion-study-template", + "name": "rally-study-template", "version": "0.0.1", "scripts": { "build": "rollup -c", @@ -22,7 +22,7 @@ "engines": { "node": ">=14.0.0" }, - "description": "This a basic template for an Ion study.", + "description": "This a basic template for a Rally study.", "repository": { "type": "git", "url": "git+https://github.com/mozilla-ion/ion-basic-study.git" diff --git a/src/content-script.js b/src/content-script.js index 5a15580..8ba0dfe 100644 --- a/src/content-script.js +++ b/src/content-script.js @@ -6,4 +6,4 @@ window.browser = require("webextension-polyfill"); // ... Add more implementation here! -console.debug("Ion - Running content script"); +console.debug("Running content script"); From b58e55164bf14d90f625bac6a63323abfe63fd7c Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Wed, 2 Dec 2020 18:19:07 +0100 Subject: [PATCH 033/399] Address review feedback --- manifest.json | 6 +++--- package-lock.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.json b/manifest.json index 395b349..2641ba0 100644 --- a/manifest.json +++ b/manifest.json @@ -1,14 +1,14 @@ { - "description": "A basic template for a Mozilla Ion Study.", + "description": "A basic template for a Mozilla Rally Study.", "author": "Mozilla", "manifest_version": 2, - "name": "Ion Basic Study Template", + "name": "Rally Basic Study Template", "version": "2.0", "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", "applications": { "gecko": { - "id": "ion-basic-study@mozilla.org", + "id": "rally-basic-study@mozilla.org", "strict_min_version": "77.0a1" } }, diff --git a/package-lock.json b/package-lock.json index cdc50de..e53e38c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "ion-study-template", + "name": "rally-study-template", "version": "0.0.1", "lockfileVersion": 1, "requires": true, From cc1e1685b306eae719716aff173782ad8311b01d Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 7 Dec 2020 11:19:12 +0100 Subject: [PATCH 034/399] Update webextension-polyfill to 0.7.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e53e38c..aea46c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6661,9 +6661,9 @@ } }, "webextension-polyfill": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.6.0.tgz", - "integrity": "sha512-PlYwiX8e4bNZrEeBFxbFFsLtm0SMPxJliLTGdNCA0Bq2XkWrAn2ejUd+89vZm+8BnfFB1BclJyCz3iKsm2atNg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", + "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", "dev": true }, "webidl-conversions": { diff --git a/package.json b/package.json index 37cff5c..f546b3b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "eslint-plugin-node": "^11.1.0", "rollup": "^2.33.1", "web-ext": "^5.3.0", - "webextension-polyfill": "^0.6.0" + "webextension-polyfill": "^0.7.0" }, "dependencies": {}, "engines": { From d7a27751842a52c9a485d23b9fe16a1d5e210d81 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 7 Dec 2020 11:20:33 +0100 Subject: [PATCH 035/399] Update web-ext to 5.4.0 --- package-lock.json | 1866 +++++++++++++++++++++++++++++++++++---------- package.json | 2 +- 2 files changed, 1457 insertions(+), 411 deletions(-) diff --git a/package-lock.json b/package-lock.json index aea46c7..9ff027e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,9 +83,9 @@ } }, "@babel/polyfill": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.11.5.tgz", - "integrity": "sha512-FunXnE0Sgpd61pKSj2OSOs1D44rKTD3pGOfGilZ6LGrrIH0QEtJlTjqOqdF8Bs98JmjfGhni2BBkTfv9KcKJ9g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", "dev": true, "requires": { "core-js": "^2.6.5", @@ -93,9 +93,9 @@ } }, "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -186,6 +186,15 @@ } } }, + "@mdn/browser-compat-data": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.5.tgz", + "integrity": "sha512-JTosoRJrq5E8QYLwPfqB22zZxyBzUEx+1ooOPMcrFYgWplOeS8K8B6VD3WHD+9XV+R1X5vimruSL9ALYuxfD+A==", + "dev": true, + "requires": { + "extend": "3.0.2" + } + }, "@mozilla/rally": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.0.3.tgz", @@ -241,9 +250,9 @@ } }, "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true }, "@szmarczak/http-timer": { @@ -255,12 +264,41 @@ "defer-to-connect": "^1.0.1" } }, + "@types/decompress": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.3.tgz", + "integrity": "sha512-W24e3Ycz1UZPgr1ZEDHlK4XnvOr+CpJH3qNsFeqXwwlW/9END9gxn3oJSsp7gYdiQxrXUHwUUd3xuzVz37MrZQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/download": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@types/download/-/download-6.2.4.tgz", + "integrity": "sha512-Lo5dy3ai6LNnbL663sgdzqL1eib11u1yKH6w3v3IXEOO4kRfQpMn1qWUTaumcHLACjFp1RcBx9tUXEvJoR3vcA==", + "dev": true, + "requires": { + "@types/decompress": "*", + "@types/got": "^8", + "@types/node": "*" + } + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/got": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", + "integrity": "sha512-AaXSrIF99SjjtPVNmCmYb388HML+PKEJb/xmj4SbL2ZO0hHuETZZzyDIKfOqaEoAHZEuX4sC+FRFrHYJoIby6A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -288,12 +326,31 @@ "@types/node": "*" } }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "JSONSelect": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", "dev": true }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -307,12 +364,14 @@ "dev": true }, "addons-linter": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.9.0.tgz", - "integrity": "sha512-OrkDQ9S/GAJzMe+izsFMFOtRq9geFFt3O5c7Fi6pehGi7RY2PSMpPmKjMK1j/rPa9jrG0e9zocptMrOi11uvug==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.12.0.tgz", + "integrity": "sha512-Kv2Joa81UfxCWHYK13G9ZNKb/z5cJP1TlshCh9vA2dBH55szabIN+yIxujgNCIg2/k/wDya3OihBmyFNkFmFkw==", "dev": true, "requires": { - "@babel/runtime": "7.11.2", + "@babel/runtime": "7.12.5", + "@mdn/browser-compat-data": "2.0.5", + "addons-scanner-utils": "3.0.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", @@ -320,53 +379,31 @@ "columnify": "1.5.4", "common-tags": "1.8.0", "deepmerge": "4.2.2", - "dispensary": "0.57.0", - "es6-promisify": "6.1.1", - "eslint": "7.11.0", + "dispensary": "0.59.0", + "eslint": "7.13.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", "espree": "7.3.0", "esprima": "4.0.1", - "first-chunk-stream": "4.0.0", "fluent-syntax": "0.13.0", - "fsevents": "2.1.3", + "fsevents": "2.2.1", "glob": "7.1.6", "is-mergeable-object": "1.1.1", "jed": "1.1.1", - "mdn-browser-compat-data": "1.0.40", "os-locale": "5.0.0", "pino": "6.7.0", - "postcss": "8.1.1", + "postcss": "8.1.7", "probe-image-size": "5.0.0", "relaxed-json": "1.0.3", "semver": "7.3.2", "source-map-support": "0.5.19", - "strip-bom-stream": "4.0.0", "tosource": "1.0.0", - "upath": "2.0.0", + "upath": "2.0.1", "whatwg-url": "8.4.0", - "yargs": "15.4.1", + "yargs": "16.1.0", "yauzl": "2.10.0" }, "dependencies": { - "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -374,22 +411,22 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "eslint": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", - "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -427,6 +464,13 @@ "v8-compile-cache": "^2.0.3" } }, + "fsevents": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -441,6 +485,48 @@ "requires": { "ansi-regex": "^5.0.0" } + }, + "yargs": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", + "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", + "dev": true, + "requires": { + "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.2", + "yargs-parser": "^20.2.2" + } + } + } + }, + "addons-scanner-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-3.0.0.tgz", + "integrity": "sha512-bX8Sx5iwvG9bHZrfP4xv+3xFU93Mk6WnBmIHm+ep4DEiqUunRRpbrs7uEgAnlWnqC46VnrFsOJdCB/MY+pHG1g==", + "dev": true, + "requires": { + "@types/download": "6.2.4", + "@types/yauzl": "2.9.1", + "body-parser": "1.19.0", + "common-tags": "1.8.0", + "download": "8.0.0", + "express": "4.17.1", + "first-chunk-stream": "3.0.0", + "safe-compare": "1.1.4", + "strip-bom-stream": "4.0.0", + "upath": "2.0.0", + "yauzl": "2.10.0" + }, + "dependencies": { + "upath": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.0.tgz", + "integrity": "sha512-ghi1XxsVYPOZPDsOZrfOJIwQU5I3JVYB3Q6IbBGn1KFeOa89i0nUy5tCEkY9pVm83U83qZ1QG40RQKGknllV4w==", + "dev": true } } }, @@ -559,6 +645,23 @@ "picomatch": "^2.0.4" } }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true + } + } + }, "archiver": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", @@ -579,6 +682,41 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "tar-stream": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } } } }, @@ -598,38 +736,6 @@ "lodash.union": "^4.6.0", "normalize-path": "^3.0.0", "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "argparse": { @@ -674,6 +780,12 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, "array-includes": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", @@ -920,9 +1032,9 @@ } }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "bcrypt-pbkdf": { @@ -941,25 +1053,14 @@ "dev": true, "optional": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "bluebird": { @@ -968,6 +1069,24 @@ "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", "dev": true }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "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" + } + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -1038,6 +1157,22 @@ "ieee754": "^1.1.13" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1050,6 +1185,12 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -1074,6 +1215,12 @@ "safe-json-stringify": "~1" } }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1102,24 +1249,30 @@ } }, "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", "dev": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" }, "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", "dev": true } } @@ -1272,14 +1425,14 @@ "dev": true }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" }, "dependencies": { "ansi-regex": { @@ -1397,15 +1550,28 @@ "optional": true }, "compress-commons": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", - "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz", + "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", "dev": true, "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.0", + "crc32-stream": "^4.0.1", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "concat-map": { @@ -1424,38 +1590,6 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "configstore": { @@ -1470,6 +1604,23 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "contains-path": { @@ -1478,6 +1629,33 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1486,9 +1664,9 @@ "optional": true }, "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, "core-util-is": { @@ -1497,23 +1675,37 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "dev": true, "requires": { - "buffer": "^5.1.0" + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" } }, "crc32-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", - "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz", + "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", "dev": true, "requires": { - "crc": "^3.4.4", + "crc-32": "^1.2.0", "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "cross-spawn": { @@ -1585,8 +1777,42 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, - "optional": true + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + } + } }, "decompress-response": { "version": "3.3.0", @@ -1597,6 +1823,95 @@ "mimic-response": "^1.0.0" } }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + } + } + }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -1720,19 +2035,31 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, "dispensary": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.57.0.tgz", - "integrity": "sha512-vgRaZa9Ok8QdrAVtx+s6heBgI1RGT+Y6VA336oPWYADZZz83K+5NOTpLamEKRyJdRY5pYLaWhV2Js7bau1JyKg==", + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.59.0.tgz", + "integrity": "sha512-JSnh4AhtYgwoyUHtunZbAhklkD9IeNacK1IDlrAJSZjzBMGFoTp9+Nggg+ITJ+F1geXc04DZ55ixnjFr5Ozknw==", "dev": true, "requires": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", - "pino": "~6.6.0", + "pino": "~6.7.0", "request": "~2.88.0", "sha.js": "~2.4.4", "source-map-support": "~0.5.4", - "yargs": "~15.4.0" + "yargs": "~16.1.0" }, "dependencies": { "async": { @@ -1741,18 +2068,19 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, - "pino": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.6.1.tgz", - "integrity": "sha512-DOgm7rn6ctBkBYemHXSLj7+j3o3U1q1FWBXbHcprur8mA93QcJSycEkEqhqKiFB9Mx/3Qld2FGr6+9yfQza0kA==", + "yargs": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", + "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", "dev": true, "requires": { - "fast-redact": "^2.0.0", - "fast-safe-stringify": "^2.0.7", - "flatstr": "^1.0.12", - "pino-std-serializers": "^2.4.2", - "quick-format-unescaped": "^4.0.1", - "sonic-boom": "^1.0.2" + "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" } } } @@ -1810,6 +2138,33 @@ "is-obj": "^2.0.0" } }, + "download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", + "dev": true, + "requires": { + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, "dtrace-provider": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", @@ -1845,12 +2200,24 @@ "safe-buffer": "^5.0.1" } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -1933,12 +2300,24 @@ "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", "dev": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2229,6 +2608,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, "event-to-promise": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", @@ -2250,8 +2635,31 @@ "onetime": "^5.1.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + } } }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -2290,6 +2698,63 @@ } } }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2432,9 +2897,9 @@ "dev": true }, "fast-redact": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.1.0.tgz", - "integrity": "sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", + "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", "dev": true }, "fast-safe-stringify": { @@ -2461,12 +2926,28 @@ "flat-cache": "^2.0.1" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "dev": true + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "dev": true, - "optional": true + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } }, "fill-range": { "version": "7.0.1", @@ -2478,6 +2959,21 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "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-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2530,9 +3026,9 @@ } }, "first-chunk-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-4.0.0.tgz", - "integrity": "sha512-8TOz/mJp7+zc2HN63vnJHotwceq4gQI1+/gdJVnJcG4dEB96oUxw7wV9We4QKjSFWUc/V0ADDfaGba5cDoG6EA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", + "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", "dev": true }, "flat-cache": { @@ -2588,6 +3084,12 @@ "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -2598,6 +3100,22 @@ "map-cache": "^0.2.2" } }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -2726,9 +3244,9 @@ } }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" @@ -2792,32 +3310,41 @@ } }, "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" }, "dependencies": { "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -2870,12 +3397,27 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -2966,14 +3508,48 @@ "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -2991,6 +3567,15 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -3047,12 +3632,28 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, "invert-kv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", "dev": true }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, "is-absolute": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", @@ -3085,10 +3686,13 @@ } }, "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } }, "is-arrayish": { "version": "0.2.1", @@ -3242,6 +3846,12 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, "is-negative-zero": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", @@ -3267,12 +3877,24 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, "is-path-inside": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", "dev": true }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3316,10 +3938,16 @@ "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", "dev": true }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-string": { @@ -3398,6 +4026,16 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "jed": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", @@ -3586,9 +4224,9 @@ } }, "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, "requires": { "json-buffer": "3.0.0" @@ -3617,38 +4255,6 @@ "dev": true, "requires": { "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "lcid": { @@ -3828,18 +4434,25 @@ } }, "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "semver": "^6.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -3876,14 +4489,11 @@ "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", "dev": true }, - "mdn-browser-compat-data": { - "version": "1.0.40", - "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-1.0.40.tgz", - "integrity": "sha512-yjM/OG0krZIgi+XrhJWS3CJ9UQuGM4FfjIUIt2f65er6qczkM+WjtNEv/9ZF9DxDs/2GR3SO6hDaZLplTRrrfw==", - "dev": true, - "requires": { - "extend": "3.0.2" - } + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true }, "mem": { "version": "5.1.1", @@ -3894,14 +4504,34 @@ "map-age-cleaner": "^0.1.3", "mimic-fn": "^2.1.0", "p-is-promise": "^2.1.0" + }, + "dependencies": { + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + } } }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4022,6 +4652,12 @@ } } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, "mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", @@ -4186,9 +4822,9 @@ "optional": true }, "nanoid": { - "version": "3.1.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", - "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==", + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, "nanomatch": { @@ -4230,6 +4866,12 @@ "dev": true, "optional": true }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -4297,10 +4939,26 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } }, "npm-run-path": { "version": "4.0.1", @@ -4373,13 +5031,13 @@ "dev": true }, "object-is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "object-keys": { @@ -4471,6 +5129,15 @@ } } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4531,9 +5198,9 @@ "dev": true }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "dev": true }, "p-defer": { @@ -4542,10 +5209,25 @@ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", "dev": true }, "p-limit": { @@ -4566,6 +5248,15 @@ "p-limit": "^2.2.0" } }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4584,6 +5275,81 @@ "semver": "^6.2.0" }, "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -4628,6 +5394,12 @@ "@types/node": "*" } }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -4666,6 +5438,12 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -4699,6 +5477,21 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "pino": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz", @@ -4711,14 +5504,6 @@ "pino-std-serializers": "^2.4.2", "quick-format-unescaped": "^4.0.1", "sonic-boom": "^1.0.2" - }, - "dependencies": { - "fast-redact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", - "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", - "dev": true - } } }, "pino-std-serializers": { @@ -4795,14 +5580,14 @@ "optional": true }, "postcss": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.1.tgz", - "integrity": "sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg==", + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.7.tgz", + "integrity": "sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==", "dev": true, "requires": { "colorette": "^1.2.1", "line-column": "^1.0.2", - "nanoid": "^3.1.12", + "nanoid": "^3.1.16", "source-map": "^0.6.1" } }, @@ -4818,6 +5603,12 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "dev": true + }, "probe-image-size": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz", @@ -4843,6 +5634,16 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -4875,17 +5676,46 @@ } }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "quick-format-unescaped": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", "dev": true }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -4979,14 +5809,18 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdir-glob": { @@ -5063,9 +5897,9 @@ "dev": true }, "registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dev": true, "requires": { "rc": "^1.2.8" @@ -5189,6 +6023,14 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } } }, "require-directory": { @@ -5261,11 +6103,20 @@ } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safe-compare": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-compare/-/safe-compare-1.1.4.tgz", + "integrity": "sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, "safe-json-stringify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", @@ -5295,6 +6146,15 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "requires": { + "commander": "^2.8.1" + } + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -5318,6 +6178,47 @@ } } }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -5349,6 +6250,12 @@ } } }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -5608,6 +6515,24 @@ "flatstr": "^1.0.12" } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5758,6 +6683,12 @@ } } }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, "stream-parser": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", @@ -5787,6 +6718,12 @@ "stream-to-array": "~2.3.0" } }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -5836,12 +6773,12 @@ } }, "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -5876,14 +6813,15 @@ "requires": { "first-chunk-stream": "^3.0.0", "strip-bom-buf": "^2.0.0" - }, - "dependencies": { - "first-chunk-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", - "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", - "dev": true - } + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" } }, "strip-final-newline": { @@ -5898,6 +6836,15 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5960,16 +6907,18 @@ } }, "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" } }, "term-size": { @@ -6008,6 +6957,12 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -6028,6 +6983,12 @@ } } }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -6079,6 +7040,12 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "tosource": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", @@ -6110,6 +7077,15 @@ "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", "dev": true }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "tsconfig-paths": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", @@ -6166,6 +7142,16 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -6181,6 +7167,16 @@ "is-typedarray": "^1.0.0" } }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -6209,6 +7205,12 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -6261,9 +7263,9 @@ } }, "upath": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.0.tgz", - "integrity": "sha512-ghi1XxsVYPOZPDsOZrfOJIwQU5I3JVYB3Q6IbBGn1KFeOa89i0nUy5tCEkY9pVm83U83qZ1QG40RQKGknllV4w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true }, "update-notifier": { @@ -6313,6 +7315,12 @@ "prepend-http": "^2.0.0" } }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -6326,6 +7334,12 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -6348,6 +7362,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -6372,9 +7392,9 @@ } }, "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, "optional": true, "requires": { @@ -6481,7 +7501,6 @@ "dev": true, "optional": true, "requires": { - "bindings": "^1.5.0", "nan": "^2.12.1" } }, @@ -6545,22 +7564,6 @@ "is-buffer": "^1.1.5" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", @@ -6573,23 +7576,6 @@ "readable-stream": "^2.0.2" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -6620,17 +7606,17 @@ } }, "web-ext": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.3.0.tgz", - "integrity": "sha512-LlOmVSddfBVHd9Liv3SL1Cvftr+YS6GNiKVIugDotUm3jVT9otHsw1SrCi11MGaGBw4g0s8ndjcbuttr1ZQjwg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.4.0.tgz", + "integrity": "sha512-95MVrsCRtmmu7YNTA8OconwTB7Y7rS6T5ABpv9c90A5tLfDV1+6/dRn8JhAMAi/UfIq0ZT5wklHwvRzDmD6cBA==", "dev": true, "requires": { - "@babel/polyfill": "7.11.5", - "@babel/runtime": "7.11.2", + "@babel/polyfill": "7.12.1", + "@babel/runtime": "7.12.5", "@cliqz-oss/firefox-client": "0.3.1", "@cliqz-oss/node-firefox-connect": "1.2.1", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.9.0", + "addons-linter": "2.12.0", "bunyan": "1.8.14", "camelcase": "6.0.0", "chrome-launcher": "0.13.4", @@ -6726,9 +7712,9 @@ "dev": true }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -6819,10 +7805,16 @@ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, "yargs": { @@ -6844,38 +7836,79 @@ "yargs-parser": "^18.1.2" }, "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -6905,14 +7938,27 @@ } }, "zip-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", - "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz", + "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", "dev": true, "requires": { "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.0", + "compress-commons": "^4.0.2", "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } } } diff --git a/package.json b/package.json index f546b3b..1b6c357 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", "rollup": "^2.33.1", - "web-ext": "^5.3.0", + "web-ext": "^5.4.0", "webextension-polyfill": "^0.7.0" }, "dependencies": {}, From 2977acd08a876e2bbc1a845b16524fdc27de671b Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Thu, 10 Dec 2020 09:58:42 -0800 Subject: [PATCH 036/399] reset version number --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 2641ba0..71271cc 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "author": "Mozilla", "manifest_version": 2, "name": "Rally Basic Study Template", - "version": "2.0", + "version": "0.6.0", "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", "applications": { From 0f5e82bb303abfbb0bbfb30c069074da0830db1e Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Thu, 10 Dec 2020 10:10:27 -0800 Subject: [PATCH 037/399] set version number and addon ID correctly for our current AMO account --- manifest.json | 4 ++-- package-lock.json | 2 +- package.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/manifest.json b/manifest.json index 71271cc..c8f9e3c 100644 --- a/manifest.json +++ b/manifest.json @@ -3,12 +3,12 @@ "author": "Mozilla", "manifest_version": 2, "name": "Rally Basic Study Template", - "version": "0.6.0", + "version": "0.3.0", "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", "applications": { "gecko": { - "id": "rally-basic-study@mozilla.org", + "id": "ion-basic-study@mozilla.org", "strict_min_version": "77.0a1" } }, diff --git a/package-lock.json b/package-lock.json index 9ff027e..73fcf4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "rally-study-template", + "name": "ion-basic-study", "version": "0.0.1", "lockfileVersion": 1, "requires": true, diff --git a/package.json b/package.json index 1b6c357..cd81779 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "rally-study-template", - "version": "0.0.1", + "name": "ion-basic-study", + "version": "0.3.0", "scripts": { "build": "rollup -c", "lint": "eslint . && web-ext lint", From b1c79e78355fb47a67b73486e099f6977bb63063 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 18 Dec 2020 19:53:24 +0100 Subject: [PATCH 038/399] Update Rally.js to version 0.0.4 --- package-lock.json | 26 ++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73fcf4f..457ba3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ion-basic-study", - "version": "0.0.1", + "version": "0.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -196,9 +196,9 @@ } }, "@mozilla/rally": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.0.3.tgz", - "integrity": "sha512-MULsa3KFe9dfupsYY5f6fvYf40zesnAORCJRE9ngMyiBkW97Gi0tJ7Y+HQoQkEXbT3udAGNOikrrD8KF34OJog==", + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.0.4.tgz", + "integrity": "sha512-IynnWLQ7IvhXJvbT+LzDT9i7RYeCs5gRR99G0TiOabvVNlT/FS74bk8w+tN6cZc4oum+vCzn0ZtpFzhi0OMZjA==", "dev": true }, "@rollup/plugin-commonjs": { @@ -1053,6 +1053,16 @@ "dev": true, "optional": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", @@ -2932,6 +2942,13 @@ "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -7501,6 +7518,7 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, diff --git a/package.json b/package.json index cd81779..1841066 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "start": "npm run build && web-ext run" }, "devDependencies": { - "@mozilla/rally": "0.0.3", + "@mozilla/rally": "0.0.4", "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", From a622b11236af28ece526213869f7ff068a7da03a Mon Sep 17 00:00:00 2001 From: hamilton Date: Tue, 22 Dec 2020 10:32:04 -0800 Subject: [PATCH 039/399] adds basic integration testing support; updates README.md --- .eslintrc.js | 16 + README.md | 8 +- manifest.json | 9 +- package-lock.json | 739 ++++++++++++++++++++++++++++++++++- package.json | 11 +- public/index.html | 25 ++ src/ExampleModule.js | 15 + src/background.js | 6 +- tests/integration/index.html | 5 + tests/integration/study.js | 73 ++++ tests/integration/utils.js | 51 +++ web-ext-config.js | 36 ++ 12 files changed, 973 insertions(+), 21 deletions(-) create mode 100644 public/index.html create mode 100644 src/ExampleModule.js create mode 100644 tests/integration/index.html create mode 100644 tests/integration/study.js create mode 100644 tests/integration/utils.js create mode 100644 web-ext-config.js diff --git a/.eslintrc.js b/.eslintrc.js index 6f39c57..a8a8d71 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -14,6 +14,21 @@ module.exports = { "plugin:import/warnings", "plugin:node/recommended", ], + overrides: [ + { + files: "tests/**", + env: { + mocha: true, + }, + extends: [ + "plugin:mocha/recommended", + ], + }, + { + files: ["*.svelte"], + processor: "svelte3/svelte3", + }, + ], globals: { ChromeUtils: false, ExtensionAPI: false, @@ -25,6 +40,7 @@ module.exports = { plugins: [ "import", "node", + "mocha" ], root: true, rules: { diff --git a/README.md b/README.md index 25f73c2..53f58bd 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,10 @@ The purpose of this repository is to provide a starting point to build a Rally s 1. Fork this repository. 2. Customize the [manifest.json](./manifest.json) file: - * change the `name`, `author` and `description` properties; + * change the `name`, `author`, and `description` properties; * swap the value of `application.gecko.id` (e.g. `ion-basic-study@mozilla.org`) with the one provided you by the Rally team; -3. Provide the encryption data to the `Rally` class constructor in the [src/background.js](./src/background.js) file: +3. Customize the [package.json](./package.json) file. At a bare minimum, change the `name`,`description`, `version`, `author`, `repository`, `bugs`, and `homepage` properties; +4. Provide the encryption data to the `Rally` class constructor in the [src/background.js](./src/background.js) file: ```js rally.initialize( @@ -67,10 +68,11 @@ And then be imported in another file with `const {myTest, otherFunc} = require(" ## Supported NPM commands The template comes with a set of pre-defined NPM commands (to run as `npm run `) to help study authors: -* `build`: assembles the final addon. The budler generated code is saved in the `dist/` directory. +* `build`: assembles the final addon. The bundler generated code is saved in the `dist/` directory. * `lint`: run linting on the add-on code. * `package`: packages the final archive containing the bundled addon, is saved in the `web-ext-artifacts` directory. * `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. +* `test-integration`: perform the provided integration test for the final addon. ## Manual testing in the browser To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `npm run start`. diff --git a/manifest.json b/manifest.json index c8f9e3c..ae50381 100644 --- a/manifest.json +++ b/manifest.json @@ -15,9 +15,12 @@ "permissions": [], + "options_ui": { + "page": "public/index.html", + "open_in_tab": true + }, + "background": { - "scripts": [ - "dist/background.js" - ] + "scripts": ["dist/background.js"] } } diff --git a/package-lock.json b/package-lock.json index 457ba3d..996a841 100644 --- a/package-lock.json +++ b/package-lock.json @@ -335,6 +335,12 @@ "@types/node": "*" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "JSONSelect": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", @@ -536,6 +542,32 @@ "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -639,7 +671,6 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, - "optional": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1050,8 +1081,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true + "dev": true }, "bindings": { "version": "1.5.0", @@ -1152,11 +1182,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "optional": true, "requires": { "fill-range": "^7.0.1" } }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1309,6 +1344,12 @@ "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", "dev": true }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1344,7 +1385,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, - "optional": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -1356,6 +1396,12 @@ "readdirp": "~3.5.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, "chrome-launcher": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", @@ -1718,6 +1764,15 @@ } } }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2057,6 +2112,12 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "dispensary": { "version": "0.59.0", "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.59.0.tgz", @@ -2185,6 +2246,15 @@ "nan": "^2.14.0" } }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -2474,6 +2544,16 @@ } } }, + "eslint-plugin-mocha": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.0.0.tgz", + "integrity": "sha512-n67etbWDz6NQM+HnTwZHyBwz/bLlYPOxUbw7bPuCyFujv7ZpaT/Vn6KTAbT02gf7nRljtYIjWcTxK/n8a57rQQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.1.0", + "ramda": "^0.27.1" + } + }, "eslint-plugin-no-unsanitized": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", @@ -2971,7 +3051,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "optional": true, "requires": { "to-regex-range": "^5.0.1" } @@ -3048,6 +3127,12 @@ "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", "dev": true }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -3177,6 +3262,15 @@ } } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3243,6 +3337,81 @@ } } }, + "geckodriver": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.21.1.tgz", + "integrity": "sha512-i5pYkYFEjTMkSCWh8agNFJPCUxVPr9I3JsRQ+bAypt73urXFnB73GQxDbJPKzELUeLhbQybhNKNlKjxfgS1yAA==", + "dev": true, + "requires": { + "adm-zip": "0.4.16", + "bluebird": "3.7.2", + "got": "5.6.0", + "https-proxy-agent": "5.0.0", + "tar": "6.0.2" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "got": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", + "integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=", + "dev": true, + "requires": { + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-plain-obj": "^1.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^2.0.0", + "unzip-response": "^1.0.0", + "url-parse-lax": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "timed-out": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", + "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + } + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3377,6 +3546,12 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -3507,6 +3682,12 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -3578,6 +3759,33 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -3605,6 +3813,12 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", @@ -3722,7 +3936,6 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "optional": true, "requires": { "binary-extensions": "^2.0.0" } @@ -3885,8 +4098,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true + "dev": true }, "is-obj": { "version": "2.0.0", @@ -3931,6 +4143,12 @@ } } }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, "is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -4293,6 +4511,15 @@ "type-check": "~0.4.0" } }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, "lighthouse-logger": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", @@ -4435,6 +4662,15 @@ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "dev": true }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -4717,6 +4953,25 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -4746,6 +5001,280 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.4.3", + "debug": "4.2.0", + "diff": "4.0.2", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.14.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "nanoid": "3.1.12", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "7.2.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.2", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", + "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", @@ -4929,6 +5458,12 @@ } } }, + "node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5715,6 +6250,21 @@ "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", "dev": true }, + "ramda": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", + "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -5753,6 +6303,16 @@ } } }, + "read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -5854,7 +6414,6 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, - "optional": true, "requires": { "picomatch": "^2.2.1" } @@ -6172,6 +6731,50 @@ "commander": "^2.8.1" } }, + "selenium-webdriver": { + "version": "4.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.8.tgz", + "integrity": "sha512-yPSaiWySZTEbxuuWQMDqdXh3H3N4Aiw/bSUjpkKMPWWCysfPqUncrq6FewBqdxWD1wQKzy5yWaQMGsgTY/0rCQ==", + "dev": true, + "requires": { + "jszip": "^3.5.0", + "rimraf": "^2.7.1", + "tmp": "^0.1.0", + "ws": "^7.3.1" + }, + "dependencies": { + "jszip": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "requires": { + "rimraf": "^2.6.3" + } + } + } + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -6224,6 +6827,15 @@ } } }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", @@ -6242,6 +6854,12 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -6923,6 +7541,20 @@ } } }, + "tar": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", + "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.0", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, "tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", @@ -7052,7 +7684,6 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "optional": true, "requires": { "is-number": "^7.0.0" } @@ -7279,6 +7910,12 @@ } } }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "dev": true + }, "upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -7708,6 +8345,48 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -7729,6 +8408,12 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "workerpool": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", + "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -7835,6 +8520,12 @@ "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -7927,6 +8618,26 @@ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -7937,6 +8648,12 @@ "fd-slicer": "~1.1.0" } }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, "zip-dir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", diff --git a/package.json b/package.json index 1841066..0ac70c4 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,11 @@ "name": "ion-basic-study", "version": "0.3.0", "scripts": { - "build": "rollup -c", + "build": "rollup -c && web-ext build --overwrite-dest && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi", "lint": "eslint . && web-ext lint", "package": "npm run build && web-ext build --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", - "start": "npm run build && web-ext run" + "start": "npm run build && web-ext run", + "test-integration": "npm run build && mocha --timeout 30000 \"./tests/integration/*.js\"" }, "devDependencies": { "@mozilla/rally": "0.0.4", @@ -14,9 +15,13 @@ "eslint": "^7.12.1", "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-mocha": "^8.0.0", "rollup": "^2.33.1", "web-ext": "^5.4.0", - "webextension-polyfill": "^0.7.0" + "webextension-polyfill": "^0.7.0", + "selenium-webdriver": "^4.0.0-alpha.7", + "geckodriver": "^1.21.0", + "mocha": "^8.1.3" }, "dependencies": {}, "engines": { diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..c98d52d --- /dev/null +++ b/public/index.html @@ -0,0 +1,25 @@ + + + + + + Rally Study Template + + + +
+

Rally Study Template

+

This is a template for a Rally study options page.

+
+ + diff --git a/src/ExampleModule.js b/src/ExampleModule.js new file mode 100644 index 0000000..65fdb78 --- /dev/null +++ b/src/ExampleModule.js @@ -0,0 +1,15 @@ +const OPTIONS_PAGE_PATH = "public/index.html"; + +module.exports = { + initialize() { + browser.runtime.onInstalled.addListener(async ({ reason }) => { + if (reason !== "install") { + // We're only showing this when the addon is installed. + return; + } + browser.runtime.openOptionsPage().catch(e => { + console.error(`Study Add-On - Unable to open the control panel`, e); + }); + }); + }, + }; \ No newline at end of file diff --git a/src/background.js b/src/background.js index 244b687..52faea0 100644 --- a/src/background.js +++ b/src/background.js @@ -3,11 +3,15 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ window.browser = require("webextension-polyfill"); + const Rally = require("@mozilla/rally"); +const rally = new Rally(); // ... Add more implementation here! -const rally = new Rally(); +const ExampleModule = require('./ExampleModule'); +ExampleModule.initialize(); + rally.initialize( // A sample key id used for encrypting data. "sample-invalid-key-id", diff --git a/tests/integration/index.html b/tests/integration/index.html new file mode 100644 index 0000000..8eca734 --- /dev/null +++ b/tests/integration/index.html @@ -0,0 +1,5 @@ + + + Installation Test + Install + diff --git a/tests/integration/study.js b/tests/integration/study.js new file mode 100644 index 0000000..a68dee4 --- /dev/null +++ b/tests/integration/study.js @@ -0,0 +1,73 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const utils = require("./utils.js"); +const { By, until } = require("selenium-webdriver"); +const firefox = require("selenium-webdriver/firefox"); + +// The number of milliseconds to wait for some +// property to change in tests. This should be +// a long time to account for slow CI. +const WAIT_FOR_PROPERTY = 5000; + +/** +* Find the element and perform an action on it. +* +* @param driver +* The Selenium driver to use. +* @param element +* The element to look for and execute actions on. +* @param action +* A function in the form `e => {}` that will be called +* and receive the element once ready. +*/ +async function findAndAct(driver, element, action) { + await driver.wait(until.elementLocated(element), WAIT_FOR_PROPERTY); + await driver.findElement(element).then(e => action(e)); +} + +describe("Study Template integration test example", function () { + // eslint-disable-next-line mocha/no-hooks-for-single-case + beforeEach(async function () { + this.driver = await utils.getFirefoxDriver(true); + }); + + // eslint-disable-next-line mocha/no-hooks-for-single-case + afterEach(async function () { + await this.driver.quit(); + }); + + it("successfully opens the study template options page on installation", async function () { + await this.driver.get(`file:///${__dirname}/index.html`); + await this.driver.wait(until.titleIs("Installation Test"), WAIT_FOR_PROPERTY); + await findAndAct(this.driver, By.id("install"), e => e.click()); + // switch to browser UI context to interact with Firefox add-on install prompts. + await this.driver.setContext(firefox.Context.CHROME); + await findAndAct(this.driver, By.css(`[label="Add"]`), e => e.click()); + await findAndAct(this.driver, By.css(`[label="Okay, Got It"]`), e => e.click()); + // Switch back to web content context. + await this.driver.setContext(firefox.Context.CONTENT); + + // We expect the extension to load its options page in a new tab. + // We also expect the study extension to show the Rally installation page + // since the Rally Core Add-On is not installed. + await this.driver.wait(async () => { + return (await this.driver.getAllWindowHandles()).length === 3; + }, WAIT_FOR_PROPERTY); + + // Selenium is still focused on the latest tab (which is the Rally Core Add-On installation page). + // Switch to the options page to ensure it exists. + const tabs = (await this.driver.getAllWindowHandles()); + // this should be the options page. + const newTab = tabs[1]; + + await this.driver.switchTo().window(newTab); + + // Let's wait until the page is fully loaded and the title matches. + await this.driver.wait( + until.titleIs("Rally Study Template"), + WAIT_FOR_PROPERTY + ); + }); +}); diff --git a/tests/integration/utils.js b/tests/integration/utils.js new file mode 100644 index 0000000..f4bd6a4 --- /dev/null +++ b/tests/integration/utils.js @@ -0,0 +1,51 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + const { Builder } = require("selenium-webdriver"); + const firefox = require("selenium-webdriver/firefox"); + const fs = require("fs"); + + /** + * Get a Selenium driver for using the Firefox browser. + * + * @param {Boolean} headless + * Whether or not to run Firefox in headless mode. + * @returns {WebDriver} a WebDriver instance to control Firefox. + */ + async function getFirefoxDriver(headless) { + const firefoxOptions = new firefox.Options(); + firefoxOptions.setPreference("xpinstall.signatures.required", false); + firefoxOptions.setPreference("extensions.experiments.enabled", true); + + if (headless) { + firefoxOptions.headless(); + } + + if (process.platform === "linux") { + // Look for the Firefox executable in different locations. + const FIREFOX_PATHS = [ + "/usr/bin/firefox-trunk", + "/usr/bin/firefox", + ]; + + for (const path of FIREFOX_PATHS) { + if (fs.existsSync(path)) { + firefoxOptions.setBinary(path); + break; + } + } + } else if (process.platform === "darwin") { + firefoxOptions.setBinary( + "/Applications/Firefox Nightly.app/Contents/MacOS/firefox" + ); + } + + return await new Builder() + .forBrowser("firefox") + .setFirefoxOptions(firefoxOptions) + .build(); + } + + module.exports.getFirefoxDriver = getFirefoxDriver; + \ No newline at end of file diff --git a/web-ext-config.js b/web-ext-config.js new file mode 100644 index 0000000..38ad4f4 --- /dev/null +++ b/web-ext-config.js @@ -0,0 +1,36 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + module.exports = { + // Global options: + verbose: true, + // Command options: + build: { + overwriteDest: true, + }, + run: { + firefox: "nightly", + pref: ["extensions.experiments.enabled=true"], + }, + ignoreFiles: [ + "bin", + "docs", + "scripts", + "src", + "stories", + "support", + "tests", + "CHANGELOG.md", + "CODE_OF_CONDUCT.md", + "copyright.txt", + "LICENSE", + "package-lock.json", + "package.json", + "README.md", + "rollup.config.*", + "web-ext-config.js", + "public/**/*.map", + ], + }; + \ No newline at end of file From f0536369cb23b65d185028483769441499f33c7e Mon Sep 17 00:00:00 2001 From: hamilton Date: Tue, 22 Dec 2020 10:34:16 -0800 Subject: [PATCH 040/399] removes svelte boilerplate from eslintrc --- .eslintrc.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index a8a8d71..bc976e4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -24,10 +24,6 @@ module.exports = { "plugin:mocha/recommended", ], }, - { - files: ["*.svelte"], - processor: "svelte3/svelte3", - }, ], globals: { ChromeUtils: false, From 5635f2bbfc0fa0e182237ba1573647c90ef10f64 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 8 Jan 2021 12:01:29 +0100 Subject: [PATCH 041/399] Remove unused OPTIONS_PAGE_PATH and add the license This makes the linter happier, because OPTIONS_PAGE_PATH was not being used. --- src/ExampleModule.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ExampleModule.js b/src/ExampleModule.js index 65fdb78..6f17ec9 100644 --- a/src/ExampleModule.js +++ b/src/ExampleModule.js @@ -1,4 +1,6 @@ -const OPTIONS_PAGE_PATH = "public/index.html"; +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ module.exports = { initialize() { From b2962a5bf40e8f872bdc4f7bcfac248d83165a46 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 8 Jan 2021 12:16:22 +0100 Subject: [PATCH 042/399] Restore the semantics of the provided NPM commands --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 0ac70c4..4538580 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,11 @@ "name": "ion-basic-study", "version": "0.3.0", "scripts": { - "build": "rollup -c && web-ext build --overwrite-dest && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi", + "build": "rollup -c", "lint": "eslint . && web-ext lint", - "package": "npm run build && web-ext build --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", + "package": "npm run build && web-ext build --overwrite-dest --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", "start": "npm run build && web-ext run", - "test-integration": "npm run build && mocha --timeout 30000 \"./tests/integration/*.js\"" + "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"" }, "devDependencies": { "@mozilla/rally": "0.0.4", From dd16d5c1df26b8e1c082bba480af1e964573b7ae Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 8 Jan 2021 12:31:40 +0100 Subject: [PATCH 043/399] Fix spacing in the test files The utils.js file had an extra leading whitespace on every line. --- tests/integration/study.js | 6 +-- tests/integration/utils.js | 93 +++++++++++++++++++------------------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/tests/integration/study.js b/tests/integration/study.js index a68dee4..70972aa 100644 --- a/tests/integration/study.js +++ b/tests/integration/study.js @@ -61,10 +61,10 @@ describe("Study Template integration test example", function () { const tabs = (await this.driver.getAllWindowHandles()); // this should be the options page. const newTab = tabs[1]; - + await this.driver.switchTo().window(newTab); - - // Let's wait until the page is fully loaded and the title matches. + + // Let's wait until the page is fully loaded and the title matches. await this.driver.wait( until.titleIs("Rally Study Template"), WAIT_FOR_PROPERTY diff --git a/tests/integration/utils.js b/tests/integration/utils.js index f4bd6a4..59eeb50 100644 --- a/tests/integration/utils.js +++ b/tests/integration/utils.js @@ -2,50 +2,49 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - const { Builder } = require("selenium-webdriver"); - const firefox = require("selenium-webdriver/firefox"); - const fs = require("fs"); - - /** - * Get a Selenium driver for using the Firefox browser. - * - * @param {Boolean} headless - * Whether or not to run Firefox in headless mode. - * @returns {WebDriver} a WebDriver instance to control Firefox. - */ - async function getFirefoxDriver(headless) { - const firefoxOptions = new firefox.Options(); - firefoxOptions.setPreference("xpinstall.signatures.required", false); - firefoxOptions.setPreference("extensions.experiments.enabled", true); - - if (headless) { - firefoxOptions.headless(); - } - - if (process.platform === "linux") { - // Look for the Firefox executable in different locations. - const FIREFOX_PATHS = [ - "/usr/bin/firefox-trunk", - "/usr/bin/firefox", - ]; - - for (const path of FIREFOX_PATHS) { - if (fs.existsSync(path)) { - firefoxOptions.setBinary(path); - break; - } - } - } else if (process.platform === "darwin") { - firefoxOptions.setBinary( - "/Applications/Firefox Nightly.app/Contents/MacOS/firefox" - ); - } - - return await new Builder() - .forBrowser("firefox") - .setFirefoxOptions(firefoxOptions) - .build(); - } - - module.exports.getFirefoxDriver = getFirefoxDriver; - \ No newline at end of file +const { Builder } = require("selenium-webdriver"); +const firefox = require("selenium-webdriver/firefox"); +const fs = require("fs"); + +/** + * Get a Selenium driver for using the Firefox browser. + * + * @param {Boolean} headless + * Whether or not to run Firefox in headless mode. + * @returns {WebDriver} a WebDriver instance to control Firefox. + */ +async function getFirefoxDriver(headless) { + const firefoxOptions = new firefox.Options(); + firefoxOptions.setPreference("xpinstall.signatures.required", false); + firefoxOptions.setPreference("extensions.experiments.enabled", true); + + if (headless) { + firefoxOptions.headless(); + } + + if (process.platform === "linux") { + // Look for the Firefox executable in different locations. + const FIREFOX_PATHS = [ + "/usr/bin/firefox-trunk", + "/usr/bin/firefox", + ]; + + for (const path of FIREFOX_PATHS) { + if (fs.existsSync(path)) { + firefoxOptions.setBinary(path); + break; + } + } + } else if (process.platform === "darwin") { + firefoxOptions.setBinary( + "/Applications/Firefox Nightly.app/Contents/MacOS/firefox" + ); + } + + return await new Builder() + .forBrowser("firefox") + .setFirefoxOptions(firefoxOptions) + .build(); +} + +module.exports.getFirefoxDriver = getFirefoxDriver; From cfbf94d1db37db3f959b1086d025859d509e4543 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 8 Jan 2021 12:32:17 +0100 Subject: [PATCH 044/399] Add the no-multiple-spaces rule to eslintrc --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index bc976e4..690d29e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -47,6 +47,7 @@ module.exports = { "node/no-unpublished-require": "off", "node/no-unsupported-features/es-syntax": "off", + "no-multi-spaces": "error", "no-unused-vars": [ "error", { vars: "all", args: "none", ignoreRestSiblings: false } ], "no-var": "warn", "prefer-const": "warn", From 7ee7aa6a7f4a0e65e09f4c7e7e8d56375db9ffcf Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 8 Jan 2021 12:35:05 +0100 Subject: [PATCH 045/399] Fix the links in package.json --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4538580..00f6f96 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "ion-basic-study", - "version": "0.3.0", + "name": "rally-study-template", + "version": "0.3.1", "scripts": { "build": "rollup -c", "lint": "eslint . && web-ext lint", @@ -30,14 +30,14 @@ "description": "This a basic template for a Rally study.", "repository": { "type": "git", - "url": "git+https://github.com/mozilla-ion/ion-basic-study.git" + "url": "git+https://github.com/mozilla-rally/study-template.git" }, "keywords": [], "author": "Mozilla", "license": "MPL-2.0", "private": true, "bugs": { - "url": "https://github.com/mozilla-ion/ion-basic-study/issues" + "url": "https://github.com/mozilla-rally/study-template/issues" }, - "homepage": "https://github.com/mozilla-ion/ion-basic-study#readme" + "homepage": "https://github.com/mozilla-rally/study-template#readme" } From 06e4d11a67545f70fff99a26b0e27aa0f6e88d18 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Fri, 8 Jan 2021 12:35:16 +0100 Subject: [PATCH 046/399] Bump the version of the template to 0.3.1 --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index ae50381..2e901f5 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "author": "Mozilla", "manifest_version": 2, "name": "Rally Basic Study Template", - "version": "0.3.0", + "version": "0.3.1", "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", "applications": { From 0b5dec77b6cff3a196f22c6adae43281580e65d8 Mon Sep 17 00:00:00 2001 From: hamilton Date: Fri, 22 Jan 2021 08:01:27 -0800 Subject: [PATCH 047/399] removes options page, simplifies the integration test; updates README.md --- README.md | 7 ++++++- manifest.json | 5 ----- public/index.html | 25 ------------------------- src/ExampleModule.js | 10 +--------- tests/integration/study.js | 25 +------------------------ 5 files changed, 8 insertions(+), 64 deletions(-) delete mode 100644 public/index.html diff --git a/README.md b/README.md index 53f58bd..0e8f2ff 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ # Mozilla Rally study template. -The purpose of this repository is to provide a starting point to build a Rally study. +The purpose of this repository is to provide a starting point to build a Rally study. It contains: +1. an example [`manifest.json'](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) file. +2. an example background and content script in `src`. +3. a rollup config file that builds the files needed for the web extension using the source files in `src/` (the background & content scripts). +4. an example integration test that launches a browser & installs the add-on. +5. a `web-ext-config.js` file & an eslint configuration. ## Getting started 1. Fork this repository. diff --git a/manifest.json b/manifest.json index 2e901f5..558705b 100644 --- a/manifest.json +++ b/manifest.json @@ -15,11 +15,6 @@ "permissions": [], - "options_ui": { - "page": "public/index.html", - "open_in_tab": true - }, - "background": { "scripts": ["dist/background.js"] } diff --git a/public/index.html b/public/index.html deleted file mode 100644 index c98d52d..0000000 --- a/public/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - Rally Study Template - - - -
-

Rally Study Template

-

This is a template for a Rally study options page.

-
- - diff --git a/src/ExampleModule.js b/src/ExampleModule.js index 6f17ec9..b50dbda 100644 --- a/src/ExampleModule.js +++ b/src/ExampleModule.js @@ -4,14 +4,6 @@ module.exports = { initialize() { - browser.runtime.onInstalled.addListener(async ({ reason }) => { - if (reason !== "install") { - // We're only showing this when the addon is installed. - return; - } - browser.runtime.openOptionsPage().catch(e => { - console.error(`Study Add-On - Unable to open the control panel`, e); - }); - }); + console.log('example module initialized.'); }, }; \ No newline at end of file diff --git a/tests/integration/study.js b/tests/integration/study.js index 70972aa..afb6693 100644 --- a/tests/integration/study.js +++ b/tests/integration/study.js @@ -30,7 +30,7 @@ async function findAndAct(driver, element, action) { describe("Study Template integration test example", function () { // eslint-disable-next-line mocha/no-hooks-for-single-case beforeEach(async function () { - this.driver = await utils.getFirefoxDriver(true); + this.driver = await utils.getFirefoxDriver(false); }); // eslint-disable-next-line mocha/no-hooks-for-single-case @@ -46,28 +46,5 @@ describe("Study Template integration test example", function () { await this.driver.setContext(firefox.Context.CHROME); await findAndAct(this.driver, By.css(`[label="Add"]`), e => e.click()); await findAndAct(this.driver, By.css(`[label="Okay, Got It"]`), e => e.click()); - // Switch back to web content context. - await this.driver.setContext(firefox.Context.CONTENT); - - // We expect the extension to load its options page in a new tab. - // We also expect the study extension to show the Rally installation page - // since the Rally Core Add-On is not installed. - await this.driver.wait(async () => { - return (await this.driver.getAllWindowHandles()).length === 3; - }, WAIT_FOR_PROPERTY); - - // Selenium is still focused on the latest tab (which is the Rally Core Add-On installation page). - // Switch to the options page to ensure it exists. - const tabs = (await this.driver.getAllWindowHandles()); - // this should be the options page. - const newTab = tabs[1]; - - await this.driver.switchTo().window(newTab); - - // Let's wait until the page is fully loaded and the title matches. - await this.driver.wait( - until.titleIs("Rally Study Template"), - WAIT_FOR_PROPERTY - ); }); }); From 36ed3e819101558ae257cfad5cc6747565593860 Mon Sep 17 00:00:00 2001 From: hamilton Date: Fri, 22 Jan 2021 08:09:53 -0800 Subject: [PATCH 048/399] reverts selenium to headless mode --- tests/integration/study.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/study.js b/tests/integration/study.js index afb6693..5b07f7b 100644 --- a/tests/integration/study.js +++ b/tests/integration/study.js @@ -30,7 +30,7 @@ async function findAndAct(driver, element, action) { describe("Study Template integration test example", function () { // eslint-disable-next-line mocha/no-hooks-for-single-case beforeEach(async function () { - this.driver = await utils.getFirefoxDriver(false); + this.driver = await utils.getFirefoxDriver(true); }); // eslint-disable-next-line mocha/no-hooks-for-single-case From 48e20806a23636ca57af69303fab728f1139cfef Mon Sep 17 00:00:00 2001 From: hamilton Date: Fri, 22 Jan 2021 08:14:30 -0800 Subject: [PATCH 049/399] updates integration test description --- tests/integration/study.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/study.js b/tests/integration/study.js index 5b07f7b..902639b 100644 --- a/tests/integration/study.js +++ b/tests/integration/study.js @@ -38,7 +38,7 @@ describe("Study Template integration test example", function () { await this.driver.quit(); }); - it("successfully opens the study template options page on installation", async function () { + it("successfully installs the study", async function () { await this.driver.get(`file:///${__dirname}/index.html`); await this.driver.wait(until.titleIs("Installation Test"), WAIT_FOR_PROPERTY); await findAndAct(this.driver, By.id("install"), e => e.click()); From 30b5dec380e595e078ad2447094dc813d8932272 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 25 Jan 2021 09:33:59 +0100 Subject: [PATCH 050/399] Update dev command --- package-lock.json | 205 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 17 ++-- 2 files changed, 214 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 996a841..788bfd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "ion-basic-study", - "version": "0.3.0", + "name": "rally-study-template", + "version": "0.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4767,6 +4767,12 @@ } } }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -5430,6 +5436,12 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -5512,6 +5524,178 @@ } } }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6023,6 +6207,12 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -7387,6 +7577,17 @@ } } }, + "string.prototype.padend": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", + "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, "string.prototype.trimend": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", diff --git a/package.json b/package.json index 00f6f96..7932385 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,14 @@ "version": "0.3.1", "scripts": { "build": "rollup -c", + "dev": "", "lint": "eslint . && web-ext lint", "package": "npm run build && web-ext build --overwrite-dest --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", "start": "npm run build && web-ext run", - "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"" + "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"", + "watch": "npm-run-all --parallel watch-addon watch-webext", + "watch-addon": "rollup -c -w", + "watch-webext": "web-ext run --watch-file dist/background.js" }, "devDependencies": { "@mozilla/rally": "0.0.4", @@ -14,14 +18,15 @@ "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", "eslint-plugin-mocha": "^8.0.0", + "eslint-plugin-node": "^11.1.0", + "geckodriver": "^1.21.0", + "mocha": "^8.1.3", + "npm-run-all": "^4.1.5", "rollup": "^2.33.1", - "web-ext": "^5.4.0", - "webextension-polyfill": "^0.7.0", "selenium-webdriver": "^4.0.0-alpha.7", - "geckodriver": "^1.21.0", - "mocha": "^8.1.3" + "web-ext": "^5.4.0", + "webextension-polyfill": "^0.7.0" }, "dependencies": {}, "engines": { From 226aa5003c3c21153799d8974b4b52878877ed27 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 25 Jan 2021 09:36:43 +0100 Subject: [PATCH 051/399] Bump Rally.js to version 0.1.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 788bfd3..973e008 100644 --- a/package-lock.json +++ b/package-lock.json @@ -196,9 +196,9 @@ } }, "@mozilla/rally": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.0.4.tgz", - "integrity": "sha512-IynnWLQ7IvhXJvbT+LzDT9i7RYeCs5gRR99G0TiOabvVNlT/FS74bk8w+tN6cZc4oum+vCzn0ZtpFzhi0OMZjA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.1.0.tgz", + "integrity": "sha512-v7KcL/9QhIHFWkCTHjSvCeRHAQKUQXawkTRluSQNtHdV7vM/lJf5r9XhMMMeHDfvvorwouGVLsisQbapy0XZ3Q==", "dev": true }, "@rollup/plugin-commonjs": { diff --git a/package.json b/package.json index 7932385..ecab8d1 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "watch-webext": "web-ext run --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "0.0.4", + "@mozilla/rally": "^0.1.0", "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "eslint": "^7.12.1", From 3e3d64c63342c811fb213257fb045199932f96b3 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 25 Jan 2021 10:14:00 +0100 Subject: [PATCH 052/399] Provide a 'config-enable-developer-mode' build option This allows the build script to inform Rally.js that the study wants to run in Developer Mode. In this mode, the communication problems with the Core Add-on are ignored and no data is submitted. --- package-lock.json | 10 ++++++++++ package.json | 9 +++++---- rollup.config.js | 12 +++++++++--- src/background.js | 5 ++++- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 973e008..baa39ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -230,6 +230,16 @@ "resolve": "^1.17.0" } }, + "@rollup/plugin-replace": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", + "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, "@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", diff --git a/package.json b/package.json index ecab8d1..cc562d4 100644 --- a/package.json +++ b/package.json @@ -3,19 +3,20 @@ "version": "0.3.1", "scripts": { "build": "rollup -c", - "dev": "", + "dev": "rollup -c --config-enable-developer-mode", "lint": "eslint . && web-ext lint", "package": "npm run build && web-ext build --overwrite-dest --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", "start": "npm run build && web-ext run", "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"", - "watch": "npm-run-all --parallel watch-addon watch-webext", - "watch-addon": "rollup -c -w", - "watch-webext": "web-ext run --watch-file dist/background.js" + "watch": "npm-run-all --parallel watch-raw watch-bundled", + "watch-raw": "npm run dev -w", + "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { "@mozilla/rally": "^0.1.0", "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-replace": "^2.3.4", "eslint": "^7.12.1", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", diff --git a/rollup.config.js b/rollup.config.js index 15c6bce..fd27644 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -3,16 +3,22 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import commonjs from "@rollup/plugin-commonjs"; +import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; -export default () => { - return [ +export default (cliArgs) => [ { input: "src/background.js", output: { file: "dist/background.js" }, plugins: [ + replace({ + // In Developer Mode, the study does not submit data and + // gracefully handles communication errors with the Core + // Add-on. + __ENABLE_DEVELOPER_MODE__: !!cliArgs["config-enable-developer-mode"], + }), resolve({ browser: true, }), @@ -31,4 +37,4 @@ export default () => { commonjs(), ], }, -]}; +]; diff --git a/src/background.js b/src/background.js index 52faea0..c607ecc 100644 --- a/src/background.js +++ b/src/background.js @@ -22,5 +22,8 @@ rally.initialize( "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", "kid":"Public key used in JWS spec Appendix A.3 example" - } + }, + // The following constant is automatically provided by + // the build system. + __ENABLE_DEVELOPER_MODE__, ); From 8f0e809d9737905248b65d21778c4d817378b807 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 25 Jan 2021 10:43:50 +0100 Subject: [PATCH 053/399] Fix linting --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index 690d29e..b5302c3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,6 +28,7 @@ module.exports = { globals: { ChromeUtils: false, ExtensionAPI: false, + __ENABLE_DEVELOPER_MODE__: false, }, parserOptions: { ecmaVersion: 2021, From d7a6518cccf513f0ab44a0db3b4d47e15a38f4ab Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 25 Jan 2021 10:48:04 +0100 Subject: [PATCH 054/399] Update usage documentation --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 53f58bd..a5bc845 100644 --- a/README.md +++ b/README.md @@ -69,10 +69,12 @@ And then be imported in another file with `const {myTest, otherFunc} = require(" The template comes with a set of pre-defined NPM commands (to run as `npm run `) to help study authors: * `build`: assembles the final addon. The bundler generated code is saved in the `dist/` directory. +* `dev`: assembles the addon in _developer mode_. In this mode data doesn't get submitted but, instead, is dumped to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). This mode allows for a smoother development process. * `lint`: run linting on the add-on code. * `package`: packages the final archive containing the bundled addon, is saved in the `web-ext-artifacts` directory. * `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. * `test-integration`: perform the provided integration test for the final addon. +* `watch`: assembles the addon in _developer mode_, then runs the browser and watches the source code for changes, automatically reloading the extension when needed. ## Manual testing in the browser To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `npm run start`. From 086e0ef2cec00222f7f5386b0a2f839b4db69277 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 26 Jan 2021 12:12:43 +0100 Subject: [PATCH 055/399] Update Rollup to version 2.38.0 This version fixes the watch mode. --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index baa39ee..77d7ece 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6870,9 +6870,9 @@ } }, "rollup": { - "version": "2.33.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz", - "integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==", + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.0.tgz", + "integrity": "sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw==", "dev": true, "requires": { "fsevents": "~2.1.2" diff --git a/package.json b/package.json index cc562d4..13d2fa6 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.21.0", "mocha": "^8.1.3", "npm-run-all": "^4.1.5", - "rollup": "^2.33.1", + "rollup": "^2.38.0", "selenium-webdriver": "^4.0.0-alpha.7", "web-ext": "^5.4.0", "webextension-polyfill": "^0.7.0" From 70c6d3e86ad6a418e6d2a2a97741556b9fb21681 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 26 Jan 2021 12:14:50 +0100 Subject: [PATCH 056/399] Update web-ext to 5.5.0 --- package-lock.json | 1530 +++++++-------------------------------------- package.json | 2 +- 2 files changed, 225 insertions(+), 1307 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77d7ece..518622e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,9 +187,9 @@ } }, "@mdn/browser-compat-data": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.5.tgz", - "integrity": "sha512-JTosoRJrq5E8QYLwPfqB22zZxyBzUEx+1ooOPMcrFYgWplOeS8K8B6VD3WHD+9XV+R1X5vimruSL9ALYuxfD+A==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz", + "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==", "dev": true, "requires": { "extend": "3.0.2" @@ -260,9 +260,9 @@ } }, "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true }, "@szmarczak/http-timer": { @@ -274,41 +274,12 @@ "defer-to-connect": "^1.0.1" } }, - "@types/decompress": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.3.tgz", - "integrity": "sha512-W24e3Ycz1UZPgr1ZEDHlK4XnvOr+CpJH3qNsFeqXwwlW/9END9gxn3oJSsp7gYdiQxrXUHwUUd3xuzVz37MrZQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/download": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@types/download/-/download-6.2.4.tgz", - "integrity": "sha512-Lo5dy3ai6LNnbL663sgdzqL1eib11u1yKH6w3v3IXEOO4kRfQpMn1qWUTaumcHLACjFp1RcBx9tUXEvJoR3vcA==", - "dev": true, - "requires": { - "@types/decompress": "*", - "@types/got": "^8", - "@types/node": "*" - } - }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "@types/got": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", - "integrity": "sha512-AaXSrIF99SjjtPVNmCmYb388HML+PKEJb/xmj4SbL2ZO0hHuETZZzyDIKfOqaEoAHZEuX4sC+FRFrHYJoIby6A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -357,16 +328,6 @@ "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", "dev": true }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -380,14 +341,14 @@ "dev": true }, "addons-linter": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.12.0.tgz", - "integrity": "sha512-Kv2Joa81UfxCWHYK13G9ZNKb/z5cJP1TlshCh9vA2dBH55szabIN+yIxujgNCIg2/k/wDya3OihBmyFNkFmFkw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.13.1.tgz", + "integrity": "sha512-OWMuABpZRNeru38oOjn7QYOF0JOXJQXG9c3r4ILTRwTBeSu3LtfgCh9/7zLVgTYPbTs7Qy6h23u4Sel65uSnUQ==", "dev": true, "requires": { "@babel/runtime": "7.12.5", - "@mdn/browser-compat-data": "2.0.5", - "addons-scanner-utils": "3.0.0", + "@mdn/browser-compat-data": "2.0.7", + "addons-scanner-utils": "4.0.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", @@ -396,7 +357,7 @@ "common-tags": "1.8.0", "deepmerge": "4.2.2", "dispensary": "0.59.0", - "eslint": "7.13.0", + "eslint": "7.14.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", "espree": "7.3.0", @@ -408,7 +369,7 @@ "jed": "1.1.1", "os-locale": "5.0.0", "pino": "6.7.0", - "postcss": "8.1.7", + "postcss": "8.1.10", "probe-image-size": "5.0.0", "relaxed-json": "1.0.3", "semver": "7.3.2", @@ -416,7 +377,7 @@ "tosource": "1.0.0", "upath": "2.0.1", "whatwg-url": "8.4.0", - "yargs": "16.1.0", + "yargs": "16.1.1", "yauzl": "2.10.0" }, "dependencies": { @@ -436,9 +397,9 @@ } }, "eslint": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", - "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", + "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -503,9 +464,9 @@ } }, "yargs": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", - "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", + "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -513,37 +474,24 @@ "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", - "y18n": "^5.0.2", + "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } } } }, "addons-scanner-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-3.0.0.tgz", - "integrity": "sha512-bX8Sx5iwvG9bHZrfP4xv+3xFU93Mk6WnBmIHm+ep4DEiqUunRRpbrs7uEgAnlWnqC46VnrFsOJdCB/MY+pHG1g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.0.0.tgz", + "integrity": "sha512-+BfePzqoo/7Nhum9LONGsga2xhNJYb+6k6j819pzcd2tqaaqDUJu+3lz4CQQYFcD8QoolB3ksfZcCPymleFq0A==", "dev": true, "requires": { - "@types/download": "6.2.4", "@types/yauzl": "2.9.1", - "body-parser": "1.19.0", "common-tags": "1.8.0", - "download": "8.0.0", - "express": "4.17.1", "first-chunk-stream": "3.0.0", - "safe-compare": "1.1.4", "strip-bom-stream": "4.0.0", - "upath": "2.0.0", + "upath": "2.0.1", "yauzl": "2.10.0" - }, - "dependencies": { - "upath": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.0.tgz", - "integrity": "sha512-ghi1XxsVYPOZPDsOZrfOJIwQU5I3JVYB3Q6IbBGn1KFeOa89i0nUy5tCEkY9pVm83U83qZ1QG40RQKGknllV4w==", - "dev": true - } } }, "adm-zip": { @@ -686,23 +634,6 @@ "picomatch": "^2.0.4" } }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true - } - } - }, "archiver": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", @@ -724,17 +655,6 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -745,19 +665,6 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } } } }, @@ -821,12 +728,6 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, "array-includes": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", @@ -1062,13 +963,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true } } }, @@ -1093,24 +987,28 @@ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", "dev": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "bluebird": { @@ -1119,24 +1017,6 @@ "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", "dev": true }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "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" - } - }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -1212,22 +1092,6 @@ "ieee754": "^1.1.13" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1240,12 +1104,6 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -1270,12 +1128,6 @@ "safe-json-stringify": "~1" } }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1292,42 +1144,27 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - } } }, "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" }, "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true } } @@ -1474,13 +1311,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true } } }, @@ -1670,23 +1500,6 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "contains-path": { @@ -1695,33 +1508,6 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1852,42 +1638,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - } - } + "dev": true, + "optional": true }, "decompress-response": { "version": "3.3.0", @@ -1898,95 +1650,6 @@ "mimic-response": "^1.0.0" } }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - } - } - }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -2094,13 +1757,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true } } }, @@ -2110,18 +1766,6 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -2219,33 +1863,6 @@ "is-obj": "^2.0.0" } }, - "download": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", - "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", - "dev": true, - "requires": { - "archive-type": "^4.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.2.1", - "ext-name": "^5.0.0", - "file-type": "^11.1.0", - "filenamify": "^3.0.0", - "get-stream": "^4.1.0", - "got": "^8.3.1", - "make-dir": "^2.1.0", - "p-event": "^2.1.0", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, "dtrace-provider": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", @@ -2290,24 +1907,12 @@ "safe-buffer": "^5.0.1" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2402,12 +2007,6 @@ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2708,12 +2307,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, "event-to-promise": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", @@ -2737,15 +2330,6 @@ "strip-final-newline": "^2.0.0" }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -2798,63 +2382,6 @@ } } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3026,36 +2553,6 @@ "flat-cache": "^2.0.1" } }, - "file-type": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", - "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", - "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", - "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3065,21 +2562,6 @@ "to-regex-range": "^5.0.1" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "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-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -3196,12 +2678,6 @@ "mime-types": "^2.1.12" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3212,22 +2688,6 @@ "map-cache": "^0.2.2" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -3440,9 +2900,9 @@ } }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -3488,12 +2948,20 @@ } }, "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", "dev": true, "requires": { - "ini": "^1.3.5" + "ini": "1.3.7" + }, + "dependencies": { + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + } } }, "globals": { @@ -3506,41 +2974,32 @@ } }, "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "dependencies": { "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } } } }, @@ -3599,27 +3058,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -3630,15 +3074,6 @@ "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - } } }, "has-values": { @@ -3732,32 +3167,11 @@ } }, "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -3802,15 +3216,6 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -3868,33 +3273,17 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, "invert-kv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", "dev": true }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, "is-absolute": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", @@ -4086,12 +3475,6 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, "is-negative-zero": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", @@ -4116,12 +3499,6 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, "is-path-inside": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", @@ -4142,15 +3519,6 @@ "optional": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - } } }, "is-redirect": { @@ -4257,13 +3625,11 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, - "requires": { - "isarray": "1.0.0" - } + "optional": true }, "isstream": { "version": "0.1.2", @@ -4271,16 +3637,6 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, "jed": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", @@ -4413,9 +3769,9 @@ }, "dependencies": { "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "semver": { @@ -4469,9 +3825,9 @@ } }, "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dev": true, "requires": { "json-buffer": "3.0.0" @@ -4540,16 +3896,6 @@ "marky": "^1.2.0" } }, - "line-column": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", - "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", - "dev": true, - "requires": { - "isarray": "^1.0.0", - "isobject": "^2.0.0" - } - }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -4697,25 +4043,18 @@ } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" }, "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -4752,12 +4091,6 @@ "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", "dev": true }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, "mem": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", @@ -4767,14 +4100,6 @@ "map-age-cleaner": "^0.1.3", "mimic-fn": "^2.1.0", "p-is-promise": "^2.1.0" - }, - "dependencies": { - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - } } }, "memorystream": { @@ -4783,24 +4108,12 @@ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4901,13 +4214,6 @@ } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -4921,25 +4227,19 @@ } } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" } }, "mimic-fn": { @@ -5428,12 +4728,6 @@ "dev": true, "optional": true }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5459,9 +4753,9 @@ "dev": true }, "node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", "dev": true, "requires": { "growly": "^1.3.0", @@ -5473,9 +4767,9 @@ }, "dependencies": { "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true } } @@ -5513,26 +4807,10 @@ "dev": true }, "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "dependencies": { - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true }, "npm-run-all": { "version": "4.1.5", @@ -5800,15 +5078,6 @@ "optional": true, "requires": { "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - } } }, "object.assign": { @@ -5831,15 +5100,6 @@ "optional": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - } } }, "object.values": { @@ -5875,15 +5135,6 @@ } } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5944,9 +5195,9 @@ "dev": true }, "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, "p-defer": { @@ -5955,25 +5206,10 @@ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { @@ -5994,15 +5230,6 @@ "p-limit": "^2.2.0" } }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -6021,81 +5248,6 @@ "semver": "^6.2.0" }, "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -6140,12 +5292,6 @@ "@types/node": "*" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -6184,12 +5330,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -6332,15 +5472,15 @@ "optional": true }, "postcss": { - "version": "8.1.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.7.tgz", - "integrity": "sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==", + "version": "8.1.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.10.tgz", + "integrity": "sha512-iBXEV5VTTYaRRdxiFYzTtuv2lGMQBExqkZKSzkJe+Fl6rvQrA/49UVGKqB+LG54hpW/TtDBMGds8j33GFNW7pg==", "dev": true, "requires": { "colorette": "^1.2.1", - "line-column": "^1.0.2", - "nanoid": "^3.1.16", - "source-map": "^0.6.1" + "nanoid": "^3.1.18", + "source-map": "^0.6.1", + "vfile-location": "^3.2.0" } }, "prelude-ls": { @@ -6386,16 +5526,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -6428,22 +5558,11 @@ } }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "quick-format-unescaped": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", @@ -6465,24 +5584,6 @@ "safe-buffer": "^5.1.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -6636,32 +5737,34 @@ } }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "get-intrinsic": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", + "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "has-symbols": "^1.0.1" } } } @@ -6799,14 +5902,6 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } } }, "require-directory": { @@ -6884,15 +5979,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-compare": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/safe-compare/-/safe-compare-1.1.4.tgz", - "integrity": "sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } - }, "safe-json-stringify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", @@ -6922,15 +6008,6 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "requires": { - "commander": "^2.8.1" - } - }, "selenium-webdriver": { "version": "4.0.0-alpha.8", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.8.tgz", @@ -6998,35 +6075,6 @@ } } }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, "serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", @@ -7036,18 +6084,6 @@ "randombytes": "^2.1.0" } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -7085,12 +6121,6 @@ } } }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -7308,13 +6338,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true } } }, @@ -7350,24 +6373,6 @@ "flatstr": "^1.0.12" } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7518,12 +6523,6 @@ } } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, "stream-parser": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", @@ -7553,12 +6552,6 @@ "stream-to-array": "~2.3.0" } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -7661,15 +6654,6 @@ "strip-bom-buf": "^2.0.0" } }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -7682,15 +6666,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7767,18 +6742,29 @@ } }, "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "term-size": { @@ -7817,12 +6803,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -7843,12 +6823,6 @@ } } }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -7899,12 +6873,6 @@ "is-number": "^7.0.0" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, "tosource": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", @@ -7936,15 +6904,6 @@ "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", "dev": true }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, "tsconfig-paths": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", @@ -8001,16 +6960,6 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -8026,16 +6975,6 @@ "is-typedarray": "^1.0.0" } }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -8064,12 +7003,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -8111,13 +7044,6 @@ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true, "optional": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true } } }, @@ -8180,12 +7106,6 @@ "prepend-http": "^2.0.0" } }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -8199,12 +7119,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -8227,12 +7141,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -8244,16 +7152,22 @@ "extsprintf": "^1.2.0" } }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true + }, "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" + "watchpack-chokidar2": "^2.0.1" } }, "watchpack-chokidar2": { @@ -8366,7 +7280,6 @@ "dev": true, "optional": true, "requires": { - "bindings": "^1.5.0", "nan": "^2.12.1" } }, @@ -8413,13 +7326,6 @@ "kind-of": "^3.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -8472,9 +7378,9 @@ } }, "web-ext": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.4.0.tgz", - "integrity": "sha512-95MVrsCRtmmu7YNTA8OconwTB7Y7rS6T5ABpv9c90A5tLfDV1+6/dRn8JhAMAi/UfIq0ZT5wklHwvRzDmD6cBA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.5.0.tgz", + "integrity": "sha512-f+NHiYwbTS0X6eSLkBDWoCYkkIJweVazGf4MD8S+kRX/5z40WsYsnRdVWG+p34Z6rCyNvlHHrnO2S1W8WWg7Tw==", "dev": true, "requires": { "@babel/polyfill": "7.12.1", @@ -8482,7 +7388,7 @@ "@cliqz-oss/firefox-client": "0.3.1", "@cliqz-oss/node-firefox-connect": "1.2.1", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.12.0", + "addons-linter": "2.13.1", "bunyan": "1.8.14", "camelcase": "6.0.0", "chrome-launcher": "0.13.4", @@ -8493,11 +7399,11 @@ "firefox-profile": "4.0.0", "fs-extra": "9.0.1", "fx-runner": "1.0.13", - "import-fresh": "3.2.1", + "import-fresh": "3.3.0", "mkdirp": "1.0.4", "multimatch": "4.0.0", "mz": "2.7.0", - "node-notifier": "8.0.0", + "node-notifier": "8.0.1", "open": "7.3.0", "parse-json": "5.0.1", "sign-addon": "3.1.0", @@ -8506,10 +7412,28 @@ "strip-json-comments": "3.1.1", "tmp": "0.2.1", "update-notifier": "5.0.0", - "watchpack": "1.7.4", - "ws": "7.3.1", + "watchpack": "1.7.5", + "ws": "7.4.2", "yargs": "15.4.1", "zip-dir": "1.0.2" + }, + "dependencies": { + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "ws": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "dev": true + } } }, "webextension-polyfill": { @@ -8719,12 +7643,6 @@ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "y18n": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", diff --git a/package.json b/package.json index 13d2fa6..1d7ecb0 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "npm-run-all": "^4.1.5", "rollup": "^2.38.0", "selenium-webdriver": "^4.0.0-alpha.7", - "web-ext": "^5.4.0", + "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" }, "dependencies": {}, From 6aa0fa0e27ffae8198bb62a6143539059aa70d04 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 26 Jan 2021 12:22:23 +0100 Subject: [PATCH 057/399] Pass along the -w argument to `npm run dev` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1d7ecb0..69d5c7f 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "start": "npm run build && web-ext run", "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"", "watch": "npm-run-all --parallel watch-raw watch-bundled", - "watch-raw": "npm run dev -w", + "watch-raw": "npm run dev -- -w", "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { From 1c20628bce5efb221148a07ec22ef5fa9883a6cf Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 2 Feb 2021 11:06:31 +0100 Subject: [PATCH 058/399] Update rally.js to version 0.2.0 --- package-lock.json | 24 +++++++++++++++++++++--- package.json | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 518622e..7d9a7ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -196,9 +196,9 @@ } }, "@mozilla/rally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.1.0.tgz", - "integrity": "sha512-v7KcL/9QhIHFWkCTHjSvCeRHAQKUQXawkTRluSQNtHdV7vM/lJf5r9XhMMMeHDfvvorwouGVLsisQbapy0XZ3Q==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.2.0.tgz", + "integrity": "sha512-2fYHdEWy+tOghzXsELqQ9BPIMwk8XiXJ2ueoPHlKMKrzTeH7QoaM6J2TLaK1CSdWbQWle2THIOZApngPFk1ylA==", "dev": true }, "@rollup/plugin-commonjs": { @@ -987,6 +987,16 @@ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", @@ -2553,6 +2563,13 @@ "flat-cache": "^2.0.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7280,6 +7297,7 @@ "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, diff --git a/package.json b/package.json index 69d5c7f..8b07283 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "^0.1.0", + "@mozilla/rally": "^0.2.0", "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "@rollup/plugin-replace": "^2.3.4", From dfca8f1b788d5a98aab98be7e4ebd3f1da3c9b38 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 2 Feb 2021 11:14:36 +0100 Subject: [PATCH 059/399] Drop CommonJS in favour of ES6 modules The new module system made it to standards a bit back, and it's now safe to use. --- src/ExampleModule.js | 8 +++----- src/background.js | 12 +++++++----- src/content-script.js | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ExampleModule.js b/src/ExampleModule.js index b50dbda..b08abd2 100644 --- a/src/ExampleModule.js +++ b/src/ExampleModule.js @@ -2,8 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -module.exports = { - initialize() { - console.log('example module initialized.'); - }, - }; \ No newline at end of file +export function initialize() { + console.log("example module initialized."); +} diff --git a/src/background.js b/src/background.js index c607ecc..305e176 100644 --- a/src/background.js +++ b/src/background.js @@ -2,16 +2,18 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -window.browser = require("webextension-polyfill"); +import "webextension-polyfill"; -const Rally = require("@mozilla/rally"); -const rally = new Rally(); +import Rally from "@mozilla/rally"; // ... Add more implementation here! -const ExampleModule = require('./ExampleModule'); -ExampleModule.initialize(); +import { + initialize as exampleInitialize +} from './ExampleModule'; +exampleInitialize(); +const rally = new Rally(); rally.initialize( // A sample key id used for encrypting data. "sample-invalid-key-id", diff --git a/src/content-script.js b/src/content-script.js index 8ba0dfe..163db1a 100644 --- a/src/content-script.js +++ b/src/content-script.js @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -window.browser = require("webextension-polyfill"); +import "webextension-polyfill"; // ... Add more implementation here! From abfa40f6b1f3d359c39530eb4ee769ef20681575 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Thu, 4 Feb 2021 11:49:51 +0100 Subject: [PATCH 060/399] Enable source maps in developer mode Source maps enable a much nicer developer experience when debugging problems in addons in the browser's debugging tools. --- rollup.config.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index fd27644..fe9d396 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -6,18 +6,29 @@ import commonjs from "@rollup/plugin-commonjs"; import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; +/** + * Helper to detect developer mode. + * + * @param cliArgs the command line arguments. + * @return {Boolean} whether or not developer mode is enabled. + */ +function isDevMode(cliArgs) { + return Boolean(cliArgs["config-enable-developer-mode"]); +} + export default (cliArgs) => [ { input: "src/background.js", output: { - file: "dist/background.js" + file: "dist/background.js", + sourcemap: isDevMode(cliArgs) ? "inline" : false, }, plugins: [ replace({ // In Developer Mode, the study does not submit data and // gracefully handles communication errors with the Core // Add-on. - __ENABLE_DEVELOPER_MODE__: !!cliArgs["config-enable-developer-mode"], + __ENABLE_DEVELOPER_MODE__: isDevMode(cliArgs), }), resolve({ browser: true, @@ -28,7 +39,8 @@ export default (cliArgs) => [ { input: "src/content-script.js", output: { - file: "dist/content-script.js" + file: "dist/content-script.js", + sourcemap: isDevMode(cliArgs) ? "inline" : false, }, plugins: [ resolve({ From a81f3e0e3fa2755eaf1371b0bc9197e8a9726ff7 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 8 Feb 2021 10:39:03 +0100 Subject: [PATCH 061/399] Update rally.js to version 0.3.0 The template can now tell if the study is allowed to run or not. Change the example accordingly. --- package-lock.json | 9542 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 3 +- src/background.js | 13 +- 3 files changed, 9533 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d9a7ba..7837f58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,9512 @@ { "name": "rally-study-template", "version": "0.3.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "rally-study-template", + "version": "0.3.1", + "license": "MPL-2.0", + "devDependencies": { + "@mozilla/rally": "^0.3.0", + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-replace": "^2.3.4", + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-mocha": "^8.0.0", + "eslint-plugin-node": "^11.1.0", + "geckodriver": "^1.21.0", + "mocha": "^8.1.3", + "npm-run-all": "^4.1.5", + "rollup": "^2.38.0", + "selenium-webdriver": "^4.0.0-alpha.7", + "web-ext": "^5.5.0", + "webextension-polyfill": "^0.7.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "dev": true, + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@cliqz-oss/firefox-client": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz", + "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==", + "dev": true, + "dependencies": { + "colors": "0.5.x", + "js-select": "~0.6.0" + } + }, + "node_modules/@cliqz-oss/node-firefox-connect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz", + "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==", + "dev": true, + "dependencies": { + "@cliqz-oss/firefox-client": "0.3.1", + "es6-promise": "^2.0.1" + } + }, + "node_modules/@devicefarmer/adbkit": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz", + "integrity": "sha512-rsgWREAvSRQjdP9/3GoAV6Tq+o97haywgbTfCgt5yUqiDpaaq3hlH9FTo9XsdG8x+Jd0VQ9nTC2IXsDu8JGRSA==", + "dev": true, + "dependencies": { + "@devicefarmer/adbkit-logcat": "^1.1.0", + "@devicefarmer/adbkit-monkey": "~1.0.1", + "bluebird": "~2.9.24", + "commander": "^2.3.0", + "debug": "~2.6.3", + "node-forge": "^0.10.0", + "split": "~0.3.3" + }, + "bin": { + "adbkit": "bin/adbkit" + }, + "engines": { + "node": ">= 0.10.4" + } + }, + "node_modules/@devicefarmer/adbkit-logcat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz", + "integrity": "sha512-K90P5gUXM/w+yzLvJIRQ+tJooNU6ipUPPQkljtPJ0laR66TGtpt4Gqsjm0n9dPHK1W5KGgU1R5wnCd6RTSlPNA==", + "dev": true, + "engines": { + "node": ">= 0.10.4" + } + }, + "node_modules/@devicefarmer/adbkit-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz", + "integrity": "sha512-HilPrVrCosYWqSyjfpDtaaN1kJwdlBpS+IAflP3z+e7nsEgk3JGJf1Vg0NgHJooTf5HDfXSyZqMVg+5jvXCK0g==", + "dev": true, + "dependencies": { + "async": "~0.2.9" + }, + "engines": { + "node": ">= 0.10.4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@mdn/browser-compat-data": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz", + "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==", + "dev": true, + "dependencies": { + "extend": "3.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@mozilla/rally": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.3.0.tgz", + "integrity": "sha512-3QyD+ZWkxiGUwebXXN7/Pqm0ItttsLmpEiOlByf20wGY7InVkUgcttF4E8oCk1QJBM7WyI4LNMrIz4X4n20Vew==", + "dev": true + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz", + "integrity": "sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8", + "commondir": "^1.0.1", + "estree-walker": "^1.0.1", + "glob": "^7.1.2", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", + "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", + "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "node_modules/addons-linter": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.13.1.tgz", + "integrity": "sha512-OWMuABpZRNeru38oOjn7QYOF0JOXJQXG9c3r4ILTRwTBeSu3LtfgCh9/7zLVgTYPbTs7Qy6h23u4Sel65uSnUQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "7.12.5", + "@mdn/browser-compat-data": "2.0.7", + "addons-scanner-utils": "4.0.0", + "ajv": "6.12.6", + "ajv-merge-patch": "4.1.0", + "chalk": "4.1.0", + "cheerio": "1.0.0-rc.3", + "columnify": "1.5.4", + "common-tags": "1.8.0", + "deepmerge": "4.2.2", + "dispensary": "0.59.0", + "eslint": "7.14.0", + "eslint-plugin-no-unsanitized": "3.1.4", + "eslint-visitor-keys": "2.0.0", + "espree": "7.3.0", + "esprima": "4.0.1", + "fluent-syntax": "0.13.0", + "fsevents": "2.2.1", + "glob": "7.1.6", + "is-mergeable-object": "1.1.1", + "jed": "1.1.1", + "os-locale": "5.0.0", + "pino": "6.7.0", + "postcss": "8.1.10", + "probe-image-size": "5.0.0", + "relaxed-json": "1.0.3", + "semver": "7.3.2", + "source-map-support": "0.5.19", + "tosource": "1.0.0", + "upath": "2.0.1", + "whatwg-url": "8.4.0", + "yargs": "16.1.1", + "yauzl": "2.10.0" + }, + "bin": { + "addons-linter": "bin/addons-linter" + }, + "engines": { + "node": ">=10.13" + }, + "optionalDependencies": { + "fsevents": "2.2.1" + } + }, + "node_modules/addons-linter/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/addons-linter/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/addons-linter/node_modules/eslint": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", + "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/addons-linter/node_modules/fsevents": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/addons-linter/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/addons-linter/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/addons-linter/node_modules/yargs": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", + "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/addons-scanner-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.0.0.tgz", + "integrity": "sha512-+BfePzqoo/7Nhum9LONGsga2xhNJYb+6k6j819pzcd2tqaaqDUJu+3lz4CQQYFcD8QoolB3ksfZcCPymleFq0A==", + "dev": true, + "dependencies": { + "@types/yauzl": "2.9.1", + "common-tags": "1.8.0", + "first-chunk-stream": "3.0.0", + "strip-bom-stream": "4.0.0", + "upath": "2.0.1", + "yauzl": "2.10.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "node_modules/ajv-merge-patch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ajv-merge-patch/-/ajv-merge-patch-4.1.0.tgz", + "integrity": "sha512-0mAYXMSauA8RZ7r+B4+EAOYcZEcO9OK5EiQCR7W7Cv4E44pJj56ZnkKLJ9/PAcOc0dT+LlV9fdDcq2TxVJfOYw==", + "dev": true, + "dependencies": { + "fast-json-patch": "^2.0.6", + "json-merge-patch": "^0.2.3" + } + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/archiver": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", + "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.1.4", + "zip-stream": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver/node_modules/async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-includes/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "node_modules/array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array.prototype.flat/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "optional": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "optional": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "2.9.34", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/bunyan": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", + "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", + "dev": true, + "engines": [ + "node >=0.10.0" + ], + "dependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + }, + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "optional": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", + "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", + "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" + } + }, + "node_modules/chrome-launcher/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/chrome-launcher/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "optional": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "node_modules/colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "dependencies": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true, + "optional": true + }, + "node_modules/compress-commons": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz", + "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dev": true, + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz", + "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "dependencies": { + "capture-stack-trace": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepcopy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", + "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.8" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dispensary": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.59.0.tgz", + "integrity": "sha512-JSnh4AhtYgwoyUHtunZbAhklkD9IeNacK1IDlrAJSZjzBMGFoTp9+Nggg+ITJ+F1geXc04DZ55ixnjFr5Ozknw==", + "dev": true, + "dependencies": { + "async": "~3.2.0", + "natural-compare-lite": "~1.4.0", + "pino": "~6.7.0", + "request": "~2.88.0", + "sha.js": "~2.4.4", + "source-map-support": "~0.5.4", + "yargs": "~16.1.0" + }, + "bin": { + "dispensary": "bin/dispensary" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dispensary/node_modules/async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "node_modules/dispensary/node_modules/yargs": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", + "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, + "optional": true, + "dependencies": { + "nan": "^2.14.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/es6-promise": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", + "dev": true + }, + "node_modules/es6-promisify": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz", + "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.0.0.tgz", + "integrity": "sha512-n67etbWDz6NQM+HnTwZHyBwz/bLlYPOxUbw7bPuCyFujv7ZpaT/Vn6KTAbT02gf7nRljtYIjWcTxK/n8a57rQQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.1.0", + "ramda": "^0.27.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/eslint-plugin-no-unsanitized": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", + "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==", + "dev": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-to-promise": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", + "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=", + "dev": true + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-patch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", + "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^2.0.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fast-json-patch/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-redact": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", + "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/firefox-profile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.0.0.tgz", + "integrity": "sha512-Vw31AsjfLDbcApMDwwnhZcz3tWjV6lxB9BNf84FaV44rZXtU87cVbFMBzPEtrJdUDbwPYiuYzprp6yksYGwjSw==", + "dev": true, + "dependencies": { + "adm-zip": "~0.4.x", + "archiver": "~5.0.2", + "async": "~2.5.0", + "fs-extra": "~4.0.2", + "ini": "~1.3.3", + "jetpack-id": "1.0.0", + "lazystream": "~1.0.0", + "lodash": "~4.17.2", + "minimist": "^1.1.1", + "uuid": "^3.0.0", + "xml2js": "~0.4.4" + }, + "bin": { + "firefox-profile": "lib/cli.js" + } + }, + "node_modules/firefox-profile/node_modules/async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "dependencies": { + "lodash": "^4.14.0" + } + }, + "node_modules/firefox-profile/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/first-chunk-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", + "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", + "dev": true + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/fluent-syntax": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz", + "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==", + "dev": true, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "optional": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-extra/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "node_modules/fs-extra/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/fx-runner": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", + "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "dev": true, + "dependencies": { + "commander": "2.9.0", + "shell-quote": "1.6.1", + "spawn-sync": "1.0.15", + "when": "3.7.7", + "which": "1.2.4", + "winreg": "0.0.12" + }, + "bin": { + "fx-runner": "bin/fx-runner" + } + }, + "node_modules/fx-runner/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/fx-runner/node_modules/isexe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "node_modules/fx-runner/node_modules/which": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", + "integrity": "sha1-FVf5YIBgTlsRs1meufRbUKnv1yI=", + "dev": true, + "dependencies": { + "is-absolute": "^0.1.7", + "isexe": "^1.1.1" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/geckodriver": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.21.1.tgz", + "integrity": "sha512-i5pYkYFEjTMkSCWh8agNFJPCUxVPr9I3JsRQ+bAypt73urXFnB73GQxDbJPKzELUeLhbQybhNKNlKjxfgS1yAA==", + "dev": true, + "dependencies": { + "adm-zip": "0.4.16", + "bluebird": "3.7.2", + "got": "5.6.0", + "https-proxy-agent": "5.0.0", + "tar": "6.0.2" + }, + "bin": { + "geckodriver": "bin/geckodriver" + } + }, + "node_modules/geckodriver/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/geckodriver/node_modules/got": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", + "integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=", + "dev": true, + "dependencies": { + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-plain-obj": "^1.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^2.0.0", + "unzip-response": "^1.0.0", + "url-parse-lax": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/geckodriver/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/geckodriver/node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/geckodriver/node_modules/timed-out": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", + "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/geckodriver/node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, + "dependencies": { + "is-relative": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true + }, + "node_modules/is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-mergeable-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", + "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "optional": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/jed": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", + "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", + "dev": true + }, + "node_modules/jetpack-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", + "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=", + "dev": true + }, + "node_modules/js-select": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", + "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", + "dev": true, + "dependencies": { + "JSONSelect": "0.2.1", + "traverse": "0.4.x" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-merge-patch": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-0.2.3.tgz", + "integrity": "sha1-+ixrWvh9p3uuKWalidUuI+2B/kA=", + "dev": true, + "dependencies": { + "deep-equal": "^1.0.0" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "node_modules/JSONSelect": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", + "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", + "dev": true, + "engines": { + "node": ">=0.4.7" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jszip": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", + "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "dev": true, + "dependencies": { + "pako": "~1.0.2" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dev": true, + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", + "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", + "dev": true, + "dependencies": { + "debug": "^2.6.8", + "marky": "^1.2.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "optional": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/marky": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", + "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", + "dev": true + }, + "node_modules/mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "dev": true, + "dependencies": { + "mime-db": "1.45.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "optional": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.4.3", + "debug": "4.2.0", + "diff": "4.0.2", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.14.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "nanoid": "3.1.12", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "7.2.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.2", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/mocha/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/mocha/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", + "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || >=13.7" + } + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/mocha/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/mocha/node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "dev": true, + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "optional": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "dev": true, + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", + "dev": true + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true, + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-notifier": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "node_modules/object-is": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "optional": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "optional": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "dev": true, + "dependencies": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pino": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz", + "integrity": "sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw==", + "dev": true, + "dependencies": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.2" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", + "dev": true + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.1.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.10.tgz", + "integrity": "sha512-iBXEV5VTTYaRRdxiFYzTtuv2lGMQBExqkZKSzkJe+Fl6rvQrA/49UVGKqB+LG54hpW/TtDBMGds8j33GFNW7pg==", + "dev": true, + "dependencies": { + "colorette": "^1.2.1", + "nanoid": "^3.1.18", + "source-map": "^0.6.1", + "vfile-location": "^3.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "dev": true, + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/probe-image-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz", + "integrity": "sha512-V6uBYw5eBc5UVIE7MUZD6Nxg0RYuGDWLDenEn0B1WC6PcTvn1xdQ6HLDDuznefsiExC6rNrCz7mFRBo0f3Xekg==", + "dev": true, + "dependencies": { + "deepmerge": "^4.0.0", + "inherits": "^2.0.3", + "next-tick": "^1.0.0", + "request": "^2.83.0", + "stream-parser": "~0.3.1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", + "dev": true + }, + "node_modules/ramda": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", + "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexp.prototype.flags/node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/regexp.prototype.flags/node_modules/get-intrinsic": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", + "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/relaxed-json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", + "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "commander": "^2.6.0" + }, + "bin": { + "rjson": "bin/rjson.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/relaxed-json/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/relaxed-json/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/relaxed-json/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/relaxed-json/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/relaxed-json/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/relaxed-json/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true, + "optional": true + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup": { + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.0.tgz", + "integrity": "sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw==", + "dev": true, + "dependencies": { + "fsevents": "~2.1.2" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/selenium-webdriver": { + "version": "4.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.8.tgz", + "integrity": "sha512-yPSaiWySZTEbxuuWQMDqdXh3H3N4Aiw/bSUjpkKMPWWCysfPqUncrq6FewBqdxWD1wQKzy5yWaQMGsgTY/0rCQ==", + "dev": true, + "dependencies": { + "jszip": "^3.5.0", + "rimraf": "^2.7.1", + "tmp": "^0.1.0", + "ws": "^7.3.1" + }, + "engines": { + "node": ">= 10.15.0" + } + }, + "node_modules/selenium-webdriver/node_modules/jszip": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/selenium-webdriver/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/selenium-webdriver/node_modules/tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "dependencies": { + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "dependencies": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/sign-addon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.1.0.tgz", + "integrity": "sha512-zZ7nKc5/3QWM3skYBosGDvYQf2jkKhW2u8BELrZoN1wgCSOnwsV9T47Vx9uaNbA3CyZ+V9XSA0tDVHoV1QfVPw==", + "dev": true, + "dependencies": { + "common-tags": "1.8.0", + "core-js": "3.6.5", + "deepcopy": "2.1.0", + "es6-error": "4.1.1", + "es6-promisify": "6.1.1", + "jsonwebtoken": "8.5.1", + "mz": "2.7.0", + "request": "2.88.2", + "source-map-support": "0.5.19", + "stream-to-promise": "3.0.0" + } + }, + "node_modules/sign-addon/node_modules/core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "optional": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sonic-boom": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.0.tgz", + "integrity": "sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "optional": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true, + "optional": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dev": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", + "dev": true, + "dependencies": { + "any-promise": "^1.1.0" + } + }, + "node_modules/stream-to-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", + "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", + "dev": true, + "dependencies": { + "any-promise": "~1.3.0", + "end-of-stream": "~1.4.1", + "stream-to-array": "~2.3.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", + "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-buf": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", + "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", + "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", + "dev": true, + "dependencies": { + "first-chunk-stream": "^3.0.0", + "strip-bom-buf": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", + "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.0", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tosource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", + "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/traverse": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", + "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "optional": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "optional": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-notifier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", + "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver": "^7.3.2", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true, + "optional": true + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + }, + "optionalDependencies": { + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-ext": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.5.0.tgz", + "integrity": "sha512-f+NHiYwbTS0X6eSLkBDWoCYkkIJweVazGf4MD8S+kRX/5z40WsYsnRdVWG+p34Z6rCyNvlHHrnO2S1W8WWg7Tw==", + "dev": true, + "dependencies": { + "@babel/polyfill": "7.12.1", + "@babel/runtime": "7.12.5", + "@cliqz-oss/firefox-client": "0.3.1", + "@cliqz-oss/node-firefox-connect": "1.2.1", + "@devicefarmer/adbkit": "2.11.3", + "addons-linter": "2.13.1", + "bunyan": "1.8.14", + "camelcase": "6.0.0", + "chrome-launcher": "0.13.4", + "debounce": "1.2.0", + "decamelize": "4.0.0", + "es6-error": "4.1.1", + "event-to-promise": "0.8.0", + "firefox-profile": "4.0.0", + "fs-extra": "9.0.1", + "fx-runner": "1.0.13", + "import-fresh": "3.3.0", + "mkdirp": "1.0.4", + "multimatch": "4.0.0", + "mz": "2.7.0", + "node-notifier": "8.0.1", + "open": "7.3.0", + "parse-json": "5.0.1", + "sign-addon": "3.1.0", + "source-map-support": "0.5.19", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1", + "update-notifier": "5.0.0", + "watchpack": "1.7.5", + "ws": "7.4.2", + "yargs": "15.4.1", + "zip-dir": "1.0.2" + }, + "bin": { + "web-ext": "bin/web-ext" + }, + "engines": { + "node": ">=10.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/web-ext/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/web-ext/node_modules/ws": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/webextension-polyfill": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", + "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/when": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", + "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winreg": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", + "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", + "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ws": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/yargs/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/zip-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", + "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=", + "dev": true, + "dependencies": { + "async": "^1.5.2", + "jszip": "^2.4.0" + } + }, + "node_modules/zip-dir/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/zip-stream": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz", + "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.0.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.10.4", @@ -196,9 +9700,9 @@ } }, "@mozilla/rally": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.2.0.tgz", - "integrity": "sha512-2fYHdEWy+tOghzXsELqQ9BPIMwk8XiXJ2ueoPHlKMKrzTeH7QoaM6J2TLaK1CSdWbQWle2THIOZApngPFk1ylA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.3.0.tgz", + "integrity": "sha512-3QyD+ZWkxiGUwebXXN7/Pqm0ItttsLmpEiOlByf20wGY7InVkUgcttF4E8oCk1QJBM7WyI4LNMrIz4X4n20Vew==", "dev": true }, "@rollup/plugin-commonjs": { @@ -322,12 +9826,6 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "JSONSelect": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", - "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", - "dev": true - }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -3767,6 +13265,12 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, + "JSONSelect": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", + "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", + "dev": true + }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -6569,6 +16073,15 @@ "stream-to-array": "~2.3.0" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -6628,15 +16141,6 @@ "es-abstract": "^1.18.0-next.1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", diff --git a/package.json b/package.json index 8b07283..cf909a4 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "^0.2.0", + "@mozilla/rally": "^0.3.0", "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "@rollup/plugin-replace": "^2.3.4", @@ -29,7 +29,6 @@ "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" }, - "dependencies": {}, "engines": { "node": ">=14.0.0" }, diff --git a/src/background.js b/src/background.js index 305e176..26d715a 100644 --- a/src/background.js +++ b/src/background.js @@ -6,12 +6,10 @@ import "webextension-polyfill"; import Rally from "@mozilla/rally"; -// ... Add more implementation here! - +// Example: import a module. import { initialize as exampleInitialize } from './ExampleModule'; -exampleInitialize(); const rally = new Rally(); rally.initialize( @@ -28,4 +26,11 @@ rally.initialize( // The following constant is automatically provided by // the build system. __ENABLE_DEVELOPER_MODE__, -); +).then(resolve => { + // Initialize the study and start it. + // Example: initialize the example module. + exampleInitialize(); +}, reject =>{ + // Do not start the study in this case. Something + // went wrong. +}); From 6251dd29a5fce54b208ba74510ef4781e9ceaad5 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 8 Feb 2021 15:41:32 +0100 Subject: [PATCH 062/399] Fix indentation in web-ext-config.js --- web-ext-config.js | 63 +++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/web-ext-config.js b/web-ext-config.js index 38ad4f4..946535d 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -2,35 +2,34 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - module.exports = { - // Global options: - verbose: true, - // Command options: - build: { - overwriteDest: true, - }, - run: { - firefox: "nightly", - pref: ["extensions.experiments.enabled=true"], - }, - ignoreFiles: [ - "bin", - "docs", - "scripts", - "src", - "stories", - "support", - "tests", - "CHANGELOG.md", - "CODE_OF_CONDUCT.md", - "copyright.txt", - "LICENSE", - "package-lock.json", - "package.json", - "README.md", - "rollup.config.*", - "web-ext-config.js", - "public/**/*.map", - ], - }; - \ No newline at end of file +module.exports = { + // Global options: + verbose: true, + // Command options: + build: { + overwriteDest: true, + }, + run: { + firefox: "nightly", + pref: ["extensions.experiments.enabled=true"], + }, + ignoreFiles: [ + "bin", + "docs", + "scripts", + "src", + "stories", + "support", + "tests", + "CHANGELOG.md", + "CODE_OF_CONDUCT.md", + "copyright.txt", + "LICENSE", + "package-lock.json", + "package.json", + "README.md", + "rollup.config.*", + "web-ext-config.js", + "public/**/*.map", + ], +}; From c49c8b27f7e4fd899f6f51b37bb84b3338c8791e Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 9 Feb 2021 10:19:21 +0100 Subject: [PATCH 063/399] Enable linting and integration tests This provides a basic template for integrating with CircleCi. It enables linting and running integration tests in Firefox with Selenium. --- .circleci/config.yml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..44e8434 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,38 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +--- +version: 2.1 + +jobs: + Linting: + docker: + - image: cimg/node:14.13.1 + steps: + - checkout + - run: + name: Install the dependencies + command: npm install + - run: + name: Run linting + command: npm run lint + + Firefox integration tests: + docker: + - image: cimg/node:14.13.1 + steps: + - checkout + - run: + name: Install the dependencies + command: npm install && sudo add-apt-repository ppa:ubuntu-mozilla-daily/ppa && sudo apt update && sudo apt install firefox-trunk + - run: + name: Run Selenium tests + command: export PATH=.:$PATH && npm run test-integration + +workflows: + version: 2 + ci: + jobs: + - Linting + - Firefox integration tests From f04950136a0ce1903c2164828115f90f96cb6bca Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 9 Feb 2021 16:39:03 +0100 Subject: [PATCH 064/399] Enable dependabot This will help us making sure dependencies stay up to date. --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d1f0d08 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" From 6182ecc73b52216fdf9a69567c949f8de501dcb9 Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Tue, 9 Feb 2021 18:40:20 +0100 Subject: [PATCH 065/399] Make sure to build the study before linting --- .circleci/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 44e8434..f05c65e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,6 +14,9 @@ jobs: - run: name: Install the dependencies command: npm install + - run: + name: Build + command: npm run build - run: name: Run linting command: npm run lint From 0558a44e792314238b3151caf87c1f1a536d96ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Feb 2021 17:47:32 +0000 Subject: [PATCH 066/399] Bump geckodriver from 1.21.1 to 1.22.1 Bumps [geckodriver](https://github.com/vladikoff/node-geckodriver) from 1.21.1 to 1.22.1. - [Release notes](https://github.com/vladikoff/node-geckodriver/releases) - [Commits](https://github.com/vladikoff/node-geckodriver/compare/v1.21.1...v1.22.1) Signed-off-by: dependabot[bot] --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7837f58..356177f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.21.0", + "geckodriver": "^1.22.1", "mocha": "^8.1.3", "npm-run-all": "^4.1.5", "rollup": "^2.38.0", @@ -3394,10 +3394,11 @@ } }, "node_modules/geckodriver": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.21.1.tgz", - "integrity": "sha512-i5pYkYFEjTMkSCWh8agNFJPCUxVPr9I3JsRQ+bAypt73urXFnB73GQxDbJPKzELUeLhbQybhNKNlKjxfgS1yAA==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.1.tgz", + "integrity": "sha512-pT5Wf3AVszsvu0I8XWQT6VX7GzVYtASxzluVMlMXb3wb+jlmE0IFNQ7VGfjpdDrwF/MraukmdFtVQLpSJH0M2A==", "dev": true, + "hasInstallScript": true, "dependencies": { "adm-zip": "0.4.16", "bluebird": "3.7.2", @@ -12323,9 +12324,9 @@ } }, "geckodriver": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.21.1.tgz", - "integrity": "sha512-i5pYkYFEjTMkSCWh8agNFJPCUxVPr9I3JsRQ+bAypt73urXFnB73GQxDbJPKzELUeLhbQybhNKNlKjxfgS1yAA==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.1.tgz", + "integrity": "sha512-pT5Wf3AVszsvu0I8XWQT6VX7GzVYtASxzluVMlMXb3wb+jlmE0IFNQ7VGfjpdDrwF/MraukmdFtVQLpSJH0M2A==", "dev": true, "requires": { "adm-zip": "0.4.16", diff --git a/package.json b/package.json index cf909a4..ddad221 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.21.0", + "geckodriver": "^1.22.1", "mocha": "^8.1.3", "npm-run-all": "^4.1.5", "rollup": "^2.38.0", From d7a312413f047c3c6e15ecfc951d559648e70481 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Feb 2021 17:48:25 +0000 Subject: [PATCH 067/399] Bump eslint from 7.12.1 to 7.19.0 Bumps [eslint](https://github.com/eslint/eslint) from 7.12.1 to 7.19.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.12.1...v7.19.0) Signed-off-by: dependabot[bot] --- package-lock.json | 325 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 309 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7837f58..d858af9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "@rollup/plugin-replace": "^2.3.4", - "eslint": "^7.12.1", + "eslint": "^7.19.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", @@ -2429,13 +2429,13 @@ } }, "node_modules/eslint": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz", - "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", + "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2445,10 +2445,10 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", + "espree": "^7.3.1", "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -2459,7 +2459,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -2468,7 +2468,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -2477,6 +2477,9 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-import-resolver-node": { @@ -2649,6 +2652,27 @@ "node": ">=10" } }, + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/eslint/node_modules/ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -2658,6 +2682,15 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/eslint/node_modules/debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", @@ -2670,12 +2703,104 @@ "node": ">=6.0" } }, + "node_modules/eslint/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/eslint/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/eslint/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -2688,6 +2813,37 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "dependencies": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/eslint/node_modules/table/node_modules/ajv": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.4.tgz", + "integrity": "sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/espree": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", @@ -7217,6 +7373,15 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -11522,13 +11687,13 @@ "dev": true }, "eslint": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz", - "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", + "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -11538,10 +11703,10 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", + "espree": "^7.3.1", "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -11552,7 +11717,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -11561,17 +11726,41 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", @@ -11581,12 +11770,82 @@ "ms": "2.1.2" } }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -11595,6 +11854,32 @@ "requires": { "ansi-regex": "^5.0.0" } + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.4.tgz", + "integrity": "sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + } + } } } }, @@ -15431,6 +15716,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", diff --git a/package.json b/package.json index cf909a4..00060e5 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@rollup/plugin-commonjs": "^14.0.0", "@rollup/plugin-node-resolve": "^10.0.0", "@rollup/plugin-replace": "^2.3.4", - "eslint": "^7.12.1", + "eslint": "^7.19.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", From e0fc6d25f2a9f49b6328380ac60ebca4c93a426b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Feb 2021 17:53:10 +0000 Subject: [PATCH 068/399] Bump rollup from 2.38.0 to 2.38.5 Bumps [rollup](https://github.com/rollup/rollup) from 2.38.0 to 2.38.5. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.38.0...v2.38.5) Signed-off-by: dependabot[bot] --- package-lock.json | 43 +++++++++++++++++++++++++++++++++---------- package.json | 2 +- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 512283d..b550065 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.1.3", "npm-run-all": "^4.1.5", - "rollup": "^2.38.0", + "rollup": "^2.38.5", "selenium-webdriver": "^4.0.0-alpha.7", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" @@ -7447,12 +7447,12 @@ } }, "node_modules/rollup": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.0.tgz", - "integrity": "sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw==", + "version": "2.38.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.5.tgz", + "integrity": "sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ==", "dev": true, "dependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" }, "bin": { "rollup": "dist/bin/rollup" @@ -7461,7 +7461,21 @@ "node": ">=10.0.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" + } + }, + "node_modules/rollup/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/safe-buffer": { @@ -15778,12 +15792,21 @@ } }, "rollup": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.0.tgz", - "integrity": "sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw==", + "version": "2.38.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.5.tgz", + "integrity": "sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ==", "dev": true, "requires": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + } } }, "safe-buffer": { diff --git a/package.json b/package.json index 32aacc5..de91283 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.1.3", "npm-run-all": "^4.1.5", - "rollup": "^2.38.0", + "rollup": "^2.38.5", "selenium-webdriver": "^4.0.0-alpha.7", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" From 2c2cc31172e37236d8620110573744c76ed77120 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Feb 2021 17:53:29 +0000 Subject: [PATCH 069/399] Bump @rollup/plugin-commonjs from 14.0.0 to 17.1.0 Bumps [@rollup/plugin-commonjs](https://github.com/rollup/plugins) from 14.0.0 to 17.1.0. - [Release notes](https://github.com/rollup/plugins/releases) - [Commits](https://github.com/rollup/plugins/compare/commonjs-v14.0.0...commonjs-v17.1.0) Signed-off-by: dependabot[bot] --- package-lock.json | 53 +++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 512283d..b985907 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "devDependencies": { "@mozilla/rally": "^0.3.0", - "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^10.0.0", "@rollup/plugin-replace": "^2.3.4", "eslint": "^7.19.0", @@ -256,21 +256,24 @@ "dev": true }, "node_modules/@rollup/plugin-commonjs": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz", - "integrity": "sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.0.8", + "@rollup/pluginutils": "^3.1.0", "commondir": "^1.0.1", - "estree-walker": "^1.0.1", - "glob": "^7.1.2", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0" + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" }, "engines": { "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.30.0" } }, "node_modules/@rollup/plugin-node-resolve": { @@ -2932,9 +2935,9 @@ } }, "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "node_modules/esutils": { @@ -9872,18 +9875,18 @@ "dev": true }, "@rollup/plugin-commonjs": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz", - "integrity": "sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.8", + "@rollup/pluginutils": "^3.1.0", "commondir": "^1.0.1", - "estree-walker": "^1.0.1", - "glob": "^7.1.2", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0" + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" } }, "@rollup/plugin-node-resolve": { @@ -12090,9 +12093,9 @@ "dev": true }, "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "esutils": { diff --git a/package.json b/package.json index 32aacc5..de7b7e5 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@mozilla/rally": "^0.3.0", - "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^10.0.0", "@rollup/plugin-replace": "^2.3.4", "eslint": "^7.19.0", From 790ebc16f5c5585e7f2737f1d7af36947d7f04da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Feb 2021 09:58:27 +0000 Subject: [PATCH 070/399] Bump @rollup/plugin-node-resolve from 10.0.0 to 11.1.1 Bumps [@rollup/plugin-node-resolve](https://github.com/rollup/plugins) from 10.0.0 to 11.1.1. - [Release notes](https://github.com/rollup/plugins/releases) - [Commits](https://github.com/rollup/plugins/compare/node-resolve-v10.0.0...node-resolve-v11.1.1) Signed-off-by: dependabot[bot] --- package-lock.json | 40 +++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7b3f2f6..a30abb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@mozilla/rally": "^0.3.0", "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-node-resolve": "^11.1.1", "@rollup/plugin-replace": "^2.3.4", "eslint": "^7.19.0", "eslint-plugin-import": "^2.22.1", @@ -277,9 +277,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", - "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.1.tgz", + "integrity": "sha512-zlBXR4eRS+2m79TsUZWhsd0slrHUYdRx4JF+aVQm+MI0wsKdlpC2vlDVjmlGvtZY1vsefOT9w3JxvmWSBei+Lg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -287,10 +287,13 @@ "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", - "resolve": "^1.17.0" + "resolve": "^1.19.0" }, "engines": { "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, "node_modules/@rollup/plugin-replace": { @@ -7393,13 +7396,16 @@ "dev": true }, "node_modules/resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "dependencies": { - "is-core-module": "^2.0.0", + "is-core-module": "^2.1.0", "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { @@ -9904,9 +9910,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", - "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.1.tgz", + "integrity": "sha512-zlBXR4eRS+2m79TsUZWhsd0slrHUYdRx4JF+aVQm+MI0wsKdlpC2vlDVjmlGvtZY1vsefOT9w3JxvmWSBei+Lg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -9914,7 +9920,7 @@ "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", - "resolve": "^1.17.0" + "resolve": "^1.19.0" } }, "@rollup/plugin-replace": { @@ -15747,12 +15753,12 @@ "dev": true }, "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "requires": { - "is-core-module": "^2.0.0", + "is-core-module": "^2.1.0", "path-parse": "^1.0.6" } }, diff --git a/package.json b/package.json index ba7c0ee..37391f7 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@mozilla/rally": "^0.3.0", "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-node-resolve": "^11.1.1", "@rollup/plugin-replace": "^2.3.4", "eslint": "^7.19.0", "eslint-plugin-import": "^2.22.1", From f877f5366f18936fad10877ade974f09d9fe64f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Feb 2021 07:05:03 +0000 Subject: [PATCH 071/399] Bump mocha from 8.2.1 to 8.3.0 Bumps [mocha](https://github.com/mochajs/mocha) from 8.2.1 to 8.3.0. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v8.2.1...v8.3.0) Signed-off-by: dependabot[bot] --- package-lock.json | 614 +++++++++++----------------------------------- package.json | 2 +- 2 files changed, 145 insertions(+), 471 deletions(-) diff --git a/package-lock.json b/package-lock.json index a30abb8..3d51996 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.1", - "mocha": "^8.1.3", + "mocha": "^8.3.0", "npm-run-all": "^4.1.5", "rollup": "^2.38.5", "selenium-webdriver": "^4.0.0-alpha.7", @@ -436,7 +436,6 @@ "espree": "7.3.0", "esprima": "4.0.1", "fluent-syntax": "0.13.0", - "fsevents": "2.2.1", "glob": "7.1.6", "is-mergeable-object": "1.1.1", "jed": "1.1.1", @@ -1360,12 +1359,6 @@ "engines": [ "node >=0.10.0" ], - "dependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - }, "bin": { "bunyan": "bin/bunyan" }, @@ -1498,14 +1491,13 @@ } }, "node_modules/chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -1516,7 +1508,7 @@ "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" } }, "node_modules/chownr": { @@ -2151,9 +2143,9 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" @@ -3483,10 +3475,11 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -5390,35 +5383,35 @@ } }, "node_modules/mocha": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", - "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", + "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.4.3", - "debug": "4.2.0", - "diff": "4.0.2", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.14.0", + "js-yaml": "4.0.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", - "ms": "2.1.2", - "nanoid": "3.1.12", + "ms": "2.1.3", + "nanoid": "3.1.20", "serialize-javascript": "5.0.1", "strip-json-comments": "3.1.1", - "supports-color": "7.2.0", + "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.0.2", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { @@ -5427,89 +5420,39 @@ }, "engines": { "node": ">= 10.12.0" - } - }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mocha/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/mocha/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/mocha/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mocha/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/mocha/node_modules/escape-string-regexp": { @@ -5534,13 +5477,16 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/mocha/node_modules/locate-path": { @@ -5556,23 +5502,11 @@ } }, "node_modules/mocha/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/mocha/node_modules/nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || >=13.7" - } - }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -5597,136 +5531,37 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "node": ">=10" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mocha/node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, "node_modules/mocha/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/mocha/node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/moment": { @@ -7460,9 +7295,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.5.tgz", "integrity": "sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ==", "dev": true, - "dependencies": { - "fsevents": "~2.3.1" - }, "bin": { "rollup": "dist/bin/rollup" }, @@ -7473,20 +7305,6 @@ "fsevents": "~2.3.1" } }, - "node_modules/rollup/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -8899,8 +8717,7 @@ "dependencies": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" + "neo-async": "^2.5.0" }, "optionalDependencies": { "watchpack-chokidar2": "^2.0.1" @@ -9357,9 +9174,9 @@ } }, "node_modules/workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", - "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "node_modules/wrap-ansi": { @@ -10925,14 +10742,14 @@ } }, "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", + "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -11464,9 +11281,9 @@ "dev": true }, "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dispensary": { @@ -12572,9 +12389,9 @@ "dev": true }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -14148,106 +13965,61 @@ "dev": true }, "mocha": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", - "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", + "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.4.3", - "debug": "4.2.0", - "diff": "4.0.2", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.14.0", + "js-yaml": "4.0.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", - "ms": "2.1.2", - "nanoid": "3.1.12", + "ms": "2.1.3", + "nanoid": "3.1.20", "serialize-javascript": "5.0.1", "strip-json-comments": "3.1.1", - "supports-color": "7.2.0", + "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.0.2", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -14264,11 +14036,14 @@ "path-exists": "^4.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, "locate-path": { "version": "6.0.0", @@ -14280,15 +14055,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "p-limit": { @@ -14309,114 +14078,28 @@ "p-limit": "^3.0.2" } }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "has-flag": "^4.0.0" } }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } @@ -15807,15 +15490,6 @@ "dev": true, "requires": { "fsevents": "~2.3.1" - }, - "dependencies": { - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - } } }, "safe-buffer": { @@ -17390,9 +17064,9 @@ "dev": true }, "workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", - "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index 37391f7..e65d227 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.1", - "mocha": "^8.1.3", + "mocha": "^8.3.0", "npm-run-all": "^4.1.5", "rollup": "^2.38.5", "selenium-webdriver": "^4.0.0-alpha.7", From 80bb3e85af72d011b53cc5efb250ad24962964bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Feb 2021 08:02:08 +0000 Subject: [PATCH 072/399] Bump eslint from 7.19.0 to 7.20.0 Bumps [eslint](https://github.com/eslint/eslint) from 7.19.0 to 7.20.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.19.0...v7.20.0) Signed-off-by: dependabot[bot] --- package-lock.json | 46 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d51996..d2a644a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.1.1", "@rollup/plugin-replace": "^2.3.4", - "eslint": "^7.19.0", + "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", @@ -30,9 +30,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" @@ -2427,12 +2427,12 @@ } }, "node_modules/eslint": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", - "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -2444,7 +2444,7 @@ "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", - "esquery": "^1.2.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", @@ -2879,9 +2879,9 @@ } }, "node_modules/esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -9515,9 +9515,9 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" @@ -11528,12 +11528,12 @@ "dev": true }, "eslint": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", - "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -11545,7 +11545,7 @@ "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", - "esquery": "^1.2.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", @@ -11890,9 +11890,9 @@ "dev": true }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" diff --git a/package.json b/package.json index e65d227..3f90393 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.1.1", "@rollup/plugin-replace": "^2.3.4", - "eslint": "^7.19.0", + "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", From 3034037cb235229ba01a755f757e7de5cdfdac8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Feb 2021 08:41:49 +0000 Subject: [PATCH 073/399] Bump rollup from 2.38.5 to 2.39.0 Bumps [rollup](https://github.com/rollup/rollup) from 2.38.5 to 2.39.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.38.5...v2.39.0) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d2a644a..ff9fb89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", - "rollup": "^2.38.5", + "rollup": "^2.39.0", "selenium-webdriver": "^4.0.0-alpha.7", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" @@ -7291,9 +7291,9 @@ } }, "node_modules/rollup": { - "version": "2.38.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.5.tgz", - "integrity": "sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ==", + "version": "2.39.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.0.tgz", + "integrity": "sha512-+WR3bttcq7zE+BntH09UxaW3bQo3vItuYeLsyk4dL2tuwbeSKJuvwiawyhEnvRdRgrII0Uzk00FpctHO/zB1kw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -15484,9 +15484,9 @@ } }, "rollup": { - "version": "2.38.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.5.tgz", - "integrity": "sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ==", + "version": "2.39.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.0.tgz", + "integrity": "sha512-+WR3bttcq7zE+BntH09UxaW3bQo3vItuYeLsyk4dL2tuwbeSKJuvwiawyhEnvRdRgrII0Uzk00FpctHO/zB1kw==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index 3f90393..03a821c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", - "rollup": "^2.38.5", + "rollup": "^2.39.0", "selenium-webdriver": "^4.0.0-alpha.7", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" From bd4c714c0bd634aacdc058f66384abff07cc031e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Feb 2021 08:42:57 +0000 Subject: [PATCH 074/399] Bump @rollup/plugin-node-resolve from 11.1.1 to 11.2.0 Bumps [@rollup/plugin-node-resolve](https://github.com/rollup/plugins) from 11.1.1 to 11.2.0. - [Release notes](https://github.com/rollup/plugins/releases) - [Commits](https://github.com/rollup/plugins/compare/node-resolve-v11.1.1...node-resolve-v11.2.0) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d2a644a..79f5398 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@mozilla/rally": "^0.3.0", "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.1.1", + "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.3.4", "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", @@ -277,9 +277,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.1.tgz", - "integrity": "sha512-zlBXR4eRS+2m79TsUZWhsd0slrHUYdRx4JF+aVQm+MI0wsKdlpC2vlDVjmlGvtZY1vsefOT9w3JxvmWSBei+Lg==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", + "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -9727,9 +9727,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.1.tgz", - "integrity": "sha512-zlBXR4eRS+2m79TsUZWhsd0slrHUYdRx4JF+aVQm+MI0wsKdlpC2vlDVjmlGvtZY1vsefOT9w3JxvmWSBei+Lg==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", + "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", diff --git a/package.json b/package.json index 3f90393..6aa3cca 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@mozilla/rally": "^0.3.0", "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.1.1", + "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.3.4", "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", From 8f981970a9d6979606b6065dd59a1d2627cd7f24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Feb 2021 07:10:11 +0000 Subject: [PATCH 075/399] Bump selenium-webdriver from 4.0.0-alpha.8 to 4.0.0-beta.1 Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.0.0-alpha.8 to 4.0.0-beta.1. - [Release notes](https://github.com/SeleniumHQ/selenium/releases) - [Commits](https://github.com/SeleniumHQ/selenium/commits) Signed-off-by: dependabot[bot] --- package-lock.json | 39 +++++++++------------------------------ package.json | 2 +- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9dbbd5c..5ffb80f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "mocha": "^8.3.0", "npm-run-all": "^4.1.5", "rollup": "^2.39.0", - "selenium-webdriver": "^4.0.0-alpha.7", + "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" }, @@ -7341,14 +7341,14 @@ "dev": true }, "node_modules/selenium-webdriver": { - "version": "4.0.0-alpha.8", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.8.tgz", - "integrity": "sha512-yPSaiWySZTEbxuuWQMDqdXh3H3N4Aiw/bSUjpkKMPWWCysfPqUncrq6FewBqdxWD1wQKzy5yWaQMGsgTY/0rCQ==", + "version": "4.0.0-beta.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", + "integrity": "sha512-DJ10z6Yk+ZBaLrt1CLElytQ/FOayx29ANKDtmtyW1A6kCJx3+dsc5fFMOZxwzukDniyYsC3OObT5pUAsgkjpxQ==", "dev": true, "dependencies": { "jszip": "^3.5.0", "rimraf": "^2.7.1", - "tmp": "^0.1.0", + "tmp": "^0.2.1", "ws": "^7.3.1" }, "engines": { @@ -7379,18 +7379,6 @@ "rimraf": "bin.js" } }, - "node_modules/selenium-webdriver/node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -15528,14 +15516,14 @@ "dev": true }, "selenium-webdriver": { - "version": "4.0.0-alpha.8", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.8.tgz", - "integrity": "sha512-yPSaiWySZTEbxuuWQMDqdXh3H3N4Aiw/bSUjpkKMPWWCysfPqUncrq6FewBqdxWD1wQKzy5yWaQMGsgTY/0rCQ==", + "version": "4.0.0-beta.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", + "integrity": "sha512-DJ10z6Yk+ZBaLrt1CLElytQ/FOayx29ANKDtmtyW1A6kCJx3+dsc5fFMOZxwzukDniyYsC3OObT5pUAsgkjpxQ==", "dev": true, "requires": { "jszip": "^3.5.0", "rimraf": "^2.7.1", - "tmp": "^0.1.0", + "tmp": "^0.2.1", "ws": "^7.3.1" }, "dependencies": { @@ -15559,15 +15547,6 @@ "requires": { "glob": "^7.1.3" } - }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "requires": { - "rimraf": "^2.6.3" - } } } }, diff --git a/package.json b/package.json index 8cdf82c..fce7e4b 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "mocha": "^8.3.0", "npm-run-all": "^4.1.5", "rollup": "^2.39.0", - "selenium-webdriver": "^4.0.0-alpha.7", + "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" }, From 28f9b2a18c3e02cf47a914ab5cb22b02762dc9e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Feb 2021 08:15:06 +0000 Subject: [PATCH 076/399] Bump @rollup/plugin-replace from 2.3.4 to 2.4.0 Bumps [@rollup/plugin-replace](https://github.com/rollup/plugins) from 2.3.4 to 2.4.0. - [Release notes](https://github.com/rollup/plugins/releases) - [Commits](https://github.com/rollup/plugins/compare/replace-v2.3.4...replace-v2.4.0) Signed-off-by: dependabot[bot] --- package-lock.json | 17 ++++++++++------- package.json | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ffb80f..2d60b4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@mozilla/rally": "^0.3.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.3.4", + "@rollup/plugin-replace": "^2.4.0", "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", @@ -297,13 +297,16 @@ } }, "node_modules/@rollup/plugin-replace": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", - "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.0.tgz", + "integrity": "sha512-QGuKCj9fTegKtLh1zsxNWP5uVmUctbFOG9S8wIir5dDO7qzGyISmwrQjlyEN0H7ptz60+CFeVFi5x4aDQ5+L6g==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" } }, "node_modules/@rollup/pluginutils": { @@ -9729,9 +9732,9 @@ } }, "@rollup/plugin-replace": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", - "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.0.tgz", + "integrity": "sha512-QGuKCj9fTegKtLh1zsxNWP5uVmUctbFOG9S8wIir5dDO7qzGyISmwrQjlyEN0H7ptz60+CFeVFi5x4aDQ5+L6g==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", diff --git a/package.json b/package.json index fce7e4b..e480546 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@mozilla/rally": "^0.3.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.3.4", + "@rollup/plugin-replace": "^2.4.0", "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", From 6aebb763cf7e97efcc561adbb4c02d80c1d0f309 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Feb 2021 08:41:47 +0000 Subject: [PATCH 077/399] Bump @mozilla/rally from 0.3.0 to 0.4.0 Bumps [@mozilla/rally](https://github.com/mozilla-rally/rally-core-addon/tree/HEAD/support) from 0.3.0 to 0.4.0. - [Release notes](https://github.com/mozilla-rally/rally-core-addon/releases) - [Changelog](https://github.com/mozilla-rally/rally-core-addon/blob/master/support/CHANGELOG.md) - [Commits](https://github.com/mozilla-rally/rally-core-addon/commits/HEAD/support) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d60b4e..35fef42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.3.1", "license": "MPL-2.0", "devDependencies": { - "@mozilla/rally": "^0.3.0", + "@mozilla/rally": "^0.4.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.0", @@ -250,9 +250,9 @@ } }, "node_modules/@mozilla/rally": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.3.0.tgz", - "integrity": "sha512-3QyD+ZWkxiGUwebXXN7/Pqm0ItttsLmpEiOlByf20wGY7InVkUgcttF4E8oCk1QJBM7WyI4LNMrIz4X4n20Vew==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.4.0.tgz", + "integrity": "sha512-vaRcUeReNrw+ifMPVcs0D0yD4mkwx5W3aZB3YNUwsDwuUuRjy4ij5qO5CuJGGvzaU5GtINy+jc5lbJqr/pguFQ==", "dev": true }, "node_modules/@rollup/plugin-commonjs": { @@ -9697,9 +9697,9 @@ } }, "@mozilla/rally": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.3.0.tgz", - "integrity": "sha512-3QyD+ZWkxiGUwebXXN7/Pqm0ItttsLmpEiOlByf20wGY7InVkUgcttF4E8oCk1QJBM7WyI4LNMrIz4X4n20Vew==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.4.0.tgz", + "integrity": "sha512-vaRcUeReNrw+ifMPVcs0D0yD4mkwx5W3aZB3YNUwsDwuUuRjy4ij5qO5CuJGGvzaU5GtINy+jc5lbJqr/pguFQ==", "dev": true }, "@rollup/plugin-commonjs": { diff --git a/package.json b/package.json index e480546..e2ea362 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "^0.3.0", + "@mozilla/rally": "^0.4.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.0", From f272e68f57eff9a76a843c9fd0f4649efeac208a Mon Sep 17 00:00:00 2001 From: Alessio Placitelli Date: Mon, 22 Feb 2021 11:20:32 +0100 Subject: [PATCH 078/399] Change the template to react to pause commands --- README.md | 8 +++++--- src/background.js | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1ee8100..8090fca 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # Mozilla Rally study template. The purpose of this repository is to provide a starting point to build a Rally study. It contains: -1. an example [`manifest.json'](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) file. -2. an example background and content script in `src`. +1. an example [`manifest.json`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) file. +2. an example background and content script in `src/`. 3. a rollup config file that builds the files needed for the web extension using the source files in `src/` (the background & content scripts). 4. an example integration test that launches a browser & installs the add-on. 5. a `web-ext-config.js` file & an eslint configuration. + ## Getting started 1. Fork this repository. @@ -26,7 +27,8 @@ rally.initialize( "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", "kid":"Public key used in JWS spec Appendix A.3 example" - } + }, + // ... other required arguments ... ); ``` diff --git a/src/background.js b/src/background.js index 26d715a..ac37204 100644 --- a/src/background.js +++ b/src/background.js @@ -26,6 +26,13 @@ rally.initialize( // The following constant is automatically provided by // the build system. __ENABLE_DEVELOPER_MODE__, + (newState) => { + if (newState === "running") { + console.log("The study can run."); + } else { + console.log("The study must stop."); + } + } ).then(resolve => { // Initialize the study and start it. // Example: initialize the example module. From 23d79d1c58ddd2058edb236fcc95b86285ced537 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Feb 2021 07:12:29 +0000 Subject: [PATCH 079/399] Bump rollup from 2.39.0 to 2.39.1 Bumps [rollup](https://github.com/rollup/rollup) from 2.39.0 to 2.39.1. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.39.0...v2.39.1) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35fef42..d5e8313 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", - "rollup": "^2.39.0", + "rollup": "^2.39.1", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" @@ -7294,9 +7294,9 @@ } }, "node_modules/rollup": { - "version": "2.39.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.0.tgz", - "integrity": "sha512-+WR3bttcq7zE+BntH09UxaW3bQo3vItuYeLsyk4dL2tuwbeSKJuvwiawyhEnvRdRgrII0Uzk00FpctHO/zB1kw==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", + "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -15475,9 +15475,9 @@ } }, "rollup": { - "version": "2.39.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.0.tgz", - "integrity": "sha512-+WR3bttcq7zE+BntH09UxaW3bQo3vItuYeLsyk4dL2tuwbeSKJuvwiawyhEnvRdRgrII0Uzk00FpctHO/zB1kw==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", + "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index e2ea362..9991428 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", - "rollup": "^2.39.0", + "rollup": "^2.39.1", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" From 69bc2917eb2f62880caf470144c38e3b626358f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Feb 2021 07:12:34 +0000 Subject: [PATCH 080/399] Bump @rollup/plugin-replace from 2.4.0 to 2.4.1 Bumps [@rollup/plugin-replace](https://github.com/rollup/plugins) from 2.4.0 to 2.4.1. - [Release notes](https://github.com/rollup/plugins/releases) - [Commits](https://github.com/rollup/plugins/compare/replace-v2.4.0...replace-v2.4.1) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35fef42..83dff2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@mozilla/rally": "^0.4.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.4.0", + "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", @@ -297,9 +297,9 @@ } }, "node_modules/@rollup/plugin-replace": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.0.tgz", - "integrity": "sha512-QGuKCj9fTegKtLh1zsxNWP5uVmUctbFOG9S8wIir5dDO7qzGyISmwrQjlyEN0H7ptz60+CFeVFi5x4aDQ5+L6g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz", + "integrity": "sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -9732,9 +9732,9 @@ } }, "@rollup/plugin-replace": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.0.tgz", - "integrity": "sha512-QGuKCj9fTegKtLh1zsxNWP5uVmUctbFOG9S8wIir5dDO7qzGyISmwrQjlyEN0H7ptz60+CFeVFi5x4aDQ5+L6g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz", + "integrity": "sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", diff --git a/package.json b/package.json index e2ea362..c764661 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@mozilla/rally": "^0.4.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.4.0", + "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", From 474a18a93462e8a4705935a2163880f838f9bc81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 08:47:35 +0000 Subject: [PATCH 081/399] Bump eslint from 7.20.0 to 7.21.0 Bumps [eslint](https://github.com/eslint/eslint) from 7.20.0 to 7.21.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.20.0...v7.21.0) Signed-off-by: dependabot[bot] --- package-lock.json | 65 +++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e79778..5ae859c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.20.0", + "eslint": "^7.21.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", @@ -2430,13 +2430,13 @@ } }, "node_modules/eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", + "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", + "@eslint/eslintrc": "^0.4.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2449,7 +2449,7 @@ "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -2654,9 +2654,9 @@ } }, "node_modules/eslint/node_modules/@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2666,7 +2666,6 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -2693,15 +2692,20 @@ } }, "node_modules/eslint/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/eslint/node_modules/espree": { @@ -2728,9 +2732,9 @@ } }, "node_modules/eslint/node_modules/file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { "flat-cache": "^3.0.4" @@ -11519,13 +11523,13 @@ "dev": true }, "eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", + "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", + "@eslint/eslintrc": "^0.4.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -11538,7 +11542,7 @@ "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -11564,9 +11568,9 @@ }, "dependencies": { "@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -11576,7 +11580,6 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" } @@ -11594,9 +11597,9 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -11622,9 +11625,9 @@ } }, "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" diff --git a/package.json b/package.json index fd5bed7..51efcad 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.20.0", + "eslint": "^7.21.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", From 4dfb67ffb733641f53dea14ed33bbc0579af69c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 08:47:47 +0000 Subject: [PATCH 082/399] Bump rollup from 2.39.1 to 2.40.0 Bumps [rollup](https://github.com/rollup/rollup) from 2.39.1 to 2.40.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.39.1...v2.40.0) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e79778..3a9dc7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", - "rollup": "^2.39.1", + "rollup": "^2.40.0", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" @@ -7294,9 +7294,9 @@ } }, "node_modules/rollup": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", - "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.40.0.tgz", + "integrity": "sha512-WiOGAPbXoHu+TOz6hyYUxIksOwsY/21TRWoO593jgYt8mvYafYqQl+axaA8y1z2HFazNUUrsMSjahV2A6/2R9A==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -15475,9 +15475,9 @@ } }, "rollup": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", - "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.40.0.tgz", + "integrity": "sha512-WiOGAPbXoHu+TOz6hyYUxIksOwsY/21TRWoO593jgYt8mvYafYqQl+axaA8y1z2HFazNUUrsMSjahV2A6/2R9A==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index fd5bed7..502ee6f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.1", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", - "rollup": "^2.39.1", + "rollup": "^2.40.0", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" From e57627b30f5e92f6509db626cb97fbb9f46bb16c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Mar 2021 08:17:05 +0000 Subject: [PATCH 083/399] Bump eslint-plugin-mocha from 8.0.0 to 8.1.0 Bumps [eslint-plugin-mocha](https://github.com/lo1tuma/eslint-plugin-mocha) from 8.0.0 to 8.1.0. - [Release notes](https://github.com/lo1tuma/eslint-plugin-mocha/releases) - [Changelog](https://github.com/lo1tuma/eslint-plugin-mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/lo1tuma/eslint-plugin-mocha/compare/8.0.0...8.1.0) Signed-off-by: dependabot[bot] --- package-lock.json | 17 ++++++++++------- package.json | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d60872..806becc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.21.0", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-mocha": "^8.0.0", + "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.1", "mocha": "^8.3.0", @@ -2557,9 +2557,9 @@ } }, "node_modules/eslint-plugin-mocha": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.0.0.tgz", - "integrity": "sha512-n67etbWDz6NQM+HnTwZHyBwz/bLlYPOxUbw7bPuCyFujv7ZpaT/Vn6KTAbT02gf7nRljtYIjWcTxK/n8a57rQQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.1.0.tgz", + "integrity": "sha512-1EgHvXKRl7W3mq3sntZAi5T24agRMyiTPL4bSXe+B4GksYOjAPEWYx+J3eJg4It1l2NMNZJtk0gQyQ6mfiPhQg==", "dev": true, "dependencies": { "eslint-utils": "^2.1.0", @@ -2567,6 +2567,9 @@ }, "engines": { "node": ">=10.0.0" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, "node_modules/eslint-plugin-no-unsanitized": { @@ -11782,9 +11785,9 @@ } }, "eslint-plugin-mocha": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.0.0.tgz", - "integrity": "sha512-n67etbWDz6NQM+HnTwZHyBwz/bLlYPOxUbw7bPuCyFujv7ZpaT/Vn6KTAbT02gf7nRljtYIjWcTxK/n8a57rQQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.1.0.tgz", + "integrity": "sha512-1EgHvXKRl7W3mq3sntZAi5T24agRMyiTPL4bSXe+B4GksYOjAPEWYx+J3eJg4It1l2NMNZJtk0gQyQ6mfiPhQg==", "dev": true, "requires": { "eslint-utils": "^2.1.0", diff --git a/package.json b/package.json index e4a8621..b22618d 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.21.0", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-mocha": "^8.0.0", + "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.1", "mocha": "^8.3.0", From 5cae6438f8c01c85600366f53213cb5932029966 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Mar 2021 08:17:21 +0000 Subject: [PATCH 084/399] Bump geckodriver from 1.22.1 to 1.22.2 Bumps [geckodriver](https://github.com/vladikoff/node-geckodriver) from 1.22.1 to 1.22.2. - [Release notes](https://github.com/vladikoff/node-geckodriver/releases) - [Commits](https://github.com/vladikoff/node-geckodriver/compare/v1.22.1...v1.22.2) Signed-off-by: dependabot[bot] --- package-lock.json | 33 ++++++++++++++++++++++++--------- package.json | 2 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d60872..d4c1b3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.22.1", + "geckodriver": "^1.22.2", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", "rollup": "^2.40.0", @@ -3556,13 +3556,13 @@ } }, "node_modules/geckodriver": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.1.tgz", - "integrity": "sha512-pT5Wf3AVszsvu0I8XWQT6VX7GzVYtASxzluVMlMXb3wb+jlmE0IFNQ7VGfjpdDrwF/MraukmdFtVQLpSJH0M2A==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", + "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", "dev": true, "hasInstallScript": true, "dependencies": { - "adm-zip": "0.4.16", + "adm-zip": "0.5.3", "bluebird": "3.7.2", "got": "5.6.0", "https-proxy-agent": "5.0.0", @@ -3572,6 +3572,15 @@ "geckodriver": "bin/geckodriver" } }, + "node_modules/geckodriver/node_modules/adm-zip": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", + "integrity": "sha512-zsoTXEwRNCxBzRHLENFLuecCcwzzXiEhWo1r3GP68iwi8Q/hW2RrqgeY1nfJ/AhNQNWnZq/4v0TbfMsUkI+TYw==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/geckodriver/node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -12443,18 +12452,24 @@ } }, "geckodriver": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.1.tgz", - "integrity": "sha512-pT5Wf3AVszsvu0I8XWQT6VX7GzVYtASxzluVMlMXb3wb+jlmE0IFNQ7VGfjpdDrwF/MraukmdFtVQLpSJH0M2A==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", + "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", "dev": true, "requires": { - "adm-zip": "0.4.16", + "adm-zip": "0.5.3", "bluebird": "3.7.2", "got": "5.6.0", "https-proxy-agent": "5.0.0", "tar": "6.0.2" }, "dependencies": { + "adm-zip": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", + "integrity": "sha512-zsoTXEwRNCxBzRHLENFLuecCcwzzXiEhWo1r3GP68iwi8Q/hW2RrqgeY1nfJ/AhNQNWnZq/4v0TbfMsUkI+TYw==", + "dev": true + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", diff --git a/package.json b/package.json index e4a8621..f1be8f2 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.0.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.22.1", + "geckodriver": "^1.22.2", "mocha": "^8.3.0", "npm-run-all": "^4.1.5", "rollup": "^2.40.0", From cd4f56b7720fc4461e8cbe7fc8f8aa2a2a34b588 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Mar 2021 09:16:29 +0000 Subject: [PATCH 085/399] Bump mocha from 8.3.0 to 8.3.1 Bumps [mocha](https://github.com/mochajs/mocha) from 8.3.0 to 8.3.1. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v8.3.0...v8.3.1) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a01e7b..e6f4e9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.2", - "mocha": "^8.3.0", + "mocha": "^8.3.1", "npm-run-all": "^4.1.5", "rollup": "^2.40.0", "selenium-webdriver": "^4.0.0-beta.1", @@ -5402,9 +5402,9 @@ } }, "node_modules/mocha": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", - "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.1.tgz", + "integrity": "sha512-5SBMxANWqOv5bw3Hx+HVgaWlcWcFEQDUdaUAr1AUU+qwtx6cowhn7gEDT/DwQP7uYxnvShdUOVLbTYAHOEGfDQ==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -13977,9 +13977,9 @@ "dev": true }, "mocha": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", - "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.1.tgz", + "integrity": "sha512-5SBMxANWqOv5bw3Hx+HVgaWlcWcFEQDUdaUAr1AUU+qwtx6cowhn7gEDT/DwQP7uYxnvShdUOVLbTYAHOEGfDQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", diff --git a/package.json b/package.json index 66ef872..ccd65e4 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.2", - "mocha": "^8.3.0", + "mocha": "^8.3.1", "npm-run-all": "^4.1.5", "rollup": "^2.40.0", "selenium-webdriver": "^4.0.0-beta.1", From cd1fbdc94c732e3cb5e333ff286d78f3b52f4534 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Mar 2021 06:56:25 +0000 Subject: [PATCH 086/399] Bump rollup from 2.40.0 to 2.41.0 Bumps [rollup](https://github.com/rollup/rollup) from 2.40.0 to 2.41.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.40.0...v2.41.0) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e6f4e9a..3a39a81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.1", "npm-run-all": "^4.1.5", - "rollup": "^2.40.0", + "rollup": "^2.41.0", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" @@ -7310,9 +7310,9 @@ } }, "node_modules/rollup": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.40.0.tgz", - "integrity": "sha512-WiOGAPbXoHu+TOz6hyYUxIksOwsY/21TRWoO593jgYt8mvYafYqQl+axaA8y1z2HFazNUUrsMSjahV2A6/2R9A==", + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.0.tgz", + "integrity": "sha512-Gk76XHTggulWPH95q8V62bw6uqDH6UGvbD6LOa3QUyhuMF3eOuaeDHR7SLm1T9faitkpNrqzUAVYx47klcMnlA==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -15496,9 +15496,9 @@ } }, "rollup": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.40.0.tgz", - "integrity": "sha512-WiOGAPbXoHu+TOz6hyYUxIksOwsY/21TRWoO593jgYt8mvYafYqQl+axaA8y1z2HFazNUUrsMSjahV2A6/2R9A==", + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.0.tgz", + "integrity": "sha512-Gk76XHTggulWPH95q8V62bw6uqDH6UGvbD6LOa3QUyhuMF3eOuaeDHR7SLm1T9faitkpNrqzUAVYx47klcMnlA==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index ccd65e4..20f8ece 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.1", "npm-run-all": "^4.1.5", - "rollup": "^2.40.0", + "rollup": "^2.41.0", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" From bee4a1538bfa27420564b07043770a826c76b4fe Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Tue, 2 Mar 2021 14:44:21 -0800 Subject: [PATCH 087/399] Use exported rally.js run states, companion to https://github.com/mozilla-rally/rally-core-addon/pull/468 --- src/background.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/background.js b/src/background.js index ac37204..527ec73 100644 --- a/src/background.js +++ b/src/background.js @@ -4,7 +4,7 @@ import "webextension-polyfill"; -import Rally from "@mozilla/rally"; +import { Rally, runStates } from "@mozilla/rally"; // Example: import a module. import { @@ -27,7 +27,7 @@ rally.initialize( // the build system. __ENABLE_DEVELOPER_MODE__, (newState) => { - if (newState === "running") { + if (newState === runStates.RUNNING) { console.log("The study can run."); } else { console.log("The study must stop."); From d0a0f6200008b7387368c7993965038a283feb1a Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Thu, 4 Mar 2021 08:59:57 -0800 Subject: [PATCH 088/399] bump rally.js dependency to pick up runStates export --- package-lock.json | 63 +++++++++-------------------------------------- package.json | 2 +- 2 files changed, 13 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a39a81..1d0a1aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.3.1", "license": "MPL-2.0", "devDependencies": { - "@mozilla/rally": "^0.4.0", + "@mozilla/rally": "^0.5.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", @@ -250,9 +250,9 @@ } }, "node_modules/@mozilla/rally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.4.0.tgz", - "integrity": "sha512-vaRcUeReNrw+ifMPVcs0D0yD4mkwx5W3aZB3YNUwsDwuUuRjy4ij5qO5CuJGGvzaU5GtINy+jc5lbJqr/pguFQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.5.0.tgz", + "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", "dev": true }, "node_modules/@rollup/plugin-commonjs": { @@ -271,9 +271,6 @@ }, "engines": { "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.30.0" } }, "node_modules/@rollup/plugin-node-resolve": { @@ -291,9 +288,6 @@ }, "engines": { "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" } }, "node_modules/@rollup/plugin-replace": { @@ -304,9 +298,6 @@ "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" } }, "node_modules/@rollup/pluginutils": { @@ -2478,9 +2469,6 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-import-resolver-node": { @@ -2704,11 +2692,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/eslint/node_modules/espree": { @@ -2787,9 +2770,6 @@ }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint/node_modules/slice-ansi": { @@ -2804,9 +2784,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/eslint/node_modules/strip-ansi": { @@ -2846,10 +2823,6 @@ "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/espree": { @@ -3489,7 +3462,6 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -3563,7 +3535,6 @@ "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", "dev": true, - "hasInstallScript": true, "dependencies": { "adm-zip": "0.5.3", "bluebird": "3.7.2", @@ -5439,10 +5410,6 @@ }, "engines": { "node": ">= 10.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/argparse": { @@ -5461,11 +5428,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/mocha/node_modules/debug/node_modules/ms": { @@ -5560,9 +5522,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/mocha/node_modules/yargs": { @@ -7257,9 +7216,6 @@ "dependencies": { "is-core-module": "^2.1.0", "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { @@ -7912,6 +7868,11 @@ "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, "engines": { "node": ">=0.10.0" } @@ -9713,9 +9674,9 @@ } }, "@mozilla/rally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.4.0.tgz", - "integrity": "sha512-vaRcUeReNrw+ifMPVcs0D0yD4mkwx5W3aZB3YNUwsDwuUuRjy4ij5qO5CuJGGvzaU5GtINy+jc5lbJqr/pguFQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.5.0.tgz", + "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", "dev": true }, "@rollup/plugin-commonjs": { diff --git a/package.json b/package.json index 20f8ece..9000e1d 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "^0.4.0", + "@mozilla/rally": "^0.5.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", From ff3a3b21911874eb43644d12c05c2d2bcb5447c4 Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Thu, 4 Mar 2021 16:12:45 -0800 Subject: [PATCH 089/399] bump package-lock.json as well as package.json using npm7 --- package-lock.json | 9702 ++++++++++++++++++++++++++++++--------------- 1 file changed, 6458 insertions(+), 3244 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1d0a1aa..696bd3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,18 +39,18 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -96,6 +96,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -121,6 +130,7 @@ "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", "dev": true, "dependencies": { "core-js": "^2.6.5", @@ -198,10 +208,31 @@ "node": ">= 0.10.4" } }, + "node_modules/@devicefarmer/adbkit/node_modules/bluebird": { + "version": "2.9.34", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", + "dev": true + }, + "node_modules/@devicefarmer/adbkit/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@devicefarmer/adbkit/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/@eslint/eslintrc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", - "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -211,7 +242,6 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -219,24 +249,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@mdn/browser-compat-data": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz", @@ -271,6 +283,9 @@ }, "engines": { "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.30.0" } }, "node_modules/@rollup/plugin-node-resolve": { @@ -288,6 +303,9 @@ }, "engines": { "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, "node_modules/@rollup/plugin-replace": { @@ -298,6 +316,9 @@ "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" } }, "node_modules/@rollup/pluginutils": { @@ -312,6 +333,9 @@ }, "engines": { "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, "node_modules/@rollup/pluginutils/node_modules/estree-walker": { @@ -321,12 +345,13 @@ "dev": true }, "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true, + "peer": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/@szmarczak/http-timer": { @@ -341,12 +366,44 @@ "node": ">=6" } }, + "node_modules/@types/decompress": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.3.tgz", + "integrity": "sha512-W24e3Ycz1UZPgr1ZEDHlK4XnvOr+CpJH3qNsFeqXwwlW/9END9gxn3oJSsp7gYdiQxrXUHwUUd3xuzVz37MrZQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/download": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@types/download/-/download-6.2.4.tgz", + "integrity": "sha512-Lo5dy3ai6LNnbL663sgdzqL1eib11u1yKH6w3v3IXEOO4kRfQpMn1qWUTaumcHLACjFp1RcBx9tUXEvJoR3vcA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/decompress": "*", + "@types/got": "^8", + "@types/node": "*" + } + }, "node_modules/@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "node_modules/@types/got": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", + "integrity": "sha512-AaXSrIF99SjjtPVNmCmYb388HML+PKEJb/xmj4SbL2ZO0hHuETZZzyDIKfOqaEoAHZEuX4sC+FRFrHYJoIby6A==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -360,9 +417,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", - "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "version": "14.14.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz", + "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==", "dev": true }, "node_modules/@types/resolve": { @@ -389,6 +446,20 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "peer": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -405,7 +476,10 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, "node_modules/addons-linter": { "version": "2.13.1", @@ -456,27 +530,78 @@ "fsevents": "2.2.1" } }, + "node_modules/addons-linter/node_modules/@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/addons-linter/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/addons-linter/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/addons-linter/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=6.0" + "node": ">=4" + } + }, + "node_modules/addons-linter/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/addons-linter/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" } }, + "node_modules/addons-linter/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/addons-linter/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "node_modules/addons-linter/node_modules/eslint": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", @@ -526,109 +651,227 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/addons-linter/node_modules/fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "node_modules/addons-linter/node_modules/espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/addons-linter/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/addons-linter/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/addons-linter/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/addons-linter/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "flat-cache": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/addons-linter/node_modules/yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", + "node_modules/addons-linter/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "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" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/addons-scanner-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.0.0.tgz", - "integrity": "sha512-+BfePzqoo/7Nhum9LONGsga2xhNJYb+6k6j819pzcd2tqaaqDUJu+3lz4CQQYFcD8QoolB3ksfZcCPymleFq0A==", + "node_modules/addons-linter/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/addons-linter/node_modules/fsevents": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", "dev": true, - "dependencies": { - "@types/yauzl": "2.9.1", - "common-tags": "1.8.0", - "first-chunk-stream": "3.0.0", - "strip-bom-stream": "4.0.0", - "upath": "2.0.1", - "yauzl": "2.10.0" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "node_modules/addons-linter/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { - "node": ">=0.3.0" + "node": ">=4" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/addons-linter/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "dependencies": { - "debug": "4" + "glob": "^7.1.3" }, - "engines": { - "node": ">= 6.0.0" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/addons-linter/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/addons-linter/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/addons-linter/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/addons-linter/node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/addons-linter/node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/addons-linter/node_modules/yargs": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", + "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/addons-scanner-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.0.0.tgz", + "integrity": "sha512-+BfePzqoo/7Nhum9LONGsga2xhNJYb+6k6j819pzcd2tqaaqDUJu+3lz4CQQYFcD8QoolB3ksfZcCPymleFq0A==", + "dev": true, + "dependencies": { + "@types/yauzl": "2.9.1", + "common-tags": "1.8.0", + "first-chunk-stream": "3.0.0", + "strip-bom-stream": "4.0.0", + "upath": "2.0.1", + "yauzl": "2.10.0" }, + "peerDependencies": { + "@types/download": "6.2.4", + "body-parser": "1.19.0", + "download": "8.0.0", + "express": "4.17.1", + "safe-compare": "1.1.4" + } + }, + "node_modules/adm-zip": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", + "integrity": "sha512-zsoTXEwRNCxBzRHLENFLuecCcwzzXiEhWo1r3GP68iwi8Q/hW2RrqgeY1nfJ/AhNQNWnZq/4v0TbfMsUkI+TYw==", + "dev": true, "engines": { "node": ">=6.0" } }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } }, "node_modules/ajv": { "version": "6.12.6", @@ -640,6 +883,10 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-merge-patch": { @@ -650,6 +897,9 @@ "dependencies": { "fast-json-patch": "^2.0.6", "json-merge-patch": "^0.2.3" + }, + "peerDependencies": { + "ajv": ">=6.0.0" } }, "node_modules/ansi-align": { @@ -721,12 +971,12 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -739,6 +989,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/any-promise": { @@ -760,6 +1013,29 @@ "node": ">= 8" } }, + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "peer": true, + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/archiver": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", @@ -805,6 +1081,17 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, + "node_modules/archiver/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/archiver/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -819,6 +1106,22 @@ "node": ">= 6" } }, + "node_modules/archiver/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -873,40 +1176,30 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true, + "peer": true + }, "node_modules/array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/array-includes/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-map": { @@ -941,38 +1234,20 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", "dev": true, "dependencies": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "es-abstract": "^1.18.0-next.1" }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/array.prototype.flat/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/arrify": { @@ -1013,12 +1288,12 @@ } }, "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/async": { @@ -1124,52 +1399,25 @@ "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -1181,9 +1429,9 @@ } }, "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" @@ -1200,35 +1448,60 @@ } }, "node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, + "peer": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "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" }, "engines": { - "node": ">= 6" + "node": ">= 0.8" } }, - "node_modules/bluebird": { - "version": "2.9.34", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", - "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", - "dev": true + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true }, "node_modules/boolbase": { "version": "1.0.0", @@ -1253,6 +1526,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/camelcase": { @@ -1310,11 +1586,43 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "peer": true + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1330,6 +1638,13 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true, + "peer": true + }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -1337,12 +1652,15 @@ "dev": true }, "node_modules/builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bunyan": { @@ -1363,6 +1681,16 @@ "safe-json-stringify": "~1" } }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1385,40 +1713,52 @@ } }, "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", "dev": true, + "peer": true, "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { @@ -1437,6 +1777,9 @@ "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/capture-stack-trace": { @@ -1465,6 +1808,9 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/cheerio": { @@ -1528,6 +1874,15 @@ "rimraf": "^3.0.2" } }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/chrome-launcher/node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -1540,18 +1895,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/chrome-launcher/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1587,6 +1930,83 @@ "node": ">=0.10.0" } }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -1594,6 +2014,9 @@ "dev": true, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cliui": { @@ -1607,27 +2030,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -1679,9 +2081,9 @@ "dev": true }, "node_modules/colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, "node_modules/colors": { @@ -1703,6 +2105,27 @@ "wcwidth": "^1.0.0" } }, + "node_modules/columnify/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/columnify/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1744,9 +2167,9 @@ "optional": true }, "node_modules/compress-commons": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz", - "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", + "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", "dev": true, "dependencies": { "buffer-crc32": "^0.2.13", @@ -1810,6 +2233,30 @@ "node": ">=8" } }, + "node_modules/configstore/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/configstore/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", @@ -1819,21 +2266,63 @@ "node": ">=0.10.0" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, - "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true, + "peer": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true + "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.", + "dev": true, + "hasInstallScript": true }, "node_modules/core-util-is": { "version": "1.0.2", @@ -1858,9 +2347,9 @@ } }, "node_modules/crc32-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz", - "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dev": true, "dependencies": { "crc-32": "^1.2.0", @@ -1959,12 +2448,20 @@ "dev": true }, "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decamelize": { @@ -1974,6 +2471,9 @@ "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decode-uri-component": { @@ -1981,11 +2481,30 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, - "optional": true, "engines": { "node": ">=0.10" } }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "peer": true, + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -1998,6 +2517,166 @@ "node": ">=4" } }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "peer": true, + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "peer": true, + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "peer": true, + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "peer": true, + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "peer": true, + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "peer": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -2010,6 +2689,9 @@ "object-is": "^1.0.1", "object-keys": "^1.1.1", "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/deep-extend": { @@ -2086,55 +2768,31 @@ "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { + "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true, - "engines": { - "node": ">=0.4.0" - } + "peer": true }, "node_modules/diff": { "version": "5.0.0", @@ -2249,59 +2907,192 @@ "node": ">=8" } }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "node_modules/download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", "dev": true, - "optional": true, + "peer": true, "dependencies": { - "nan": "^2.14.0" + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" }, "engines": { - "node": ">=0.10" + "node": ">=10" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "node_modules/download/node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, + "peer": true, "dependencies": { - "readable-stream": "^2.0.2" + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "node_modules/download/node_modules/got/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "node_modules/download/node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "node_modules/download/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/download/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/download/node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "peer": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.14.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true, + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2339,26 +3130,33 @@ } }, "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-to-primitive": { @@ -2373,6 +3171,9 @@ }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es6-error": { @@ -2411,13 +3212,23 @@ "node": ">=8" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true, + "peer": true + }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { @@ -2469,6 +3280,9 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-import-resolver-node": { @@ -2481,6 +3295,21 @@ "resolve": "^1.13.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/eslint-module-utils": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", @@ -2494,6 +3323,21 @@ "node": ">=4" } }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -2505,6 +3349,12 @@ }, "engines": { "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, "node_modules/eslint-plugin-import": { @@ -2529,6 +3379,18 @@ }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -2544,6 +3406,12 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/eslint-plugin-mocha": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.1.0.tgz", @@ -2564,7 +3432,10 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==", - "dev": true + "dev": true, + "peerDependencies": { + "eslint": "^5 || ^6 || ^7" + } }, "node_modules/eslint-plugin-node": { "version": "11.1.0", @@ -2581,6 +3452,9 @@ }, "engines": { "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, "node_modules/eslint-plugin-node/node_modules/ignore": { @@ -2624,6 +3498,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { @@ -2644,272 +3521,91 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/eslint/node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { - "ms": "2.1.2" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=0.10" } }, - "node_modules/eslint/node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4.0" } }, - "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4.0" } }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/eslint/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/eslint/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", - "dev": true, - "dependencies": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/eslint/node_modules/table/node_modules/ajv": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.4.tgz", - "integrity": "sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "node_modules/espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node": ">=4.0" } }, "node_modules/estree-walker": { @@ -2927,10 +3623,21 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/event-to-promise": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=", + "deprecated": "Use promise-toolbox/fromEvent instead", "dev": true }, "node_modules/execa": { @@ -2951,6 +3658,24 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/execa/node_modules/is-stream": { @@ -2990,6 +3715,16 @@ "node": ">=0.10.0" } }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -3016,6 +3751,186 @@ "node": ">=0.10.0" } }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "peer": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "peer": true, + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "peer": true, + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3036,19 +3951,6 @@ "node": ">=0.10.0" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -3095,43 +3997,12 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, "engines": { "node": ">=0.10.0" } @@ -3206,15 +4077,25 @@ } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" } }, "node_modules/file-uri-to-path": { @@ -3224,6 +4105,31 @@ "dev": true, "optional": true }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", + "dev": true, + "peer": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3236,17 +4142,56 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/firefox-profile": { @@ -3271,6 +4216,15 @@ "firefox-profile": "lib/cli.js" } }, + "node_modules/firefox-profile/node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, "node_modules/firefox-profile/node_modules/async": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", @@ -3291,6 +4245,24 @@ "universalify": "^0.1.0" } }, + "node_modules/firefox-profile/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/firefox-profile/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/first-chunk-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", @@ -3310,17 +4282,16 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatstr": { @@ -3330,9 +4301,9 @@ "dev": true }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "node_modules/fluent-syntax": { @@ -3377,6 +4348,16 @@ "node": ">= 0.12" } }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3390,6 +4371,27 @@ "node": ">=0.10.0" } }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -3411,34 +4413,6 @@ "node": ">=10" } }, - "node_modules/fs-extra/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "node_modules/fs-extra/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -3462,6 +4436,7 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -3517,6 +4492,18 @@ "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", "dev": true }, + "node_modules/fx-runner/node_modules/shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "dependencies": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, "node_modules/fx-runner/node_modules/which": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", @@ -3535,6 +4522,7 @@ "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", "dev": true, + "hasInstallScript": true, "dependencies": { "adm-zip": "0.5.3", "bluebird": "3.7.2", @@ -3546,90 +4534,6 @@ "geckodriver": "bin/geckodriver" } }, - "node_modules/geckodriver/node_modules/adm-zip": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", - "integrity": "sha512-zsoTXEwRNCxBzRHLENFLuecCcwzzXiEhWo1r3GP68iwi8Q/hW2RrqgeY1nfJ/AhNQNWnZq/4v0TbfMsUkI+TYw==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/geckodriver/node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/geckodriver/node_modules/got": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", - "integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=", - "dev": true, - "dependencies": { - "create-error-class": "^3.0.1", - "duplexer2": "^0.1.4", - "is-plain-obj": "^1.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "node-status-codes": "^1.0.0", - "object-assign": "^4.0.1", - "parse-json": "^2.1.0", - "pinkie-promise": "^2.0.0", - "read-all-stream": "^3.0.0", - "readable-stream": "^2.0.5", - "timed-out": "^2.0.0", - "unzip-response": "^1.0.0", - "url-parse-lax": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/geckodriver/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/geckodriver/node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/geckodriver/node_modules/timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/geckodriver/node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3640,26 +4544,29 @@ } }, "node_modules/get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "dependencies": { "pump": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/get-value": { @@ -3696,12 +4603,15 @@ }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" @@ -3720,6 +4630,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/global-dirs/node_modules/ini": { @@ -3738,46 +4651,42 @@ }, "engines": { "node": ">=8" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" }, - "engines": { - "node": ">=8.6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/got": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", + "integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=", "dev": true, "dependencies": { - "pump": "^3.0.0" + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-plain-obj": "^1.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^2.0.0", + "unzip-response": "^1.0.0", + "url-parse-lax": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "node_modules/graceful-readlink": { @@ -3814,6 +4723,7 @@ "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, "dependencies": { "ajv": "^6.12.3", @@ -3835,6 +4745,15 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3844,13 +4763,39 @@ "node": ">=8" } }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "peer": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" } }, "node_modules/has-value": { @@ -3974,10 +4919,35 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true, + "peer": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "peer": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true, + "peer": true }, "node_modules/http-signature": { "version": "1.2.0", @@ -3994,37 +4964,19 @@ "npm": ">=1.3.7" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=6.0" + "node": ">= 6" } }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -4034,11 +4986,38 @@ "node": ">=8.12.0" } }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/ignore": { "version": "4.0.6", @@ -4056,9 +5035,9 @@ "dev": true }, "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", @@ -4066,6 +5045,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-lazy": { @@ -4108,6 +5090,30 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "peer": true, + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/into-stream/node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/invert-kv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", @@ -4115,6 +5121,19 @@ "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.10" } }, "node_modules/is-absolute": { @@ -4130,26 +5149,13 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "dependencies": { - "is-buffer": "^1.1.5" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" @@ -4165,6 +5171,9 @@ }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { @@ -4173,6 +5182,15 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "node_modules/is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4185,6 +5203,21 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -4193,12 +5226,15 @@ "optional": true }, "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-ci": { @@ -4214,35 +5250,25 @@ } }, "node_modules/is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "dependencies": { "has": "^1.0.3" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "dependencies": { - "is-buffer": "^1.1.5" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" @@ -4255,33 +5281,26 @@ "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", @@ -4292,14 +5311,20 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { "node": ">=0.10.0" } @@ -4345,6 +5370,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-mergeable-object": { @@ -4359,13 +5387,23 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true, + "peer": true + }, "node_modules/is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-npm": { @@ -4375,6 +5413,9 @@ "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-number": { @@ -4386,6 +5427,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -4395,10 +5448,20 @@ "node": ">=8" } }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "engines": { "node": ">=8" @@ -4445,15 +5508,19 @@ } }, "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "has-symbols": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-relative": { @@ -4490,6 +5557,9 @@ "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { @@ -4502,6 +5572,9 @@ }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typedarray": { @@ -4572,6 +5645,20 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "peer": true, + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, "node_modules/jed": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", @@ -4582,12 +5669,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=", + "deprecated": "Jetpack extensions are no longer supported by Firefox. Use web-ext instead to build a WebExtension.", "dev": true }, "node_modules/js-select": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", + "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.", "dev": true, "dependencies": { "JSONSelect": "0.2.1", @@ -4601,9 +5690,9 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", @@ -4677,19 +5766,34 @@ } }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { "graceful-fs": "^4.1.6" } }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/JSONSelect": { "version": "0.2.1", @@ -4722,12 +5826,6 @@ "npm": ">=1.4.28" } }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/jsonwebtoken/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -4753,12 +5851,15 @@ } }, "node_modules/jszip": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", - "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", + "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", "dev": true, "dependencies": { - "pako": "~1.0.2" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" } }, "node_modules/jwa": { @@ -4783,9 +5884,9 @@ } }, "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, "dependencies": { "json-buffer": "3.0.0" @@ -4869,6 +5970,21 @@ "marky": "^1.2.0" } }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -4876,57 +5992,52 @@ "dev": true }, "node_modules/load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", + "parse-json": "^4.0.0", + "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, "engines": { "node": ">=4" } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.defaults": { @@ -5022,6 +6133,18 @@ "node": ">=0.10.0" } }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -5032,24 +6155,37 @@ } }, "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "peer": true, "dependencies": { - "semver": "^6.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "engines": { - "node": ">=8" + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "peer": true, "bin": { - "semver": "bin/semver.js" + "semver": "bin/semver" } }, "node_modules/map-age-cleaner": { @@ -5093,6 +6229,16 @@ "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", "dev": true }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mem": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", @@ -5116,12 +6262,29 @@ "node": ">= 0.10.0" } }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true, + "peer": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5211,6 +6374,16 @@ "node": ">=0.10.0" } }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/micromatch/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -5251,22 +6424,35 @@ "node": ">=0.10.0" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", "dev": true, "dependencies": { - "mime-db": "1.45.0" + "mime-db": "1.46.0" }, "engines": { "node": ">= 0.6" @@ -5347,19 +6533,6 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -5410,6 +6583,10 @@ }, "engines": { "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/argparse": { @@ -5418,46 +6595,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", @@ -5470,48 +6607,12 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -5522,24 +6623,9 @@ }, "engines": { "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "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" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/moment": { @@ -5553,9 +6639,9 @@ } }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/multimatch": { @@ -5707,6 +6793,16 @@ "ncp": "bin/ncp" } }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5797,12 +6893,41 @@ } }, "node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, + "peer": true, + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/normalize-url/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/normalize-url/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "peer": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/npm-run-all": { @@ -5869,101 +6994,47 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/npm-run-all/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=4.8" } }, - "node_modules/npm-run-all/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.8.0" } }, - "node_modules/npm-run-all/node_modules/pify": { + "node_modules/npm-run-all/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/npm-run-all/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, "engines": { "node": ">=4" } @@ -5998,15 +7069,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-all/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/npm-run-all/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6098,6 +7160,57 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6112,22 +7225,28 @@ } }, "node_modules/object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { @@ -6165,6 +7284,9 @@ }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.pick": { @@ -6181,40 +7303,34 @@ } }, "node_modules/object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.2", "has": "^1.0.3" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.values/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, + "peer": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8" } }, "node_modules/once": { @@ -6236,6 +7352,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/open": { @@ -6249,6 +7368,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { @@ -6280,6 +7402,9 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/os-shim": { @@ -6292,12 +7417,13 @@ } }, "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "dev": true, + "peer": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/p-defer": { @@ -6306,64 +7432,212 @@ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true, "engines": { - "node": ">=4" + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "peer": true, + "dependencies": { + "p-timeout": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "peer": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "node_modules/package-json/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/package-json/node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.6" } }, - "node_modules/p-locate": { + "node_modules/package-json/node_modules/http-cache-semantics": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/package-json/node_modules/normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { "node": ">=8" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/package-json/node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "node_modules/package-json/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/package-json/node_modules/semver": { @@ -6375,6 +7649,18 @@ "semver": "bin/semver.js" } }, + "node_modules/package-json/node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -6394,18 +7680,15 @@ } }, "node_modules/parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" + "error-ex": "^1.2.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/parse5": { @@ -6417,6 +7700,16 @@ "@types/node": "*" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -6467,13 +7760,20 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true, + "peer": true + }, "node_modules/path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { - "pify": "^2.0.0" + "pify": "^3.0.0" }, "engines": { "node": ">=4" @@ -6498,6 +7798,9 @@ "dev": true, "engines": { "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pidtree": { @@ -6513,12 +7816,12 @@ } }, "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/pinkie": { @@ -6626,15 +7929,6 @@ "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -6667,6 +7961,10 @@ }, "engines": { "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/prelude-ls": { @@ -6679,12 +7977,12 @@ } }, "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, "node_modules/printj": { @@ -6727,6 +8025,20 @@ "node": ">=0.4.0" } }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "peer": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -6765,14 +8077,30 @@ } }, "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true, + "peer": true, "engines": { "node": ">=0.6" } }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "peer": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/quick-format-unescaped": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", @@ -6794,6 +8122,32 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -6832,14 +8186,14 @@ } }, "node_modules/read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "dependencies": { - "load-json-file": "^2.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "path-type": "^3.0.0" }, "engines": { "node": ">=4" @@ -6870,6 +8224,21 @@ "node": ">=4" } }, + "node_modules/read-pkg-up/node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -6907,20 +8276,46 @@ "node": ">=4" } }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "node_modules/read-pkg-up/node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, "engines": { "node": ">=4" } @@ -6992,27 +8387,9 @@ }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/regexp.prototype.flags/node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "node_modules/regexp.prototype.flags/node_modules/get-intrinsic": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", - "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpp": { @@ -7022,6 +8399,9 @@ "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/registry-auth-token": { @@ -7105,6 +8485,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "node_modules/relaxed-json/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/relaxed-json/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -7157,6 +8546,7 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -7184,6 +8574,15 @@ "node": ">= 6" } }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7209,13 +8608,16 @@ "dev": true }, "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { @@ -7231,6 +8633,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true, "optional": true }, @@ -7254,15 +8657,18 @@ } }, "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { @@ -7286,6 +8692,16 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/safe-compare": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-compare/-/safe-compare-1.1.4.tgz", + "integrity": "sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-alloc": "^1.2.0" + } + }, "node_modules/safe-json-stringify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", @@ -7315,6 +8731,20 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "peer": true, + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, "node_modules/selenium-webdriver": { "version": "4.0.0-beta.1", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", @@ -7330,18 +8760,6 @@ "node": ">= 10.15.0" } }, - "node_modules/selenium-webdriver/node_modules/jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, "node_modules/selenium-webdriver/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -7355,10 +8773,13 @@ } }, "node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -7387,6 +8808,55 @@ "semver": "bin/semver.js" } }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "peer": true + }, "node_modules/serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", @@ -7396,6 +8866,22 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "peer": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -7440,6 +8926,23 @@ "node": ">=0.10.0" } }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true, + "peer": true + }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -7475,16 +8978,10 @@ } }, "node_modules/shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "dependencies": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true }, "node_modules/shellwords": { "version": "0.1.1", @@ -7514,7 +9011,12 @@ "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/signal-exit": { "version": "3.0.3", @@ -7523,53 +9025,20 @@ "dev": true }, "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" + "node": ">=10" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/snapdragon": { @@ -7620,61 +9089,82 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "optional": true, "dependencies": { - "kind-of": "^6.0.0" + "kind-of": "^3.2.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "dependencies": { - "kind-of": "^6.0.0" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "dependencies": { - "kind-of": "^3.2.0" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", @@ -7687,32 +9177,74 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "dependencies": { - "is-descriptor": "^0.1.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { "node": ">=0.10.0" } }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -7724,15 +9256,41 @@ } }, "node_modules/sonic-boom": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.0.tgz", - "integrity": "sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", + "integrity": "sha512-/B4tAuK2+hIlR94GhhWU1mJHWk5lt0CEuBvG0kvk1qIAzQc4iB1TieMio8DCZxY+Y7tsuzOxSUDOGmaUm3vXMg==", "dev": true, "dependencies": { "atomic-sleep": "^1.0.0", "flatstr": "^1.0.12" } }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "peer": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "peer": true, + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7767,9 +9325,9 @@ } }, "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true, "optional": true }, @@ -7784,6 +9342,7 @@ "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", "dev": true, + "hasInstallScript": true, "dependencies": { "concat-stream": "^1.4.7", "os-shim": "^0.1.2" @@ -7816,9 +9375,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "dev": true }, "node_modules/split": { @@ -7904,6 +9463,93 @@ "node": ">=0.10.0" } }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stream-parser": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", @@ -7913,6 +9559,21 @@ "debug": "2" } }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -7936,6 +9597,16 @@ "node": ">= 10" } }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -7946,9 +9617,9 @@ } }, "node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", @@ -7959,80 +9630,68 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.padend": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", - "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.18.0-next.2" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", - "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", - "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/strip-bom-buf": { @@ -8060,6 +9719,16 @@ "node": ">=8" } }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "peer": true, + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -8076,85 +9745,83 @@ "dev": true, "engines": { "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, + "peer": true, "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "escape-string-regexp": "^1.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/table/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/strip-outer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, + "peer": true, "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "engines": { - "node": ">=6" + "node": ">=10.0.0" } }, - "node_modules/table/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/table/node_modules/ajv": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", + "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/tar": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", @@ -8173,33 +9840,22 @@ } }, "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, + "peer": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, "node_modules/term-size": { @@ -8209,6 +9865,9 @@ "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/text-table": { @@ -8244,6 +9903,15 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "node_modules/timed-out": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", + "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -8256,17 +9924,12 @@ "node": ">=8.17.0" } }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } + "peer": true }, "node_modules/to-object-path": { "version": "0.3.0", @@ -8331,6 +9994,16 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/tosource": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", @@ -8369,7 +10042,33 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "peer": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/tsconfig-paths": { "version": "3.9.0", @@ -8383,15 +10082,6 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -8440,6 +10130,20 @@ "node": ">=8" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "peer": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -8455,6 +10159,29 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/unbox-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", + "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.0", + "has-symbols": "^1.0.0", + "which-boxed-primitive": "^1.0.1" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "peer": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -8471,6 +10198,16 @@ "node": ">=0.10.0" } }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -8484,12 +10221,22 @@ } }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8" } }, "node_modules/unset-value": { @@ -8586,12 +10333,15 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" @@ -8601,19 +10351,30 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true, "optional": true }, "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "dependencies": { - "prepend-http": "^2.0.0" + "prepend-http": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" + } + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" } }, "node_modules/use": { @@ -8632,6 +10393,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -8642,9 +10413,9 @@ } }, "node_modules/v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "node_modules/validate-npm-package-license": { @@ -8657,6 +10428,16 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -8675,7 +10456,11 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "dev": true + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/watchpack": { "version": "1.7.5", @@ -8683,11 +10468,11 @@ "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "dependencies": { - "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, "optionalDependencies": { + "chokidar": "^3.4.1", "watchpack-chokidar2": "^2.0.1" } }, @@ -8761,13 +10546,13 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", "dev": true, "optional": true, "dependencies": { "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", - "fsevents": "^1.2.7", "glob-parent": "^3.1.0", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", @@ -8776,6 +10561,9 @@ "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" } }, "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { @@ -8811,7 +10599,9 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -8861,6 +10651,16 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -8980,21 +10780,121 @@ "web-ext": "bin/web-ext" }, "engines": { - "node": ">=10.0.0", - "npm": ">=5.6.0" + "node": ">=10.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/web-ext/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/web-ext/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-ext/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-ext/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web-ext/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-ext/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/web-ext/node_modules/parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web-ext/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/web-ext/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-ext/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/web-ext/node_modules/ws": { @@ -9004,6 +10904,86 @@ "dev": true, "engines": { "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/web-ext/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/web-ext/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-ext/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/web-ext/node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/web-ext/node_modules/yargs-parser/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/web-ext/node_modules/yargs/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/webextension-polyfill": { @@ -9056,6 +11036,22 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -9159,27 +11155,9 @@ }, "engines": { "node": ">=10" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -9225,12 +11203,24 @@ } }, "node_modules/ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", "dev": true, "engines": { "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/xdg-basedir": { @@ -9264,6 +11254,16 @@ "node": ">=4.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", @@ -9280,25 +11280,21 @@ "dev": true }, "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/yargs-parser": { @@ -9334,89 +11330,6 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/yargs/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -9434,6 +11347,9 @@ "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/zip-dir": { @@ -9452,14 +11368,23 @@ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, + "node_modules/zip-dir/node_modules/jszip": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", + "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "dev": true, + "dependencies": { + "pako": "~1.0.2" + } + }, "node_modules/zip-stream": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz", - "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "dev": true, "dependencies": { "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.2", + "compress-commons": "^4.1.0", "readable-stream": "^3.6.0" }, "engines": { @@ -9492,18 +11417,18 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -9543,6 +11468,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -9612,6 +11543,29 @@ "debug": "~2.6.3", "node-forge": "^0.10.0", "split": "~0.3.3" + }, + "dependencies": { + "bluebird": { + "version": "2.9.34", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "@devicefarmer/adbkit-logcat": { @@ -9630,9 +11584,9 @@ } }, "@eslint/eslintrc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", - "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -9642,26 +11596,8 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@mdn/browser-compat-data": { @@ -9738,10 +11674,11 @@ } }, "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "peer": true }, "@szmarczak/http-timer": { "version": "1.1.2", @@ -9752,12 +11689,44 @@ "defer-to-connect": "^1.0.1" } }, + "@types/decompress": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.3.tgz", + "integrity": "sha512-W24e3Ycz1UZPgr1ZEDHlK4XnvOr+CpJH3qNsFeqXwwlW/9END9gxn3oJSsp7gYdiQxrXUHwUUd3xuzVz37MrZQ==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/download": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@types/download/-/download-6.2.4.tgz", + "integrity": "sha512-Lo5dy3ai6LNnbL663sgdzqL1eib11u1yKH6w3v3IXEOO4kRfQpMn1qWUTaumcHLACjFp1RcBx9tUXEvJoR3vcA==", + "dev": true, + "peer": true, + "requires": { + "@types/decompress": "*", + "@types/got": "^8", + "@types/node": "*" + } + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/got": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", + "integrity": "sha512-AaXSrIF99SjjtPVNmCmYb388HML+PKEJb/xmj4SbL2ZO0hHuETZZzyDIKfOqaEoAHZEuX4sC+FRFrHYJoIby6A==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -9771,9 +11740,9 @@ "dev": true }, "@types/node": { - "version": "14.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", - "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", + "version": "14.14.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz", + "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==", "dev": true }, "@types/resolve": { @@ -9800,6 +11769,17 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "peer": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -9810,7 +11790,8 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "dev": true, + "requires": {} }, "addons-linter": { "version": "2.13.1", @@ -9853,21 +11834,66 @@ "yauzl": "2.10.0" }, "dependencies": { + "@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "ms": "2.1.2" + "color-name": "1.1.3" } }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "eslint": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", @@ -9913,6 +11939,51 @@ "v8-compile-cache": "^2.0.3" } }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "fsevents": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", @@ -9920,19 +11991,70 @@ "dev": true, "optional": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "yargs": { @@ -9967,9 +12089,9 @@ } }, "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", + "integrity": "sha512-zsoTXEwRNCxBzRHLENFLuecCcwzzXiEhWo1r3GP68iwi8Q/hW2RrqgeY1nfJ/AhNQNWnZq/4v0TbfMsUkI+TYw==", "dev": true }, "agent-base": { @@ -9979,23 +12101,6 @@ "dev": true, "requires": { "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "ajv": { @@ -10076,9 +12181,9 @@ "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "ansi-styles": { @@ -10106,6 +12211,25 @@ "picomatch": "^2.0.4" } }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "peer": true, + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true, + "peer": true + } + } + }, "archiver": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", @@ -10127,6 +12251,17 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -10137,6 +12272,19 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } } } }, @@ -10200,36 +12348,24 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true, + "peer": true + }, "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "array-map": { @@ -10258,34 +12394,14 @@ "optional": true }, "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "es-abstract": "^1.18.0-next.1" } }, "arrify": { @@ -10317,9 +12433,9 @@ "optional": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -10403,38 +12519,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -10454,9 +12538,9 @@ } }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bindings": { @@ -10464,41 +12548,66 @@ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, - "optional": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "peer": true, "requires": { - "file-uri-to-path": "1.0.0" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, + "peer": true, "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "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" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true } } }, - "bluebird": { - "version": "2.9.34", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", - "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", - "dev": true - }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -10574,6 +12683,24 @@ "ieee754": "^1.1.13" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "peer": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "peer": true + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -10586,6 +12713,13 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true, + "peer": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -10593,9 +12727,9 @@ "dev": true }, "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true }, "bunyan": { @@ -10610,6 +12744,13 @@ "safe-json-stringify": "~1" } }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "peer": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -10629,36 +12770,45 @@ } }, "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", "dev": true, + "peer": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" }, "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "peer": true + }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true, + "peer": true } } }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" } }, "callsites": { @@ -10745,6 +12895,12 @@ "rimraf": "^3.0.2" }, "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -10753,15 +12909,6 @@ "requires": { "minimist": "^1.2.5" } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } } } }, @@ -10793,6 +12940,69 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true } } }, @@ -10811,23 +13021,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "clone": { @@ -10872,9 +13065,9 @@ "dev": true }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, "colors": { @@ -10891,6 +13084,23 @@ "requires": { "strip-ansi": "^3.0.0", "wcwidth": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "combined-stream": { @@ -10928,9 +13138,9 @@ "optional": true }, "compress-commons": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz", - "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", + "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", "dev": true, "requires": { "buffer-crc32": "^0.2.13", @@ -10982,6 +13192,23 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "contains-path": { @@ -10990,6 +13217,37 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "peer": true + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "peer": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true, + "peer": true + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -11020,9 +13278,9 @@ } }, "crc32-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz", - "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dev": true, "requires": { "crc-32": "^1.2.0", @@ -11102,12 +13360,12 @@ "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { @@ -11120,16 +13378,165 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, - "optional": true + "peer": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "peer": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "peer": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "peer": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "peer": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "peer": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "peer": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "peer": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "peer": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "peer": true + } + } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dev": true, + "peer": true, "requires": { - "mimic-response": "^1.0.0" + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true, + "peer": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "peer": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "peer": true + } } }, "deep-equal": { @@ -11206,40 +13613,6 @@ "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } } }, "delayed-stream": { @@ -11248,6 +13621,20 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "peer": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true, + "peer": true + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -11345,6 +13732,101 @@ "is-obj": "^2.0.0" } }, + "download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", + "dev": true, + "peer": true, + "requires": { + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "peer": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "peer": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "peer": true + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "peer": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "peer": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true, + "peer": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "peer": true, + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, "dtrace-provider": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", @@ -11389,12 +13871,26 @@ "safe-buffer": "^5.0.1" } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true, + "peer": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "peer": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -11429,23 +13925,27 @@ } }, "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" } }, "es-to-primitive": { @@ -11473,222 +13973,78 @@ }, "es6-promisify": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", - "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", - "dev": true, - "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ajv": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.4.tgz", - "integrity": "sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - } - } - } + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", + "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" } }, "eslint-import-resolver-node": { @@ -11699,6 +14055,23 @@ "requires": { "debug": "^2.6.9", "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "eslint-module-utils": { @@ -11709,6 +14082,23 @@ "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "eslint-plugin-es": { @@ -11742,6 +14132,15 @@ "tsconfig-paths": "^3.9.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -11751,6 +14150,12 @@ "esutils": "^2.0.2", "isarray": "^1.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -11768,7 +14173,8 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-node": { "version": "11.1.0", @@ -11832,13 +14238,13 @@ "dev": true }, "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, "dependencies": { @@ -11908,6 +14314,13 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "peer": true + }, "event-to-promise": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", @@ -11931,6 +14344,15 @@ "strip-final-newline": "^2.0.0" }, "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -11961,6 +14383,16 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -11980,9 +14412,165 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "peer": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true } } }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "peer": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "peer": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -11998,18 +14586,6 @@ "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "extglob": { @@ -12049,37 +14625,12 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "optional": true } } }, @@ -12146,14 +14697,21 @@ } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, + "file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "dev": true, + "peer": true + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -12161,6 +14719,25 @@ "dev": true, "optional": true }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true, + "peer": true + }, + "filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", + "dev": true, + "peer": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -12170,13 +14747,48 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "peer": true, + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + } + } + }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, @@ -12199,6 +14811,12 @@ "xml2js": "~0.4.4" }, "dependencies": { + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, "async": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", @@ -12218,6 +14836,21 @@ "jsonfile": "^4.0.0", "universalify": "^0.1.0" } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true } } }, @@ -12234,14 +14867,13 @@ "dev": true }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatstr": { @@ -12251,9 +14883,9 @@ "dev": true }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "fluent-syntax": { @@ -12286,6 +14918,13 @@ "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "peer": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -12296,6 +14935,24 @@ "map-cache": "^0.2.2" } }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "peer": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -12312,32 +14969,6 @@ "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^1.0.0" - }, - "dependencies": { - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true - } } }, "fs-minipass": { @@ -12403,6 +15034,18 @@ "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", "dev": true }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, "which": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", @@ -12426,74 +15069,6 @@ "got": "5.6.0", "https-proxy-agent": "5.0.0", "tar": "6.0.2" - }, - "dependencies": { - "adm-zip": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", - "integrity": "sha512-zsoTXEwRNCxBzRHLENFLuecCcwzzXiEhWo1r3GP68iwi8Q/hW2RrqgeY1nfJ/AhNQNWnZq/4v0TbfMsUkI+TYw==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "got": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", - "integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=", - "dev": true, - "requires": { - "create-error-class": "^3.0.1", - "duplexer2": "^0.1.4", - "is-plain-obj": "^1.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "node-status-codes": "^1.0.0", - "object-assign": "^4.0.1", - "parse-json": "^2.1.0", - "pinkie-promise": "^2.0.0", - "read-all-stream": "^3.0.0", - "readable-stream": "^2.0.5", - "timed-out": "^2.0.0", - "unzip-response": "^1.0.0", - "url-parse-lax": "^1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } } }, "get-caller-file": { @@ -12503,9 +15078,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -12514,9 +15089,9 @@ } }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" @@ -12553,9 +15128,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -12588,39 +15163,33 @@ } }, "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", + "integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=", "dev": true, "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-plain-obj": "^1.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^2.0.0", + "unzip-response": "^1.0.0", + "url-parse-lax": "^1.0.0" } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "graceful-readlink": { @@ -12666,18 +15235,41 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "peer": true + }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "peer": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -12781,10 +15373,34 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true, + "peer": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "peer": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true, + "peer": true + } + } }, "http-signature": { "version": "1.2.0", @@ -12805,23 +15421,6 @@ "requires": { "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "human-signals": { @@ -12830,6 +15429,16 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -12849,9 +15458,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -12892,12 +15501,39 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "peer": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "dependencies": { + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true, + "peer": true + } + } + }, "invert-kv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", "dev": true }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "peer": true + }, "is-absolute": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", @@ -12908,25 +15544,13 @@ } }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-arguments": { @@ -12944,13 +15568,28 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" } }, "is-buffer": { @@ -12961,9 +15600,9 @@ "optional": true }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-ci": { @@ -12976,34 +15615,22 @@ } }, "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-date-object": { @@ -13013,24 +15640,15 @@ "dev": true }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-docker": { @@ -13040,11 +15658,14 @@ "dev": true }, "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, - "optional": true + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } }, "is-extglob": { "version": "2.1.1", @@ -13089,10 +15710,17 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true, + "peer": true + }, "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-npm": { @@ -13107,16 +15735,29 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "peer": true + }, "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, "is-plain-obj": { @@ -13151,11 +15792,12 @@ } }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { + "call-bind": "^1.0.2", "has-symbols": "^1.0.1" } }, @@ -13251,6 +15893,17 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "peer": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "jed": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", @@ -13280,9 +15933,9 @@ "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -13350,12 +16003,21 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "jsonify": { @@ -13388,12 +16050,6 @@ "semver": "^5.6.0" }, "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -13415,12 +16071,15 @@ } }, "jszip": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", - "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", + "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", "dev": true, "requires": { - "pako": "~1.0.2" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" } }, "jwa": { @@ -13445,9 +16104,9 @@ } }, "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, "requires": { "json-buffer": "3.0.0" @@ -13514,6 +16173,23 @@ "requires": { "debug": "^2.6.8", "marky": "^1.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "lines-and-columns": { @@ -13523,47 +16199,42 @@ "dev": true }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", + "parse-json": "^4.0.0", + "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.defaults": { @@ -13653,6 +16324,15 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", @@ -13663,19 +16343,29 @@ } }, "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "peer": true, "requires": { - "semver": "^6.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "peer": true + }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true } } }, @@ -13711,6 +16401,13 @@ "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", "dev": true }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "peer": true + }, "mem": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", @@ -13728,12 +16425,26 @@ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true, + "peer": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "peer": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -13812,6 +16523,13 @@ } } }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -13847,19 +16565,26 @@ } } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "peer": true + }, "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", "dev": true }, "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", "dev": true, "requires": { - "mime-db": "1.45.0" + "mime-db": "1.46.0" } }, "mimic-fn": { @@ -13917,18 +16642,6 @@ "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "mkdirp": { @@ -13976,39 +16689,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, "js-yaml": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", @@ -14018,39 +16698,12 @@ "argparse": "^2.0.1" } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -14059,21 +16712,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "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" - } } } }, @@ -14085,9 +16723,9 @@ "optional": true }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multimatch": { @@ -14214,6 +16852,13 @@ "dev": true, "optional": true }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "peer": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -14293,10 +16938,35 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "peer": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "peer": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "peer": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } }, "npm-run-all": { "version": "4.1.5", @@ -14363,66 +17033,24 @@ "which": "^1.2.9" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -14444,12 +17072,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14522,6 +17144,47 @@ "is-descriptor": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -14535,18 +17198,18 @@ } }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -14589,36 +17252,25 @@ } }, "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.2", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "peer": true, + "requires": { + "ee-first": "1.1.1" } }, "once": { @@ -14681,10 +17333,11 @@ "dev": true }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "peer": true }, "p-defer": { "version": "1.0.0", @@ -14692,6 +17345,23 @@ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "peer": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "peer": true + }, "p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", @@ -14699,27 +17369,37 @@ "dev": true }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "peer": true, + "requires": { + "p-finally": "^1.0.0" } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "package-json": { @@ -14734,11 +17414,101 @@ "semver": "^6.2.0" }, "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } } } }, @@ -14758,15 +17528,12 @@ } }, "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" + "error-ex": "^1.2.0" } }, "parse5": { @@ -14778,6 +17545,13 @@ "@types/node": "*" } }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "peer": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -14816,13 +17590,20 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true, + "peer": true + }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "^2.0.0" + "pify": "^3.0.0" } }, "pend": { @@ -14850,9 +17631,9 @@ "dev": true }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pinkie": { @@ -14936,12 +17717,6 @@ "p-limit": "^1.1.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -14976,9 +17751,9 @@ "dev": true }, "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "printj": { @@ -15012,6 +17787,17 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "peer": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -15044,10 +17830,23 @@ } }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "peer": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "peer": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } }, "quick-format-unescaped": { "version": "4.0.1", @@ -15070,6 +17869,26 @@ "safe-buffer": "^5.1.0" } }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "peer": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "peer": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -15101,14 +17920,14 @@ } }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "^2.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -15130,6 +17949,18 @@ "locate-path": "^2.0.0" } }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -15158,17 +17989,37 @@ "p-limit": "^1.1.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } } } }, @@ -15230,29 +18081,6 @@ "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "get-intrinsic": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", - "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - } } }, "regexpp": { @@ -15324,6 +18152,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -15388,6 +18222,14 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } } }, "require-directory": { @@ -15409,12 +18251,12 @@ "dev": true }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -15448,9 +18290,9 @@ "optional": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -15471,6 +18313,16 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safe-compare": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-compare/-/safe-compare-1.1.4.tgz", + "integrity": "sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ==", + "dev": true, + "peer": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, "safe-json-stringify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", @@ -15500,6 +18352,16 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "peer": true, + "requires": { + "commander": "^2.8.1" + } + }, "selenium-webdriver": { "version": "4.0.0-beta.1", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", @@ -15512,18 +18374,6 @@ "ws": "^7.3.1" }, "dependencies": { - "jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -15536,10 +18386,13 @@ } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-diff": { "version": "3.1.1", @@ -15558,6 +18411,56 @@ } } }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "peer": true + } + } + }, "serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", @@ -15567,6 +18470,19 @@ "randombytes": "^2.1.0" } }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "peer": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -15601,9 +18517,23 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true } } }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true, + "peer": true + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -15630,16 +18560,10 @@ "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true }, "shellwords": { "version": "0.1.1", @@ -15680,46 +18604,14 @@ "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "snapdragon": { @@ -15739,6 +18631,16 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -15759,6 +18661,83 @@ "is-extendable": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -15789,38 +18768,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -15847,15 +18794,35 @@ } }, "sonic-boom": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.0.tgz", - "integrity": "sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", + "integrity": "sha512-/B4tAuK2+hIlR94GhhWU1mJHWk5lt0CEuBvG0kvk1qIAzQc4iB1TieMio8DCZxY+Y7tsuzOxSUDOGmaUm3vXMg==", "dev": true, "requires": { "atomic-sleep": "^1.0.0", "flatstr": "^1.0.12" } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "peer": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "peer": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -15887,9 +18854,9 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true, "optional": true }, @@ -15936,9 +18903,9 @@ } }, "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "dev": true }, "split": { @@ -16003,9 +18970,79 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true } } }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "peer": true + }, "stream-parser": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", @@ -16013,6 +19050,23 @@ "dev": true, "requires": { "debug": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "stream-to-array": { @@ -16035,6 +19089,13 @@ "stream-to-array": "~2.3.0" } }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "peer": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -16045,77 +19106,60 @@ } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "string.prototype.padend": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", - "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.18.0-next.2" } }, "string.prototype.trimend": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", - "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", - "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "strip-bom-buf": { @@ -16137,6 +19181,16 @@ "strip-bom-buf": "^2.0.0" } }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "peer": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -16149,6 +19203,25 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "peer": true, + "requires": { + "escape-string-regexp": "^1.0.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "peer": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -16159,54 +19232,34 @@ } }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ajv": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", + "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, @@ -16225,29 +19278,19 @@ } }, "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, + "peer": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" } }, "term-size": { @@ -16286,6 +19329,12 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "timed-out": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", + "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", + "dev": true + }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -16293,19 +19342,15 @@ "dev": true, "requires": { "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true, + "peer": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -16356,6 +19401,13 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "peer": true + }, "tosource": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", @@ -16387,26 +19439,37 @@ "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", "dev": true }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", "dev": true, + "peer": true, "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" + "escape-string-regexp": "^1.0.2" }, "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "peer": true } } }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -16443,6 +19506,17 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "peer": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -16458,6 +19532,29 @@ "is-typedarray": "^1.0.0" } }, + "unbox-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", + "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.0", + "has-symbols": "^1.0.0", + "which-boxed-primitive": "^1.0.1" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -16469,6 +19566,15 @@ "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + } } }, "unique-string": { @@ -16481,11 +19587,18 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "peer": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -16565,9 +19678,9 @@ } }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -16581,14 +19694,21 @@ "optional": true }, "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "^2.0.0" + "prepend-http": "^1.0.1" } }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true, + "peer": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -16602,6 +19722,13 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "peer": true + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -16609,9 +19736,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { @@ -16624,6 +19751,13 @@ "spdx-expression-parse": "^3.0.0" } }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "peer": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -16800,6 +19934,13 @@ "binary-extensions": "^1.0.0" } }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -16902,21 +20043,152 @@ "zip-dir": "1.0.2" }, "dependencies": { - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "ws": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "dev": true, + "requires": {} + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + } + } } } }, @@ -16958,6 +20230,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -17042,23 +20327,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "wrappy": { @@ -17100,10 +20368,11 @@ } }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "requires": {} }, "xdg-basedir": { "version": "4.0.0", @@ -17127,6 +20396,13 @@ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "peer": true + }, "y18n": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", @@ -17140,89 +20416,18 @@ "dev": true }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { @@ -17282,17 +20487,26 @@ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true + }, + "jszip": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", + "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "dev": true, + "requires": { + "pako": "~1.0.2" + } } } }, "zip-stream": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz", - "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "dev": true, "requires": { "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.2", + "compress-commons": "^4.1.0", "readable-stream": "^3.6.0" }, "dependencies": { From e0dcc95c2628f9eb509f20468dc78d975f385066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Mar 2021 07:46:01 +0000 Subject: [PATCH 090/399] Bump rollup from 2.41.0 to 2.41.1 Bumps [rollup](https://github.com/rollup/rollup) from 2.41.0 to 2.41.1. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.41.0...v2.41.1) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 696bd3b..772df57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.1", "npm-run-all": "^4.1.5", - "rollup": "^2.41.0", + "rollup": "^2.41.1", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" @@ -8672,9 +8672,9 @@ } }, "node_modules/rollup": { - "version": "2.41.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.0.tgz", - "integrity": "sha512-Gk76XHTggulWPH95q8V62bw6uqDH6UGvbD6LOa3QUyhuMF3eOuaeDHR7SLm1T9faitkpNrqzUAVYx47klcMnlA==", + "version": "2.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.1.tgz", + "integrity": "sha512-nepLFAW5W71/MWpS2Yr7r31eS7HRfYg2RXnxb6ehqN9zY42yACxKtEfb4xq8SmNfUohAzGMcyl6jkwdLOAiUbg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -18299,9 +18299,9 @@ } }, "rollup": { - "version": "2.41.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.0.tgz", - "integrity": "sha512-Gk76XHTggulWPH95q8V62bw6uqDH6UGvbD6LOa3QUyhuMF3eOuaeDHR7SLm1T9faitkpNrqzUAVYx47klcMnlA==", + "version": "2.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.1.tgz", + "integrity": "sha512-nepLFAW5W71/MWpS2Yr7r31eS7HRfYg2RXnxb6ehqN9zY42yACxKtEfb4xq8SmNfUohAzGMcyl6jkwdLOAiUbg==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index 9000e1d..bca129d 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.1", "npm-run-all": "^4.1.5", - "rollup": "^2.41.0", + "rollup": "^2.41.1", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^5.5.0", "webextension-polyfill": "^0.7.0" From e735cc20e9b5bb64bece6af243e44203e2243beb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Mar 2021 07:47:09 +0000 Subject: [PATCH 091/399] Bump web-ext from 5.5.0 to 6.0.0 Bumps [web-ext](https://github.com/mozilla/web-ext) from 5.5.0 to 6.0.0. - [Release notes](https://github.com/mozilla/web-ext/releases) - [Commits](https://github.com/mozilla/web-ext/compare/5.5.0...6.0.0) Signed-off-by: dependabot[bot] --- package-lock.json | 6300 ++++++--------------------------------------- package.json | 2 +- 2 files changed, 832 insertions(+), 5470 deletions(-) diff --git a/package-lock.json b/package-lock.json index 696bd3b..4b44d02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "npm-run-all": "^4.1.5", "rollup": "^2.41.0", "selenium-webdriver": "^4.0.0-beta.1", - "web-ext": "^5.5.0", + "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" }, "engines": { @@ -126,46 +126,15 @@ "node": ">=4" } }, - "node_modules/@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", - "dev": true, - "dependencies": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, "node_modules/@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.9.tgz", + "integrity": "sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" } }, - "node_modules/@cliqz-oss/firefox-client": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz", - "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==", - "dev": true, - "dependencies": { - "colors": "0.5.x", - "js-select": "~0.6.0" - } - }, - "node_modules/@cliqz-oss/node-firefox-connect": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz", - "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==", - "dev": true, - "dependencies": { - "@cliqz-oss/firefox-client": "0.3.1", - "es6-promise": "^2.0.1" - } - }, "node_modules/@devicefarmer/adbkit": { "version": "2.11.3", "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz", @@ -250,9 +219,9 @@ } }, "node_modules/@mdn/browser-compat-data": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz", - "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.1.3.tgz", + "integrity": "sha512-Qdqeox4APsYwAQQSO68D1p75DL9an1wS8b/51m+nH98unN4jbS5bvg22WQrg+TMq2/3Mg/E5zprqfUzJD84qgw==", "dev": true, "dependencies": { "extend": "3.0.2" @@ -482,42 +451,41 @@ } }, "node_modules/addons-linter": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.13.1.tgz", - "integrity": "sha512-OWMuABpZRNeru38oOjn7QYOF0JOXJQXG9c3r4ILTRwTBeSu3LtfgCh9/7zLVgTYPbTs7Qy6h23u4Sel65uSnUQ==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.21.0.tgz", + "integrity": "sha512-1XfqeVbvaEpjRlWJq/Ti0W6bH3RszaIDPeKl+4ZmXCx+C8ovRqy4CJmitqNffLr+2KpY4h5ei2eRygbvJYDyrw==", "dev": true, "dependencies": { - "@babel/runtime": "7.12.5", - "@mdn/browser-compat-data": "2.0.7", - "addons-scanner-utils": "4.0.0", + "@babel/runtime": "7.13.9", + "@mdn/browser-compat-data": "3.1.3", + "addons-scanner-utils": "4.2.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", - "cheerio": "1.0.0-rc.3", + "cheerio": "1.0.0-rc.5", "columnify": "1.5.4", "common-tags": "1.8.0", "deepmerge": "4.2.2", - "dispensary": "0.59.0", - "eslint": "7.14.0", + "dispensary": "0.61.0", + "eslint": "7.21.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", - "espree": "7.3.0", + "espree": "7.3.1", "esprima": "4.0.1", "fluent-syntax": "0.13.0", "glob": "7.1.6", "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.7.0", - "postcss": "8.1.10", - "probe-image-size": "5.0.0", + "pino": "6.11.1", + "postcss": "8.2.7", + "probe-image-size": "6.0.0", "relaxed-json": "1.0.3", - "semver": "7.3.2", + "semver": "7.3.4", "source-map-support": "0.5.19", "tosource": "1.0.0", "upath": "2.0.1", - "whatwg-url": "8.4.0", - "yargs": "16.1.1", + "yargs": "16.2.0", "yauzl": "2.10.0" }, "bin": { @@ -527,314 +495,13 @@ "node": ">=10.13" }, "optionalDependencies": { - "fsevents": "2.2.1" - } - }, - "node_modules/addons-linter/node_modules/@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/addons-linter/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/addons-linter/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/addons-linter/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/addons-linter/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/addons-linter/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/addons-linter/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/addons-linter/node_modules/eslint": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", - "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/addons-linter/node_modules/espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/addons-linter/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/addons-linter/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/addons-linter/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/addons-linter/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/addons-linter/node_modules/fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/addons-linter/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/addons-linter/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/addons-linter/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/addons-linter/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/addons-linter/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/addons-linter/node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/addons-linter/node_modules/table/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/addons-linter/node_modules/yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" + "fsevents": "2.3.2" } }, "node_modules/addons-scanner-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.0.0.tgz", - "integrity": "sha512-+BfePzqoo/7Nhum9LONGsga2xhNJYb+6k6j819pzcd2tqaaqDUJu+3lz4CQQYFcD8QoolB3ksfZcCPymleFq0A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.2.0.tgz", + "integrity": "sha512-VKLYNlKg2RCMvmOKmbWlu14hjdyk2vcTHscQGmDlnHfWcf6fAb8E7vY9/ajWdLykVVKZEUiGOoD5EIkIp1FyUA==", "dev": true, "dependencies": { "@types/yauzl": "2.9.1", @@ -1037,9 +704,9 @@ } }, "node_modules/archiver": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", - "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", + "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", "dev": true, "dependencies": { "archiver-utils": "^2.1.0", @@ -1048,7 +715,7 @@ "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", "tar-stream": "^2.1.4", - "zip-stream": "^4.0.0" + "zip-stream": "^4.0.4" }, "engines": { "node": ">= 10" @@ -1131,40 +798,10 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "engines": { "node": ">=8" @@ -1223,16 +860,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array.prototype.flat": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", @@ -1277,16 +904,6 @@ "node": ">=0.8" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -1302,13 +919,6 @@ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1324,19 +934,6 @@ "node": ">= 4.0.0" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "optional": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", @@ -1367,38 +964,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "optional": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1437,16 +1002,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", @@ -1510,47 +1065,37 @@ "dev": true }, "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", + "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", "dev": true, "dependencies": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=6" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { @@ -1664,9 +1209,9 @@ } }, "node_modules/bunyan": { - "version": "1.8.14", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", - "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", "dev": true, "engines": [ "node >=0.10.0" @@ -1691,27 +1236,6 @@ "node": ">= 0.8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "optional": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cacheable-request": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", @@ -1771,9 +1295,9 @@ } }, "node_modules/camelcase": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, "engines": { "node": ">=10" @@ -1814,20 +1338,38 @@ } }, "node_modules/cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "version": "1.0.0-rc.5", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", + "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", "dev": true, "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" + "cheerio-select-tmp": "^0.1.0", + "dom-serializer": "~1.2.0", + "domhandler": "^4.0.0", + "entities": "~2.1.0", + "htmlparser2": "^6.0.0", + "parse5": "^6.0.0", + "parse5-htmlparser2-tree-adapter": "^6.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.12" + } + }, + "node_modules/cheerio-select-tmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", + "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", + "deprecated": "Use cheerio-select instead", + "dev": true, + "dependencies": { + "css-select": "^3.1.2", + "css-what": "^4.0.0", + "domelementtype": "^2.1.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.4" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/chokidar": { @@ -1901,112 +1443,6 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -2048,20 +1484,6 @@ "mimic-response": "^1.0.0" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "optional": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2086,15 +1508,6 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "node_modules/colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/columnify": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", @@ -2159,13 +1572,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true, - "optional": true - }, "node_modules/compress-commons": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", @@ -2306,23 +1712,16 @@ "dev": true, "peer": true }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", "dev": true, - "hasInstallScript": true + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-util-is": { "version": "1.0.2", @@ -2409,24 +1808,31 @@ } }, "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true, "engines": { - "node": "*" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/dashdash": { @@ -2481,6 +1887,7 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, + "peer": true, "engines": { "node": ">=0.10" } @@ -2754,20 +2161,6 @@ "node": ">= 0.4" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2804,18 +2197,18 @@ } }, "node_modules/dispensary": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.59.0.tgz", - "integrity": "sha512-JSnh4AhtYgwoyUHtunZbAhklkD9IeNacK1IDlrAJSZjzBMGFoTp9+Nggg+ITJ+F1geXc04DZ55ixnjFr5Ozknw==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.61.0.tgz", + "integrity": "sha512-5BK13jrYQ+0bHgZBv7IOQsff5ydeNcnp87w3c7T8x5im21RDFQyiHrTlH0DoouZDyAVHILpat4Ytf7gRuhMRgw==", "dev": true, "dependencies": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", - "pino": "~6.7.0", + "pino": "~6.9.0", "request": "~2.88.0", "sha.js": "~2.4.4", "source-map-support": "~0.5.4", - "yargs": "~16.1.0" + "yargs": "~16.2.0" }, "bin": { "dispensary": "bin/dispensary" @@ -2830,24 +2223,29 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, - "node_modules/dispensary/node_modules/yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", + "node_modules/dispensary/node_modules/pino": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.9.0.tgz", + "integrity": "sha512-9RrRJsKOsgj50oGoR/y4EEVyUjMb/eRu8y4hjwPqM6q214xsxSxY/IKB+aEEv0slqNd4U0RVRfivKfy83UxgUQ==", "dev": true, "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" + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.2" }, - "engines": { - "node": ">=10" + "bin": { + "pino": "bin.js" } }, + "node_modules/dispensary/node_modules/pino-std-serializers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", + "dev": true + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2861,38 +2259,58 @@ } }, "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", "dev": true, "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", "dev": true, "dependencies": { - "domelementtype": "1" + "domelementtype": "^2.1.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", + "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-prop": { @@ -3115,10 +2533,13 @@ } }, "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/error-ex": { "version": "1.3.2", @@ -3182,12 +2603,6 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "node_modules/es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, "node_modules/es6-promisify": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", @@ -3696,155 +3111,6 @@ "node": ">=0.8" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, "node_modules/express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -3937,76 +3203,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -4098,13 +3294,6 @@ "node": ">=6" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -4195,72 +3384,46 @@ } }, "node_modules/firefox-profile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.0.0.tgz", - "integrity": "sha512-Vw31AsjfLDbcApMDwwnhZcz3tWjV6lxB9BNf84FaV44rZXtU87cVbFMBzPEtrJdUDbwPYiuYzprp6yksYGwjSw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.1.0.tgz", + "integrity": "sha512-n+0jsWhW57i7cAmdHg67W6u5vVSoIJN9D+d7M3w1MzhFLE5X/QxBfP80ksjNvNQDFXGdJQAnW9YupLkzgCxaFQ==", "dev": true, "dependencies": { - "adm-zip": "~0.4.x", - "archiver": "~5.0.2", - "async": "~2.5.0", - "fs-extra": "~4.0.2", - "ini": "~1.3.3", - "jetpack-id": "1.0.0", + "adm-zip": "~0.5.x", + "archiver": "~5.2.0", + "fs-extra": "~9.0.1", + "ini": "~2.0.0", "lazystream": "~1.0.0", - "lodash": "~4.17.2", - "minimist": "^1.1.1", - "uuid": "^3.0.0", - "xml2js": "~0.4.4" + "minimist": "^1.2.5", + "uuid": "^8.3.2", + "xml2js": "~0.4.23" }, "bin": { "firefox-profile": "lib/cli.js" } }, - "node_modules/firefox-profile/node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/firefox-profile/node_modules/async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "dependencies": { - "lodash": "^4.14.0" - } - }, "node_modules/firefox-profile/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/firefox-profile/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/firefox-profile/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" } }, "node_modules/first-chunk-stream": { @@ -4315,16 +3478,6 @@ "node": ">=8.9.0" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4358,19 +3511,6 @@ "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "optional": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -4399,15 +3539,15 @@ "dev": true }, "node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "engines": { "node": ">=10" @@ -4569,16 +3709,6 @@ "node": ">=6" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -4620,27 +3750,27 @@ "node": ">= 6" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "dependencies": { - "ini": "1.3.7" + "ini": "2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-dirs/node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, "node_modules/globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -4798,81 +3928,13 @@ "node": "*" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true, - "optional": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=8" } }, "node_modules/he": { @@ -4891,31 +3953,22 @@ "dev": true }, "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/htmlparser2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", + "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.4.4", + "entities": "^2.0.0" } }, "node_modules/http-cache-semantics": { @@ -4991,7 +4044,6 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -5085,10 +4137,13 @@ "dev": true }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/into-stream": { "version": "3.1.0", @@ -5148,19 +4203,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-arguments": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", @@ -5218,13 +4260,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "optional": true - }, "node_modules/is-callable": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", @@ -5261,19 +4296,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", @@ -5286,21 +4308,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", @@ -5316,19 +4323,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5360,16 +4354,16 @@ } }, "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5476,19 +4470,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "optional": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -5589,16 +4570,6 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -5629,16 +4600,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -5665,24 +4626,6 @@ "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", "dev": true }, - "node_modules/jetpack-id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", - "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=", - "deprecated": "Jetpack extensions are no longer supported by Firefox. Use web-ext instead to build a WebExtension.", - "dev": true - }, - "node_modules/js-select": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", - "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", - "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.", - "dev": true, - "dependencies": { - "JSONSelect": "0.2.1", - "traverse": "0.4.x" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5729,6 +4672,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -5777,15 +4726,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -5795,15 +4735,6 @@ "node": "*" } }, - "node_modules/JSONSelect": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", - "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", - "dev": true, - "engines": { - "node": ">=0.4.7" - } - }, "node_modules/jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -5892,16 +4823,6 @@ "json-buffer": "3.0.0" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", @@ -6100,12 +5021,6 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -6200,29 +5115,6 @@ "node": ">=6" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "optional": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/marky": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", @@ -6285,207 +5177,68 @@ "node": ">= 0.6" } }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "peer": true, + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/micromatch/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", "dev": true, - "optional": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "mime-db": "1.46.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/micromatch/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "dependencies": { - "kind-of": "^3.0.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "dev": true, - "dependencies": { - "mime-db": "1.46.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "node": "*" } }, "node_modules/minimist": { @@ -6519,20 +5272,6 @@ "node": ">= 8" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "optional": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -6645,9 +5384,9 @@ "dev": true }, "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "dependencies": { "@types/minimatch": "^3.0.3", @@ -6657,7 +5396,10 @@ "minimatch": "^3.0.4" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mv": { @@ -6748,29 +5490,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6793,6 +5512,32 @@ "ncp": "bin/ncp" } }, + "node_modules/needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6803,18 +5548,6 @@ "node": ">= 0.6" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6831,9 +5564,9 @@ } }, "node_modules/node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.0.tgz", + "integrity": "sha512-SkwNwGnMMlSPrcoeH4CSo9XyWe72acAHEJGDdPdB+CyBVHsIYaTQ4U/1wk3URsyzC75xZLg2vzU2YaALlqDF1Q==", "dev": true, "dependencies": { "growly": "^1.3.0", @@ -6844,15 +5577,6 @@ "which": "^2.0.2" } }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/node-status-codes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", @@ -7106,12 +5830,15 @@ } }, "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "dependencies": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/oauth-sign": { @@ -7132,98 +5859,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "optional": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", @@ -7258,19 +5893,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "optional": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -7289,19 +5911,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "optional": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.values": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", @@ -7358,9 +5967,9 @@ } }, "node_modules/open": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", - "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "dependencies": { "is-docker": "^2.0.0", @@ -7692,12 +6301,18 @@ } }, "node_modules/parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "dependencies": { - "@types/node": "*" + "parse5": "^6.0.1" } }, "node_modules/parseurl": { @@ -7710,23 +6325,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7846,15 +6444,15 @@ } }, "node_modules/pino": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz", - "integrity": "sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw==", + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", + "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", "dev": true, "dependencies": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.7", "flatstr": "^1.0.12", - "pino-std-serializers": "^2.4.2", + "pino-std-serializers": "^3.1.0", "quick-format-unescaped": "^4.0.1", "sonic-boom": "^1.0.2" }, @@ -7863,9 +6461,9 @@ } }, "node_modules/pino-std-serializers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", - "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", "dev": true }, "node_modules/pkg-dir": { @@ -7938,26 +6536,15 @@ "node": ">=4" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss": { - "version": "8.1.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.10.tgz", - "integrity": "sha512-iBXEV5VTTYaRRdxiFYzTtuv2lGMQBExqkZKSzkJe+Fl6rvQrA/49UVGKqB+LG54hpW/TtDBMGds8j33GFNW7pg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", + "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", "dev": true, "dependencies": { - "colorette": "^1.2.1", - "nanoid": "^3.1.18", - "source-map": "^0.6.1", - "vfile-location": "^3.2.0" + "colorette": "^1.2.2", + "nanoid": "^3.1.20", + "source-map": "^0.6.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7998,15 +6585,13 @@ } }, "node_modules/probe-image-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz", - "integrity": "sha512-V6uBYw5eBc5UVIE7MUZD6Nxg0RYuGDWLDenEn0B1WC6PcTvn1xdQ6HLDDuznefsiExC6rNrCz7mFRBo0f3Xekg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-6.0.0.tgz", + "integrity": "sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==", "dev": true, "dependencies": { "deepmerge": "^4.0.0", - "inherits": "^2.0.3", - "next-tick": "^1.0.0", - "request": "^2.83.0", + "needle": "^2.5.2", "stream-parser": "~0.3.1" } }, @@ -8102,9 +6687,9 @@ } }, "node_modules/quick-format-unescaped": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", - "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.2.tgz", + "integrity": "sha512-HNPqtTHgal9dBpJxibFGgOEmlaTbwEbplrR+oOiWp9aNFlFKBYfkbvvF8VrJPK65okrZuGOwHKLfe7/gT6NWuw==", "dev": true }, "node_modules/ramda": { @@ -8163,6 +6748,12 @@ "rc": "cli.js" } }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -8362,24 +6953,10 @@ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -8515,33 +7092,6 @@ "node": ">=4" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -8583,6 +7133,15 @@ "node": ">=0.6" } }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8601,12 +7160,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -8629,14 +7182,6 @@ "node": ">=4" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true, - "optional": true - }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -8646,16 +7191,6 @@ "lowercase-keys": "^1.0.0" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -8709,16 +7244,6 @@ "dev": true, "optional": true }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "optional": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8882,12 +7407,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, "node_modules/set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", @@ -8897,45 +7416,6 @@ "node": ">=0.10.0" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -8990,13 +7470,13 @@ "dev": true }, "node_modules/sign-addon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.1.0.tgz", - "integrity": "sha512-zZ7nKc5/3QWM3skYBosGDvYQf2jkKhW2u8BELrZoN1wgCSOnwsV9T47Vx9uaNbA3CyZ+V9XSA0tDVHoV1QfVPw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.3.0.tgz", + "integrity": "sha512-TZNZfxRb5jnNcGI8gbyGvaI3kLw+M0O9p7yas2eTu3WpLZ66Wy+FAhYOccgpeQQAcKtwf4WaSnfPKYTBBWWiDQ==", "dev": true, "dependencies": { "common-tags": "1.8.0", - "core-js": "3.6.5", + "core-js": "3.8.3", "deepcopy": "2.1.0", "es6-error": "4.1.1", "es6-promisify": "6.1.1", @@ -9007,17 +7487,6 @@ "stream-to-promise": "3.0.0" } }, - "node_modules/sign-addon/node_modules/core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -9041,220 +7510,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "optional": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sonic-boom": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", @@ -9300,20 +7555,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "optional": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", @@ -9324,13 +7565,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true, - "optional": true - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -9392,19 +7626,6 @@ "node": "*" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -9436,110 +7657,6 @@ "node": ">=0.10.0" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -9858,18 +7975,6 @@ "node": ">= 0.8.0" } }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -9931,32 +8036,6 @@ "dev": true, "peer": true }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -9966,22 +8045,6 @@ "node": ">=6" } }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10026,27 +8089,6 @@ "node": ">=0.8" } }, - "node_modules/tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/traverse": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", - "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -10182,32 +8224,6 @@ "through": "^2.3.8" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -10221,9 +8237,9 @@ } }, "node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -10239,58 +8255,6 @@ "node": ">= 0.8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "optional": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "optional": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/unzip-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", @@ -10311,23 +8275,23 @@ } }, "node_modules/update-notifier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", - "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "dependencies": { - "boxen": "^4.2.0", + "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", + "is-installed-globally": "^0.4.0", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver": "^7.3.2", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, @@ -10347,14 +8311,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true, - "optional": true - }, "node_modules/url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -10377,16 +8333,6 @@ "node": ">= 4" } }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -10404,12 +8350,12 @@ } }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { @@ -10452,426 +8398,101 @@ "extsprintf": "^1.2.0" } }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, - "optional": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "defaults": "^1.0.3" } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/web-ext": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.0.0.tgz", + "integrity": "sha512-djjTY89kM5ULdKYQo+6TYJSlT+0zNkanW5hQJNybOqGyovUYpH7C3Ns9Pd1cy6ApbmG2VV4Gds9u4yCSuRfHUw==", "dev": true, - "optional": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "@babel/runtime": "7.13.9", + "@devicefarmer/adbkit": "2.11.3", + "addons-linter": "2.21.0", + "bunyan": "1.8.15", + "camelcase": "6.2.0", + "chrome-launcher": "0.13.4", + "debounce": "1.2.0", + "decamelize": "5.0.0", + "es6-error": "4.1.1", + "event-to-promise": "0.8.0", + "firefox-profile": "4.1.0", + "fs-extra": "9.1.0", + "fx-runner": "1.0.13", + "import-fresh": "3.3.0", + "mkdirp": "1.0.4", + "multimatch": "5.0.0", + "mz": "2.7.0", + "node-notifier": "9.0.0", + "open": "7.4.2", + "parse-json": "5.2.0", + "sign-addon": "3.3.0", + "source-map-support": "0.5.19", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1", + "update-notifier": "5.1.0", + "watchpack": "2.1.1", + "ws": "7.4.3", + "yargs": "16.2.0", + "zip-dir": "2.0.0" + }, + "bin": { + "web-ext": "bin/web-ext" }, "engines": { - "node": ">=0.10.0" + "node": ">=12.0.0", + "npm": ">=5.6.0 <7.0.0" } }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "node_modules/web-ext/node_modules/decamelize": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", + "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/web-ext/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "optional": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-ext": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.5.0.tgz", - "integrity": "sha512-f+NHiYwbTS0X6eSLkBDWoCYkkIJweVazGf4MD8S+kRX/5z40WsYsnRdVWG+p34Z6rCyNvlHHrnO2S1W8WWg7Tw==", - "dev": true, - "dependencies": { - "@babel/polyfill": "7.12.1", - "@babel/runtime": "7.12.5", - "@cliqz-oss/firefox-client": "0.3.1", - "@cliqz-oss/node-firefox-connect": "1.2.1", - "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.13.1", - "bunyan": "1.8.14", - "camelcase": "6.0.0", - "chrome-launcher": "0.13.4", - "debounce": "1.2.0", - "decamelize": "4.0.0", - "es6-error": "4.1.1", - "event-to-promise": "0.8.0", - "firefox-profile": "4.0.0", - "fs-extra": "9.0.1", - "fx-runner": "1.0.13", - "import-fresh": "3.3.0", - "mkdirp": "1.0.4", - "multimatch": "4.0.0", - "mz": "2.7.0", - "node-notifier": "8.0.1", - "open": "7.3.0", - "parse-json": "5.0.1", - "sign-addon": "3.1.0", - "source-map-support": "0.5.19", - "strip-bom": "4.0.0", - "strip-json-comments": "3.1.1", - "tmp": "0.2.1", - "update-notifier": "5.0.0", - "watchpack": "1.7.5", - "ws": "7.4.2", - "yargs": "15.4.1", - "zip-dir": "1.0.2" - }, - "bin": { - "web-ext": "bin/web-ext" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/web-ext/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/web-ext/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/web-ext/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/web-ext/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/web-ext/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/web-ext/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/web-ext/node_modules/parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/web-ext/node_modules/strip-bom": { @@ -10883,24 +8504,10 @@ "node": ">=8" } }, - "node_modules/web-ext/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/web-ext/node_modules/ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", "dev": true, "engines": { "node": ">=8.3.0" @@ -10918,103 +8525,12 @@ } } }, - "node_modules/web-ext/node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "node_modules/web-ext/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/web-ext/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/web-ext/node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/web-ext/node_modules/yargs-parser/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/web-ext/node_modules/yargs/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webextension-polyfill": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", "dev": true }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/when": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", @@ -11052,12 +8568,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -11166,18 +8676,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -11190,18 +8688,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/write/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ws": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", @@ -11353,29 +8839,20 @@ } }, "node_modules/zip-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", - "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz", + "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==", "dev": true, "dependencies": { - "async": "^1.5.2", - "jszip": "^2.4.0" + "async": "^3.2.0", + "jszip": "^3.2.2" } }, "node_modules/zip-dir/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "node_modules/zip-dir/node_modules/jszip": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", - "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", - "dev": true, - "dependencies": { - "pako": "~1.0.2" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true }, "node_modules/zip-stream": { "version": "4.1.0", @@ -11491,45 +8968,15 @@ } } }, - "@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.9.tgz", + "integrity": "sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, - "@cliqz-oss/firefox-client": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz", - "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==", - "dev": true, - "requires": { - "colors": "0.5.x", - "js-select": "~0.6.0" - } - }, - "@cliqz-oss/node-firefox-connect": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz", - "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==", - "dev": true, - "requires": { - "@cliqz-oss/firefox-client": "0.3.1", - "es6-promise": "^2.0.1" - } - }, "@devicefarmer/adbkit": { "version": "2.11.3", "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz", @@ -11601,9 +9048,9 @@ } }, "@mdn/browser-compat-data": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz", - "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.1.3.tgz", + "integrity": "sha512-Qdqeox4APsYwAQQSO68D1p75DL9an1wS8b/51m+nH98unN4jbS5bvg22WQrg+TMq2/3Mg/E5zprqfUzJD84qgw==", "dev": true, "requires": { "extend": "3.0.2" @@ -11794,290 +9241,49 @@ "requires": {} }, "addons-linter": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.13.1.tgz", - "integrity": "sha512-OWMuABpZRNeru38oOjn7QYOF0JOXJQXG9c3r4ILTRwTBeSu3LtfgCh9/7zLVgTYPbTs7Qy6h23u4Sel65uSnUQ==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.21.0.tgz", + "integrity": "sha512-1XfqeVbvaEpjRlWJq/Ti0W6bH3RszaIDPeKl+4ZmXCx+C8ovRqy4CJmitqNffLr+2KpY4h5ei2eRygbvJYDyrw==", "dev": true, "requires": { - "@babel/runtime": "7.12.5", - "@mdn/browser-compat-data": "2.0.7", - "addons-scanner-utils": "4.0.0", + "@babel/runtime": "7.13.9", + "@mdn/browser-compat-data": "3.1.3", + "addons-scanner-utils": "4.2.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", - "cheerio": "1.0.0-rc.3", + "cheerio": "1.0.0-rc.5", "columnify": "1.5.4", "common-tags": "1.8.0", "deepmerge": "4.2.2", - "dispensary": "0.59.0", - "eslint": "7.14.0", + "dispensary": "0.61.0", + "eslint": "7.21.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", - "espree": "7.3.0", + "espree": "7.3.1", "esprima": "4.0.1", "fluent-syntax": "0.13.0", - "fsevents": "2.2.1", + "fsevents": "2.3.2", "glob": "7.1.6", "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.7.0", - "postcss": "8.1.10", - "probe-image-size": "5.0.0", + "pino": "6.11.1", + "postcss": "8.2.7", + "probe-image-size": "6.0.0", "relaxed-json": "1.0.3", - "semver": "7.3.2", + "semver": "7.3.4", "source-map-support": "0.5.19", "tosource": "1.0.0", "upath": "2.0.1", - "whatwg-url": "8.4.0", - "yargs": "16.1.1", + "yargs": "16.2.0", "yauzl": "2.10.0" - }, - "dependencies": { - "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "eslint": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", - "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", - "dev": true, - "requires": { - "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" - } - } } }, "addons-scanner-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.0.0.tgz", - "integrity": "sha512-+BfePzqoo/7Nhum9LONGsga2xhNJYb+6k6j819pzcd2tqaaqDUJu+3lz4CQQYFcD8QoolB3ksfZcCPymleFq0A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.2.0.tgz", + "integrity": "sha512-VKLYNlKg2RCMvmOKmbWlu14hjdyk2vcTHscQGmDlnHfWcf6fAb8E7vY9/ajWdLykVVKZEUiGOoD5EIkIp1FyUA==", "dev": true, "requires": { "@types/yauzl": "2.9.1", @@ -12231,9 +9437,9 @@ } }, "archiver": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", - "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", + "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", "dev": true, "requires": { "archiver-utils": "^2.1.0", @@ -12242,7 +9448,7 @@ "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", "tar-stream": "^2.1.4", - "zip-stream": "^4.0.0" + "zip-stream": "^4.0.4" }, "dependencies": { "async": { @@ -12315,27 +9521,6 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "optional": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "optional": true - }, "array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", @@ -12386,13 +9571,6 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true - }, "array.prototype.flat": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", @@ -12425,13 +9603,6 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "optional": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -12444,13 +9615,6 @@ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -12463,13 +9627,6 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "optional": true - }, "atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", @@ -12494,34 +9651,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "optional": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -12543,16 +9672,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", @@ -12615,36 +9734,26 @@ "dev": true }, "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", + "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", "dev": true, "requires": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } } } }, @@ -12733,9 +9842,9 @@ "dev": true }, "bunyan": { - "version": "1.8.14", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", - "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", "dev": true, "requires": { "dtrace-provider": "~0.8", @@ -12751,24 +9860,6 @@ "dev": true, "peer": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "optional": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "cacheable-request": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", @@ -12818,9 +9909,9 @@ "dev": true }, "camelcase": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "capture-stack-trace": { @@ -12846,17 +9937,31 @@ } }, "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "version": "1.0.0-rc.5", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", + "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "dev": true, + "requires": { + "cheerio-select-tmp": "^0.1.0", + "dom-serializer": "~1.2.0", + "domhandler": "^4.0.0", + "entities": "~2.1.0", + "htmlparser2": "^6.0.0", + "parse5": "^6.0.0", + "parse5-htmlparser2-tree-adapter": "^6.0.0" + } + }, + "cheerio-select-tmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", + "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", "dev": true, "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" + "css-select": "^3.1.2", + "css-what": "^4.0.0", + "domelementtype": "^2.1.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.4" } }, "chokidar": { @@ -12912,100 +10017,12 @@ } } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "optional": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -13038,17 +10055,6 @@ "mimic-response": "^1.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "optional": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -13070,12 +10076,6 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true - }, "columnify": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", @@ -13130,13 +10130,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true, - "optional": true - }, "compress-commons": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", @@ -13248,17 +10241,10 @@ "dev": true, "peer": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "optional": true - }, "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", "dev": true }, "core-util-is": { @@ -13327,21 +10313,22 @@ "dev": true }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true }, "dashdash": { @@ -13378,7 +10365,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "dev": true, + "peer": true }, "decompress": { "version": "4.2.1", @@ -13604,17 +10592,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -13642,18 +10619,18 @@ "dev": true }, "dispensary": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.59.0.tgz", - "integrity": "sha512-JSnh4AhtYgwoyUHtunZbAhklkD9IeNacK1IDlrAJSZjzBMGFoTp9+Nggg+ITJ+F1geXc04DZ55ixnjFr5Ozknw==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.61.0.tgz", + "integrity": "sha512-5BK13jrYQ+0bHgZBv7IOQsff5ydeNcnp87w3c7T8x5im21RDFQyiHrTlH0DoouZDyAVHILpat4Ytf7gRuhMRgw==", "dev": true, "requires": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", - "pino": "~6.7.0", + "pino": "~6.9.0", "request": "~2.88.0", "sha.js": "~2.4.4", "source-map-support": "~0.5.4", - "yargs": "~16.1.0" + "yargs": "~16.2.0" }, "dependencies": { "async": { @@ -13662,20 +10639,25 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, - "yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", + "pino": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.9.0.tgz", + "integrity": "sha512-9RrRJsKOsgj50oGoR/y4EEVyUjMb/eRu8y4hjwPqM6q214xsxSxY/IKB+aEEv0slqNd4U0RVRfivKfy83UxgUQ==", "dev": true, "requires": { - "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" + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.2" } + }, + "pino-std-serializers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", + "dev": true } } }, @@ -13689,38 +10671,40 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", "dev": true }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "^2.1.0" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", + "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" } }, "dot-prop": { @@ -13910,9 +10894,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true }, "error-ex": { @@ -13965,12 +10949,6 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, "es6-promisify": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", @@ -14367,131 +11345,6 @@ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - } - } - }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -14577,63 +11430,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -14712,13 +11508,6 @@ "dev": true, "peer": true }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -14793,63 +11582,37 @@ } }, "firefox-profile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.0.0.tgz", - "integrity": "sha512-Vw31AsjfLDbcApMDwwnhZcz3tWjV6lxB9BNf84FaV44rZXtU87cVbFMBzPEtrJdUDbwPYiuYzprp6yksYGwjSw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.1.0.tgz", + "integrity": "sha512-n+0jsWhW57i7cAmdHg67W6u5vVSoIJN9D+d7M3w1MzhFLE5X/QxBfP80ksjNvNQDFXGdJQAnW9YupLkzgCxaFQ==", "dev": true, "requires": { - "adm-zip": "~0.4.x", - "archiver": "~5.0.2", - "async": "~2.5.0", - "fs-extra": "~4.0.2", - "ini": "~1.3.3", - "jetpack-id": "1.0.0", + "adm-zip": "~0.5.x", + "archiver": "~5.2.0", + "fs-extra": "~9.0.1", + "ini": "~2.0.0", "lazystream": "~1.0.0", - "lodash": "~4.17.2", - "minimist": "^1.1.1", - "uuid": "^3.0.0", - "xml2js": "~0.4.4" + "minimist": "^1.2.5", + "uuid": "^8.3.2", + "xml2js": "~0.4.23" }, "dependencies": { - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "^4.14.0" - } - }, "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true } } @@ -14894,13 +11657,6 @@ "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "optional": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -14925,16 +11681,6 @@ "dev": true, "peer": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "optional": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -14960,15 +11706,15 @@ "dev": true }, "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "fs-minipass": { @@ -15097,13 +11843,6 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "optional": true - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -15136,21 +11875,19 @@ "is-glob": "^4.0.1" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "requires": { - "ini": "1.3.7" - }, - "dependencies": { - "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - } + "ini": "2.0.0" } }, "globals": { @@ -15270,63 +12007,6 @@ "has-symbol-support-x": "^1.4.1" } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "optional": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -15338,38 +12018,23 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "htmlparser2": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", + "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.4.4", + "entities": "^2.0.0" } }, "http-cache-semantics": { @@ -15434,7 +12099,6 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "peer": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -15496,9 +12160,9 @@ "dev": true }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, "into-stream": { @@ -15543,16 +12207,6 @@ "is-relative": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-arguments": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", @@ -15592,13 +12246,6 @@ "call-bind": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "optional": true - }, "is-callable": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", @@ -15623,50 +12270,18 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, "is-docker": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", "dev": true }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -15689,13 +12304,13 @@ } }, "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, "is-mergeable-object": { @@ -15766,16 +12381,6 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "optional": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -15846,13 +12451,6 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "optional": true - }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -15880,13 +12478,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -15910,22 +12501,6 @@ "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", "dev": true }, - "jetpack-id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", - "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=", - "dev": true - }, - "js-select": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", - "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", - "dev": true, - "requires": { - "JSONSelect": "0.2.1", - "traverse": "0.4.x" - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -15969,6 +12544,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -16010,14 +12591,6 @@ "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } } }, "jsonify": { @@ -16026,12 +12599,6 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "JSONSelect": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", - "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", - "dev": true - }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -16112,13 +12679,6 @@ "json-buffer": "3.0.0" } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true - }, "latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", @@ -16297,12 +12857,6 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -16378,23 +12932,6 @@ "p-defer": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "optional": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "optional": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "marky": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", @@ -16445,126 +12982,6 @@ "dev": true, "peer": true }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -16633,17 +13050,6 @@ "yallist": "^4.0.0" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "optional": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -16729,9 +13135,9 @@ "dev": true }, "multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "requires": { "@types/minimatch": "^3.0.3", @@ -16813,26 +13219,6 @@ "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -16852,6 +13238,28 @@ "dev": true, "optional": true }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -16859,18 +13267,6 @@ "dev": true, "peer": true }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -16884,9 +13280,9 @@ "dev": true }, "node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.0.tgz", + "integrity": "sha512-SkwNwGnMMlSPrcoeH4CSo9XyWe72acAHEJGDdPdB+CyBVHsIYaTQ4U/1wk3URsyzC75xZLg2vzU2YaALlqDF1Q==", "dev": true, "requires": { "growly": "^1.3.0", @@ -16895,14 +13291,6 @@ "shellwords": "^0.1.1", "uuid": "^8.3.0", "which": "^2.0.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } } }, "node-status-codes": { @@ -17102,12 +13490,12 @@ } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "oauth-sign": { @@ -17122,81 +13510,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "optional": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", @@ -17219,16 +13532,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "optional": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -17241,16 +13544,6 @@ "object-keys": "^1.1.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "optional": true, - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", @@ -17292,9 +13585,9 @@ } }, "open": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", - "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -17537,12 +13830,18 @@ } }, "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { - "@types/node": "*" + "parse5": "^6.0.1" } }, "parseurl": { @@ -17552,20 +13851,6 @@ "dev": true, "peer": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "optional": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -17652,23 +13937,23 @@ } }, "pino": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz", - "integrity": "sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw==", + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", + "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", "dev": true, "requires": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.7", "flatstr": "^1.0.12", - "pino-std-serializers": "^2.4.2", + "pino-std-serializers": "^3.1.0", "quick-format-unescaped": "^4.0.1", "sonic-boom": "^1.0.2" } }, "pino-std-serializers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", - "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", "dev": true }, "pkg-dir": { @@ -17725,23 +14010,15 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "optional": true - }, "postcss": { - "version": "8.1.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.10.tgz", - "integrity": "sha512-iBXEV5VTTYaRRdxiFYzTtuv2lGMQBExqkZKSzkJe+Fl6rvQrA/49UVGKqB+LG54hpW/TtDBMGds8j33GFNW7pg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", + "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", "dev": true, "requires": { - "colorette": "^1.2.1", - "nanoid": "^3.1.18", - "source-map": "^0.6.1", - "vfile-location": "^3.2.0" + "colorette": "^1.2.2", + "nanoid": "^3.1.20", + "source-map": "^0.6.1" } }, "prelude-ls": { @@ -17763,15 +14040,13 @@ "dev": true }, "probe-image-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz", - "integrity": "sha512-V6uBYw5eBc5UVIE7MUZD6Nxg0RYuGDWLDenEn0B1WC6PcTvn1xdQ6HLDDuznefsiExC6rNrCz7mFRBo0f3Xekg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-6.0.0.tgz", + "integrity": "sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==", "dev": true, "requires": { "deepmerge": "^4.0.0", - "inherits": "^2.0.3", - "next-tick": "^1.0.0", - "request": "^2.83.0", + "needle": "^2.5.2", "stream-parser": "~0.3.1" } }, @@ -17849,9 +14124,9 @@ } }, "quick-format-unescaped": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", - "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.2.tgz", + "integrity": "sha512-HNPqtTHgal9dBpJxibFGgOEmlaTbwEbplrR+oOiWp9aNFlFKBYfkbvvF8VrJPK65okrZuGOwHKLfe7/gT6NWuw==", "dev": true }, "ramda": { @@ -17901,6 +14176,12 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -18062,17 +14343,6 @@ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -18175,27 +14445,6 @@ } } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "optional": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "optional": true - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -18229,6 +14478,12 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, @@ -18244,12 +14499,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -18266,13 +14515,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true, - "optional": true - }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -18282,13 +14524,6 @@ "lowercase-keys": "^1.0.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "optional": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -18330,16 +14565,6 @@ "dev": true, "optional": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "optional": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -18483,50 +14708,12 @@ "send": "0.17.1" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - } - } - }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -18572,13 +14759,13 @@ "dev": true }, "sign-addon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.1.0.tgz", - "integrity": "sha512-zZ7nKc5/3QWM3skYBosGDvYQf2jkKhW2u8BELrZoN1wgCSOnwsV9T47Vx9uaNbA3CyZ+V9XSA0tDVHoV1QfVPw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.3.0.tgz", + "integrity": "sha512-TZNZfxRb5jnNcGI8gbyGvaI3kLw+M0O9p7yas2eTu3WpLZ66Wy+FAhYOccgpeQQAcKtwf4WaSnfPKYTBBWWiDQ==", "dev": true, "requires": { "common-tags": "1.8.0", - "core-js": "3.6.5", + "core-js": "3.8.3", "deepcopy": "2.1.0", "es6-error": "4.1.1", "es6-promisify": "6.1.1", @@ -18587,14 +14774,6 @@ "request": "2.88.2", "source-map-support": "0.5.19", "stream-to-promise": "3.0.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "signal-exit": { @@ -18614,185 +14793,6 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "optional": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "optional": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "sonic-boom": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", @@ -18829,20 +14829,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "optional": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", @@ -18853,13 +14839,6 @@ "source-map": "^0.6.0" } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true, - "optional": true - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -18917,16 +14896,6 @@ "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -18950,92 +14919,6 @@ "tweetnacl": "~0.14.0" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "optional": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -19293,12 +15176,6 @@ "xtend": "^4.0.0" } }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -19351,47 +15228,12 @@ "dev": true, "peer": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "optional": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19420,25 +15262,10 @@ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { + "psl": "^1.1.28", "punycode": "^2.1.1" } }, - "traverse": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", - "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", - "dev": true - }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -19555,28 +15382,6 @@ "through": "^2.3.8" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "optional": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - } - } - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -19587,9 +15392,9 @@ } }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { @@ -19599,50 +15404,6 @@ "dev": true, "peer": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "optional": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "optional": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "optional": true - } - } - }, "unzip-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", @@ -19656,23 +15417,23 @@ "dev": true }, "update-notifier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", - "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "requires": { - "boxen": "^4.2.0", + "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", + "is-installed-globally": "^0.4.0", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver": "^7.3.2", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" } @@ -19686,13 +15447,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true, - "optional": true - }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -19709,13 +15463,6 @@ "dev": true, "peer": true }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -19730,9 +15477,9 @@ "peer": true }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-compile-cache": { @@ -19769,228 +15516,14 @@ "extsprintf": "^1.2.0" } }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "dev": true - }, "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", "dev": true, - "optional": true, "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - } + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, "wcwidth": { @@ -20003,109 +15536,58 @@ } }, "web-ext": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.5.0.tgz", - "integrity": "sha512-f+NHiYwbTS0X6eSLkBDWoCYkkIJweVazGf4MD8S+kRX/5z40WsYsnRdVWG+p34Z6rCyNvlHHrnO2S1W8WWg7Tw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.0.0.tgz", + "integrity": "sha512-djjTY89kM5ULdKYQo+6TYJSlT+0zNkanW5hQJNybOqGyovUYpH7C3Ns9Pd1cy6ApbmG2VV4Gds9u4yCSuRfHUw==", "dev": true, "requires": { - "@babel/polyfill": "7.12.1", - "@babel/runtime": "7.12.5", - "@cliqz-oss/firefox-client": "0.3.1", - "@cliqz-oss/node-firefox-connect": "1.2.1", + "@babel/runtime": "7.13.9", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.13.1", - "bunyan": "1.8.14", - "camelcase": "6.0.0", + "addons-linter": "2.21.0", + "bunyan": "1.8.15", + "camelcase": "6.2.0", "chrome-launcher": "0.13.4", "debounce": "1.2.0", - "decamelize": "4.0.0", + "decamelize": "5.0.0", "es6-error": "4.1.1", "event-to-promise": "0.8.0", - "firefox-profile": "4.0.0", - "fs-extra": "9.0.1", + "firefox-profile": "4.1.0", + "fs-extra": "9.1.0", "fx-runner": "1.0.13", "import-fresh": "3.3.0", "mkdirp": "1.0.4", - "multimatch": "4.0.0", + "multimatch": "5.0.0", "mz": "2.7.0", - "node-notifier": "8.0.1", - "open": "7.3.0", - "parse-json": "5.0.1", - "sign-addon": "3.1.0", + "node-notifier": "9.0.0", + "open": "7.4.2", + "parse-json": "5.2.0", + "sign-addon": "3.3.0", "source-map-support": "0.5.19", "strip-bom": "4.0.0", "strip-json-comments": "3.1.1", "tmp": "0.2.1", - "update-notifier": "5.0.0", - "watchpack": "1.7.5", - "ws": "7.4.2", - "yargs": "15.4.1", - "zip-dir": "1.0.2" + "update-notifier": "5.1.0", + "watchpack": "2.1.1", + "ws": "7.4.3", + "yargs": "16.2.0", + "zip-dir": "2.0.0" }, "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { + "decamelize": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", + "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", "dev": true }, "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", + "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, @@ -20115,80 +15597,12 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", "dev": true, "requires": {} - }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - } - } } } }, @@ -20198,23 +15612,6 @@ "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", "dev": true }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, "when": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", @@ -20243,12 +15640,6 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -20335,26 +15726,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -20473,29 +15844,20 @@ "dev": true }, "zip-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", - "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz", + "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==", "dev": true, "requires": { - "async": "^1.5.2", - "jszip": "^2.4.0" + "async": "^3.2.0", + "jszip": "^3.2.2" }, "dependencies": { "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true - }, - "jszip": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", - "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", - "dev": true, - "requires": { - "pako": "~1.0.2" - } } } }, diff --git a/package.json b/package.json index 9000e1d..7ac2867 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "npm-run-all": "^4.1.5", "rollup": "^2.41.0", "selenium-webdriver": "^4.0.0-beta.1", - "web-ext": "^5.5.0", + "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" }, "engines": { From 4f9c53027a6d1762b2632ae87d9539e0b8aa3278 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 08:35:05 +0000 Subject: [PATCH 092/399] Bump eslint from 7.21.0 to 7.22.0 Bumps [eslint](https://github.com/eslint/eslint) from 7.21.0 to 7.22.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.21.0...v7.22.0) Signed-off-by: dependabot[bot] --- package-lock.json | 167 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 157 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9420480..e482080 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.21.0", + "eslint": "^7.22.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", @@ -498,6 +498,60 @@ "fsevents": "2.3.2" } }, + "node_modules/addons-linter/node_modules/eslint": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", + "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/addons-scanner-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.2.0.tgz", @@ -2647,9 +2701,9 @@ } }, "node_modules/eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", + "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", @@ -2669,7 +2723,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -2677,7 +2731,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -2936,6 +2990,33 @@ "node": ">=10" } }, + "node_modules/eslint/node_modules/globals": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz", + "integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", @@ -9278,6 +9359,53 @@ "upath": "2.0.1", "yargs": "16.2.0", "yauzl": "2.10.0" + }, + "dependencies": { + "eslint": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", + "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + } } }, "addons-scanner-utils": { @@ -10981,9 +11109,9 @@ "dev": true }, "eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", + "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -11003,7 +11131,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -11011,7 +11139,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -11023,6 +11151,23 @@ "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "globals": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz", + "integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } } }, "eslint-import-resolver-node": { diff --git a/package.json b/package.json index 2af3fc2..b38ea4e 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.21.0", + "eslint": "^7.22.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", From 74d8716c6276db5685db79fa9b80c1f1407b9cba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 09:35:20 +0000 Subject: [PATCH 093/399] Bump rollup from 2.41.1 to 2.41.2 Bumps [rollup](https://github.com/rollup/rollup) from 2.41.1 to 2.41.2. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.41.1...v2.41.2) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e482080..c7c5c4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.1", "npm-run-all": "^4.1.5", - "rollup": "^2.41.1", + "rollup": "^2.41.2", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" @@ -7288,9 +7288,9 @@ } }, "node_modules/rollup": { - "version": "2.41.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.1.tgz", - "integrity": "sha512-nepLFAW5W71/MWpS2Yr7r31eS7HRfYg2RXnxb6ehqN9zY42yACxKtEfb4xq8SmNfUohAzGMcyl6jkwdLOAiUbg==", + "version": "2.41.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.2.tgz", + "integrity": "sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -14679,9 +14679,9 @@ } }, "rollup": { - "version": "2.41.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.1.tgz", - "integrity": "sha512-nepLFAW5W71/MWpS2Yr7r31eS7HRfYg2RXnxb6ehqN9zY42yACxKtEfb4xq8SmNfUohAzGMcyl6jkwdLOAiUbg==", + "version": "2.41.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.2.tgz", + "integrity": "sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index b38ea4e..d2db3da 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.1", "npm-run-all": "^4.1.5", - "rollup": "^2.41.1", + "rollup": "^2.41.2", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" From b5be60bb40ad92953ccaf8e7fe0b995c656c3b56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 09:55:21 +0000 Subject: [PATCH 094/399] Bump mocha from 8.3.1 to 8.3.2 Bumps [mocha](https://github.com/mochajs/mocha) from 8.3.1 to 8.3.2. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v8.3.1...v8.3.2) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7c5c4f..2864713 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.2", - "mocha": "^8.3.1", + "mocha": "^8.3.2", "npm-run-all": "^4.1.5", "rollup": "^2.41.2", "selenium-webdriver": "^4.0.0-beta.1", @@ -5366,9 +5366,9 @@ } }, "node_modules/mocha": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.1.tgz", - "integrity": "sha512-5SBMxANWqOv5bw3Hx+HVgaWlcWcFEQDUdaUAr1AUU+qwtx6cowhn7gEDT/DwQP7uYxnvShdUOVLbTYAHOEGfDQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -13202,9 +13202,9 @@ "dev": true }, "mocha": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.1.tgz", - "integrity": "sha512-5SBMxANWqOv5bw3Hx+HVgaWlcWcFEQDUdaUAr1AUU+qwtx6cowhn7gEDT/DwQP7uYxnvShdUOVLbTYAHOEGfDQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", diff --git a/package.json b/package.json index d2db3da..fa871e2 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.2", - "mocha": "^8.3.1", + "mocha": "^8.3.2", "npm-run-all": "^4.1.5", "rollup": "^2.41.2", "selenium-webdriver": "^4.0.0-beta.1", From 7a45974b6054155739bcce52989286da1ced6b22 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Mar 2021 07:09:10 +0000 Subject: [PATCH 095/399] Bump rollup from 2.41.2 to 2.41.3 Bumps [rollup](https://github.com/rollup/rollup) from 2.41.2 to 2.41.3. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.41.2...v2.41.3) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2864713..1fc45e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.2", + "rollup": "^2.41.3", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" @@ -7288,9 +7288,9 @@ } }, "node_modules/rollup": { - "version": "2.41.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.2.tgz", - "integrity": "sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg==", + "version": "2.41.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.3.tgz", + "integrity": "sha512-swrSUfX3UK7LGd5exBJNUC7kykdxemUTRuyO9hUFJsmQUsUovHcki9vl5MAWFbB6oI47HpeZHtbmuzdm1SRUZw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -14679,9 +14679,9 @@ } }, "rollup": { - "version": "2.41.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.2.tgz", - "integrity": "sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg==", + "version": "2.41.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.3.tgz", + "integrity": "sha512-swrSUfX3UK7LGd5exBJNUC7kykdxemUTRuyO9hUFJsmQUsUovHcki9vl5MAWFbB6oI47HpeZHtbmuzdm1SRUZw==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index fa871e2..b1765d0 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.2", + "rollup": "^2.41.3", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" From 9c10fba0e802ec1675e757c226ea1d4effd9d90b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Mar 2021 07:30:55 +0000 Subject: [PATCH 096/399] Bump rollup from 2.41.3 to 2.41.4 Bumps [rollup](https://github.com/rollup/rollup) from 2.41.3 to 2.41.4. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.41.3...v2.41.4) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1fc45e7..ffed10d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.3", + "rollup": "^2.41.4", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" @@ -7288,9 +7288,9 @@ } }, "node_modules/rollup": { - "version": "2.41.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.3.tgz", - "integrity": "sha512-swrSUfX3UK7LGd5exBJNUC7kykdxemUTRuyO9hUFJsmQUsUovHcki9vl5MAWFbB6oI47HpeZHtbmuzdm1SRUZw==", + "version": "2.41.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", + "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -14679,9 +14679,9 @@ } }, "rollup": { - "version": "2.41.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.3.tgz", - "integrity": "sha512-swrSUfX3UK7LGd5exBJNUC7kykdxemUTRuyO9hUFJsmQUsUovHcki9vl5MAWFbB6oI47HpeZHtbmuzdm1SRUZw==", + "version": "2.41.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", + "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index b1765d0..9f9f065 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.3", + "rollup": "^2.41.4", "selenium-webdriver": "^4.0.0-beta.1", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" From a8fb92a194ce95711fc78ad2ecbed1c524127a08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Mar 2021 08:09:00 +0000 Subject: [PATCH 097/399] Bump selenium-webdriver from 4.0.0-beta.1 to 4.0.0-beta.2 Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.0.0-beta.1 to 4.0.0-beta.2. - [Release notes](https://github.com/SeleniumHQ/selenium/releases) - [Commits](https://github.com/SeleniumHQ/selenium/commits) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffed10d..3e29b41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "mocha": "^8.3.2", "npm-run-all": "^4.1.5", "rollup": "^2.41.4", - "selenium-webdriver": "^4.0.0-beta.1", + "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" }, @@ -7352,9 +7352,9 @@ } }, "node_modules/selenium-webdriver": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", - "integrity": "sha512-DJ10z6Yk+ZBaLrt1CLElytQ/FOayx29ANKDtmtyW1A6kCJx3+dsc5fFMOZxwzukDniyYsC3OObT5pUAsgkjpxQ==", + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.2.tgz", + "integrity": "sha512-uuNl3T1JjhrXCO4UAAy+iIIgZ/PqgYNiYvy+yfWCY+x2vHH9y7tIdD9a/q1rwbf/5jD/ENwYlVuNj46uIngknA==", "dev": true, "dependencies": { "jszip": "^3.5.0", @@ -14733,9 +14733,9 @@ } }, "selenium-webdriver": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz", - "integrity": "sha512-DJ10z6Yk+ZBaLrt1CLElytQ/FOayx29ANKDtmtyW1A6kCJx3+dsc5fFMOZxwzukDniyYsC3OObT5pUAsgkjpxQ==", + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.2.tgz", + "integrity": "sha512-uuNl3T1JjhrXCO4UAAy+iIIgZ/PqgYNiYvy+yfWCY+x2vHH9y7tIdD9a/q1rwbf/5jD/ENwYlVuNj46uIngknA==", "dev": true, "requires": { "jszip": "^3.5.0", diff --git a/package.json b/package.json index 9f9f065..adb51dc 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "mocha": "^8.3.2", "npm-run-all": "^4.1.5", "rollup": "^2.41.4", - "selenium-webdriver": "^4.0.0-beta.1", + "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" }, From 407e71aa9411fa4c91902e7d7b582793ebea45ed Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:12:00 -0400 Subject: [PATCH 098/399] Updating manifest for Rally and WebScience changes #86 --- manifest.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/manifest.json b/manifest.json index 558705b..46f4bec 100644 --- a/manifest.json +++ b/manifest.json @@ -2,14 +2,14 @@ "description": "A basic template for a Mozilla Rally Study.", "author": "Mozilla", "manifest_version": 2, - "name": "Rally Basic Study Template", - "version": "0.3.1", - "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", + "name": "Rally Study Template", + "version": "0.4.0", + "homepage_url": "https://github.com/mozilla-rally/study-template", "applications": { "gecko": { - "id": "ion-basic-study@mozilla.org", - "strict_min_version": "77.0a1" + "id": "rally-study-template@mozilla.org", + "strict_min_version": "87.0" } }, @@ -17,5 +17,7 @@ "background": { "scripts": ["dist/background.js"] - } + }, + + "incognito": "not_allowed" } From c38f017cea966cd635b04dbe5df9703aedeabef3 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:16:45 -0400 Subject: [PATCH 099/399] Adding WebScience to the study template #87 --- package-lock.json | 54 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/background.js | 2 ++ 3 files changed, 57 insertions(+) diff --git a/package-lock.json b/package-lock.json index 3e29b41..a8b5e21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MPL-2.0", "devDependencies": { "@mozilla/rally": "^0.5.0", + "@mozilla/web-science": "^0.1.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", @@ -236,6 +237,28 @@ "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", "dev": true }, + "node_modules/@mozilla/readability": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.1.tgz", + "integrity": "sha512-yar/f0w0fRUVM895s6yd5Z2oIxjG/6c3ROB/uQboSOBaDlri/nqI4aKtdqrldWciTLcdpjB2Z6MiVF2Bl9b8LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@mozilla/web-science": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.1.0.tgz", + "integrity": "sha512-HDM2YjE3VD20z9s9Lu/c9zuqbkf3aF1XopnpReuQ91dCXLgf7rZXtA6FBTMcSKeb6YZFnGVWggVRNbM5Zg74rQ==", + "dev": true, + "dependencies": { + "@mozilla/readability": "^0.4.1", + "dexie": "^3.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-commonjs": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", @@ -2241,6 +2264,15 @@ "dev": true, "peer": true }, + "node_modules/dexie": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.0.3.tgz", + "integrity": "sha512-BSFhGpngnCl1DOr+8YNwBDobRMH0ziJs2vts69VilwetHYOtEDcLqo7d/XiIphM0tJZ2rPPyAGd31lgH2Ln3nw==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -9143,6 +9175,22 @@ "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", "dev": true }, + "@mozilla/readability": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.1.tgz", + "integrity": "sha512-yar/f0w0fRUVM895s6yd5Z2oIxjG/6c3ROB/uQboSOBaDlri/nqI4aKtdqrldWciTLcdpjB2Z6MiVF2Bl9b8LA==", + "dev": true + }, + "@mozilla/web-science": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.1.0.tgz", + "integrity": "sha512-HDM2YjE3VD20z9s9Lu/c9zuqbkf3aF1XopnpReuQ91dCXLgf7rZXtA6FBTMcSKeb6YZFnGVWggVRNbM5Zg74rQ==", + "dev": true, + "requires": { + "@mozilla/readability": "^0.4.1", + "dexie": "^3.0.3" + } + }, "@rollup/plugin-commonjs": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", @@ -10740,6 +10788,12 @@ "dev": true, "peer": true }, + "dexie": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.0.3.tgz", + "integrity": "sha512-BSFhGpngnCl1DOr+8YNwBDobRMH0ziJs2vts69VilwetHYOtEDcLqo7d/XiIphM0tJZ2rPPyAGd31lgH2Ln3nw==", + "dev": true + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", diff --git a/package.json b/package.json index adb51dc..cde63ac 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ }, "devDependencies": { "@mozilla/rally": "^0.5.0", + "@mozilla/web-science": "^0.1.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", diff --git a/src/background.js b/src/background.js index 527ec73..80e0900 100644 --- a/src/background.js +++ b/src/background.js @@ -6,6 +6,8 @@ import "webextension-polyfill"; import { Rally, runStates } from "@mozilla/rally"; +import * as webScience from "@mozilla/web-science"; + // Example: import a module. import { initialize as exampleInitialize From 30e1538f194a4bb3193ea699529c7cc643ddc99e Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Wed, 21 Apr 2021 15:25:40 -0400 Subject: [PATCH 100/399] Initial commit to forked study-template --- .gitignore | 5 + experimental/api.js | 126 ++++ experimental/schema.json | 47 ++ icons/PrincetonShieldLarge.png | Bin 0 -> 30296 bytes icons/princeton_university_shield.svg | 1 + .../princeton_university_shield_book_gray.svg | 1 + openSearch/ask.xml | 11 + openSearch/baidu.xml | 11 + openSearch/bing.xml | 11 + openSearch/duckduckgo.xml | 11 + openSearch/ecosia.xml | 13 + openSearch/google.xml | 11 + openSearch/yahoo.xml | 11 + openSearch/yandex.xml | 11 + package-lock.json | 54 ++ package.json | 12 +- pages/css/style.css | 121 ++++ pages/js/notice.js | 54 ++ pages/js/search_ballot.js | 102 ++++ pages/logos/ask.png | Bin 0 -> 146750 bytes pages/logos/baidu.png | Bin 0 -> 21885 bytes pages/logos/bing.png | Bin 0 -> 17060 bytes pages/logos/duckduckgo.png | Bin 0 -> 6693 bytes pages/logos/ecosia.png | Bin 0 -> 87436 bytes pages/logos/google.png | Bin 0 -> 19482 bytes pages/logos/princeton.png | Bin 0 -> 25243 bytes pages/logos/yahoo.png | Bin 0 -> 20812 bytes pages/logos/yandex.png | Bin 0 -> 13613 bytes pages/notice_2.html | 51 ++ pages/notice_3.html | 60 ++ pages/search_ballot_4.html | 111 ++++ pages/search_ballot_5.html | 127 ++++ pages/search_ballot_6.html | 110 ++++ pages/search_ballot_7.html | 175 ++++++ schemas/initial.measurements.1.schema.json | 82 +++ schemas/regular.measurements.1.schema.json | 33 ++ .../serpVisitData.measurements.1.schema.json | 87 +++ searchEngineQA.md | 260 +++++++++ src-ts/.eslintrc.js | 64 ++ src-ts/Initial.ts | 115 ++++ src-ts/Intervention.ts | 190 ++++++ src-ts/RegularCollection.ts | 116 ++++ src-ts/StudyModule.ts | 50 ++ src-ts/Survey.ts | 101 ++++ src-ts/Utils.ts | 66 +++ src-ts/WebNavigation.ts | 216 +++++++ src-ts/background.ts | 54 ++ .../content-script.ts | 2 +- src-ts/content-scripts-import.ts | 89 +++ src-ts/content-scripts/common.ts | 548 ++++++++++++++++++ src-ts/content-scripts/interfaces.ts | 20 + src-ts/content-scripts/reporting.ts | 70 +++ src-ts/content-scripts/serp-scripts/ask.ts | 167 ++++++ .../serp-scripts/askgoogleads.ts | 93 +++ src-ts/content-scripts/serp-scripts/baidu.ts | 153 +++++ src-ts/content-scripts/serp-scripts/bing.ts | 125 ++++ .../serp-scripts/duckduckgo.ts | 194 +++++++ src-ts/content-scripts/serp-scripts/ecosia.ts | 120 ++++ src-ts/content-scripts/serp-scripts/google.ts | 160 +++++ src-ts/content-scripts/serp-scripts/yahoo.ts | 126 ++++ src-ts/content-scripts/serp-scripts/yandex.ts | 117 ++++ src-ts/decs.d.ts | 1 + src-ts/types.d.ts | 1 + src/ExampleModule.js | 7 - src/background.js | 43 -- tsconfig.json | 20 + 66 files changed, 4682 insertions(+), 55 deletions(-) create mode 100644 experimental/api.js create mode 100644 experimental/schema.json create mode 100644 icons/PrincetonShieldLarge.png create mode 100644 icons/princeton_university_shield.svg create mode 100644 icons/princeton_university_shield_book_gray.svg create mode 100644 openSearch/ask.xml create mode 100644 openSearch/baidu.xml create mode 100644 openSearch/bing.xml create mode 100644 openSearch/duckduckgo.xml create mode 100644 openSearch/ecosia.xml create mode 100644 openSearch/google.xml create mode 100644 openSearch/yahoo.xml create mode 100644 openSearch/yandex.xml create mode 100644 pages/css/style.css create mode 100644 pages/js/notice.js create mode 100644 pages/js/search_ballot.js create mode 100644 pages/logos/ask.png create mode 100644 pages/logos/baidu.png create mode 100644 pages/logos/bing.png create mode 100644 pages/logos/duckduckgo.png create mode 100644 pages/logos/ecosia.png create mode 100644 pages/logos/google.png create mode 100644 pages/logos/princeton.png create mode 100644 pages/logos/yahoo.png create mode 100644 pages/logos/yandex.png create mode 100644 pages/notice_2.html create mode 100644 pages/notice_3.html create mode 100644 pages/search_ballot_4.html create mode 100644 pages/search_ballot_5.html create mode 100644 pages/search_ballot_6.html create mode 100644 pages/search_ballot_7.html create mode 100644 schemas/initial.measurements.1.schema.json create mode 100644 schemas/regular.measurements.1.schema.json create mode 100644 schemas/serpVisitData.measurements.1.schema.json create mode 100644 searchEngineQA.md create mode 100644 src-ts/.eslintrc.js create mode 100755 src-ts/Initial.ts create mode 100755 src-ts/Intervention.ts create mode 100755 src-ts/RegularCollection.ts create mode 100755 src-ts/StudyModule.ts create mode 100755 src-ts/Survey.ts create mode 100755 src-ts/Utils.ts create mode 100755 src-ts/WebNavigation.ts create mode 100644 src-ts/background.ts rename src/content-script.js => src-ts/content-script.ts (87%) create mode 100755 src-ts/content-scripts-import.ts create mode 100644 src-ts/content-scripts/common.ts create mode 100644 src-ts/content-scripts/interfaces.ts create mode 100755 src-ts/content-scripts/reporting.ts create mode 100644 src-ts/content-scripts/serp-scripts/ask.ts create mode 100644 src-ts/content-scripts/serp-scripts/askgoogleads.ts create mode 100644 src-ts/content-scripts/serp-scripts/baidu.ts create mode 100644 src-ts/content-scripts/serp-scripts/bing.ts create mode 100644 src-ts/content-scripts/serp-scripts/duckduckgo.ts create mode 100644 src-ts/content-scripts/serp-scripts/ecosia.ts create mode 100644 src-ts/content-scripts/serp-scripts/google.ts create mode 100644 src-ts/content-scripts/serp-scripts/yahoo.ts create mode 100644 src-ts/content-scripts/serp-scripts/yandex.ts create mode 100644 src-ts/decs.d.ts create mode 100644 src-ts/types.d.ts delete mode 100644 src/ExampleModule.js delete mode 100644 src/background.js create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index 69c21cb..584d460 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,8 @@ dist # Generated study files web-ext-artifacts/ + +# Compiled Typescript .js +src/ + +.DS_Store \ No newline at end of file diff --git a/experimental/api.js b/experimental/api.js new file mode 100644 index 0000000..7c5f995 --- /dev/null +++ b/experimental/api.js @@ -0,0 +1,126 @@ +/** + * @file Implementation for experimental API. + * + * It provides definitions for the functions and events + * defined in the schema. + * @module WebScience.Experiments.experimental + */ + +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); + +/** + * @description Using experiments_api feature to define new APIs linked to + * the extension. experimental is exposed under the global browser object and + * is accessible from background scripts. + */ +this.experimental = class extends ExtensionAPI { + getAPI() { + return { + experimental: { + /** + * Changes the user's default search engine + * + * @function + * @param {string} searchEngineName - name of search engine to make default + */ + async changeSearchEngine(searchEngineNameIn) { + const searchEngineDetailsObject = { + google: { + iconURL: "https://www.google.com/favicon.ico", + alias: "@google", + }, + bing: { + iconURL: "https://www.bing.com/favicon.ico", + alias: "@bing", + }, + yahoo: { + iconURL: "https://www.yahoo.com/favicon.ico", + alias: "@yahoo", + }, + duckduckgo: { + iconURL: "https://duckduckgo.com/favicon.ico", + alias: "@duckduckgo", + }, + ecosia: { + iconURL: "https://cdn.ecosia.org/assets/images/ico/favicon.ico", + alias: "@ecosia", + }, + yandex: { + iconURL: "https://yastatic.net/iconostasis/_/KKii9ECKxo3QZnchF7ayZhbzOT8.png", + alias: "@yandex", + }, + baidu: { + iconURL: "https://www.baidu.com/favicon.ico", + alias: "@baidu", + }, + ask: { + iconURL: "https://www.ask.com/logo.png", + alias: "@ask", + }, + } + + const searchEngineName = searchEngineNameIn.toLowerCase(); + + // Wait for the search service to initialize and un-hide all the default engines + await Services.search.init() + Services.search.restoreDefaultEngines(); + + let searchEngine = null + + // Retrieves the engine we are attempting to make default + // from the list of installed engines + const installedSearchEngines = await Services.search.getEngines() + for(const installedSearchEngine of installedSearchEngines) { + if(installedSearchEngine.name.toLowerCase().includes(searchEngineName)) { + searchEngine = installedSearchEngine + break + } + } + + // If the engine we are attempting to make default is not + // already installed, swe add it through an OpenSearch xml file + if(!searchEngine) { + searchEngine = await Services.search.addOpenSearchEngine(`https://citpsearch.cs.princeton.edu/searchengine/openSearch/${searchEngineName}.xml`, searchEngineDetailsObject[ searchEngineName ].iconURL) + searchEngine.alias = searchEngineDetailsObject[ searchEngineName ].alias + } + + // Make sure the engine is not hidden, move it to the top of the list of options, and make it the default + searchEngine.hidden = false + Services.search.moveEngine(searchEngine, 0); + Services.search.defaultEngine = searchEngine + }, + /** + * Get the user's current default search engine + * @function + */ + async getSearchEngine() { + + await Services.search.init(); + const defaultEngine = await Services.search.getDefault() + if(defaultEngine) { + return defaultEngine.name + } else { + return "" + } + }, + /** + * Get the user's current default search engine + * @function + * @param {string} newHomepage - url of the new homepage + */ + changeHomepage(newHomepage) { + Services.prefs.setCharPref("browser.startup.homepage", newHomepage) + }, + /** + * Get the user's current default search engine + * @function + */ + getHomepage() { + return Services.prefs.getCharPref("browser.startup.homepage") + }, + + + } + } + } +} \ No newline at end of file diff --git a/experimental/schema.json b/experimental/schema.json new file mode 100644 index 0000000..092e396 --- /dev/null +++ b/experimental/schema.json @@ -0,0 +1,47 @@ +[ + { + "namespace": "experimental", + "functions": [ + { + "name": "changeSearchEngine", + "type": "function", + "description": "Change the user's default search engine", + "async": true, + "parameters": [ + { + "name": "searchEngineName", + "type": "string", + "description": "name of search engine to make default" + } + ] + }, + { + "name": "getSearchEngine", + "type": "function", + "description": "Get the user's current search engine", + "async": true, + "parameters": [] + }, + { + "name": "changeHomepage", + "type": "function", + "description": "Change the user's homepage", + "async": false, + "parameters": [ + { + "name": "newHomepage", + "type": "string", + "description": "url of the new homepage" + } + ] + }, + { + "name": "getHomepage", + "type": "function", + "description": "Get the user's homepage", + "async": true, + "parameters": [] + } + ] + } +] \ No newline at end of file diff --git a/icons/PrincetonShieldLarge.png b/icons/PrincetonShieldLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..19b7e79cccf11b77721f696f85d716805f37f215 GIT binary patch literal 30296 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 VsW6oj_^DWsoRpGe>HCiX{|CToJQV-{ literal 0 HcmV?d00001 diff --git a/icons/princeton_university_shield.svg b/icons/princeton_university_shield.svg new file mode 100644 index 0000000..356de90 --- /dev/null +++ b/icons/princeton_university_shield.svg @@ -0,0 +1 @@ + diff --git a/icons/princeton_university_shield_book_gray.svg b/icons/princeton_university_shield_book_gray.svg new file mode 100644 index 0000000..e10c82c --- /dev/null +++ b/icons/princeton_university_shield_book_gray.svg @@ -0,0 +1 @@ + diff --git a/openSearch/ask.xml b/openSearch/ask.xml new file mode 100644 index 0000000..0621cdf --- /dev/null +++ b/openSearch/ask.xml @@ -0,0 +1,11 @@ + + + Ask.com + Ask.com Search + Ask.com Search + UTF-8 + https://www.ask.com/favicon.ico + + + \ No newline at end of file diff --git a/openSearch/baidu.xml b/openSearch/baidu.xml new file mode 100644 index 0000000..37aa7cb --- /dev/null +++ b/openSearch/baidu.xml @@ -0,0 +1,11 @@ + + + Baidu + Baidu Search + Baidu Search + UTF-8 + https://www.baidu.com/favicon.ico + + + \ No newline at end of file diff --git a/openSearch/bing.xml b/openSearch/bing.xml new file mode 100644 index 0000000..34bb973 --- /dev/null +++ b/openSearch/bing.xml @@ -0,0 +1,11 @@ + + + Bing + Bing Search + Bing Search + UTF-8 + http://www.bing.com/favicon.ico + + + \ No newline at end of file diff --git a/openSearch/duckduckgo.xml b/openSearch/duckduckgo.xml new file mode 100644 index 0000000..65526c4 --- /dev/null +++ b/openSearch/duckduckgo.xml @@ -0,0 +1,11 @@ + + + DuckDuckGo + DuckDuckGo Search + DuckDuckGo Search + UTF-8 + data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB8lBMVEUAAADkRQzjPwPjQQXkRQ3iPwTiQQXgPQPeQgrcOwPVNgDVNQDWOgbTMwDRMgDQMwDSMwDRNwTQLgDRJgDSJwDSLgDSNwTjOgDiOADjOQDkPADhQAXzs5v+/fv////0vKbiRQvgPQHpdUr85NzuknPdKgDcIwDnZzj2w7HqeU/gPQLsimb/+PftjWn97Obpb0LdJQDeLQDtjmvsi2jgSBDnbULgOQD/39HgLQDeMgDpeFLgSBH0v670uqbaJQD2qImWvP/G1Ob5+/3u//+fvvXyp47dMwDaLwD0u6v0v6/aNQDiXi/aKQD3qozU7/8gSY2vvtg0ZK/OqLDaKQHYKgLgWTfaNADZMgDZMADZLADzqpD7//+xwdz//9H/5Bn/7Bn//ADofADYMADYMQDZOgPXLgDiZDj//97/0AD3tQDvlgHZOgbXLATXMADWMgDfXjLVLQD///z+0AD/3Rn/yRnwnQDcVjbVMQDyv67wuKTSJwDRHQD+8O/tg3/iQQDwhAHnawHWMADvtKfyva7XQxHga0bQGQD2vbH/u8LXIQCmPQzja07XQxLliGn99fPkcVHvhnGZ5VguvUU5wktBwCcAgxzydVv/8/XmiGngdlL+ysi3+I8LtCE80V6P3YmX4sDleljSNQLzr6D7sKPXNQTSIwAEAbMrAAAAF3RSTlMARqSkRvPz80PTpKRG3fPe3hio9/eoGP50jNsAAAABYktHRB5yCiArAAAAyElEQVQYGQXBvUqCYRiA4fu2V9Tn+UQddI3aCpxaOoU6iU4gcqqpoYbALXBuCuoYmttamqJDiEoh4YP+MOi6BNCh+uYKEGiOVNCXXxA2XDVV/UyfKbRCXTLQWAxbP2vt8Ue/uYDvfim91615sb2um6rqtrr/NFb1cUf1Ybd06areU6lSlYpK79jzK1SyJOkfhOl8JGEcqV5zoKrTRqO6yUzIzNu46ijdM1VV9bhuUJ/nZURExLRzUiPQm3kKXHi4BAEGOmOi78A/L1QoU/VHoTsAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTQtMDEtMTlUMjA6MDE6MTEtMDU6MDAuET6cAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTAxLTE5VDIwOjAxOjExLTA1OjAwX0yGIAAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/openSearch/ecosia.xml b/openSearch/ecosia.xml new file mode 100644 index 0000000..06bc143 --- /dev/null +++ b/openSearch/ecosia.xml @@ -0,0 +1,13 @@ + + + Ecosia + Ecosia Search + Ecosia Search + UTF-8 + + data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAACMuAAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qzQBuaw3UrmsN6u5rDfruaw37bmsN+25rDfSuaw3fLmsNyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2rTokrLFGurqsNv+5rDf/uaw3/7msN/+5rDf/uaw3/7urNP/AqS7suqw2aAAAAAAAAAAAAAAAAAAAAAC/qjApkbpn4mvJlf/EqCr/uaw3/7msN/+5rDf/uaw3/7urNP+rsUj/ib5x/7qsNv+9qzKBAAAAAAAAAAC5rDcLwKkvzom9cf813Nb/lrlh/8KoLP+5rDf/uaw3/7msN//BqS3/eMSF/yXj6v+BwHv/lbli/7atO1IAAAAAuaw3bsCqL/+Rumb/K+Di/z3ZzP+dtln/vqox/7msN/+5rDf/waku/23Ikv8s4OH/ONvS/5m4Xv+7qzXZuaw3CbmsN9DBqS7/hL93/zDe3f8v393/RdbD/7OuPv+7qzX/uqw2/8WoKf99wn//Lt/e/y/e3f99wn//v6ow/7msN0+7qzT7s64+/0bWwf8y3tn/L97d/03TuP+usET/vKoz/7isOP+vr0P/XM6n/zDe3P813Nb/L97d/5O6Zf/EpymOu6s0/7OuPv8+2cv/J+Hn/1HStP+0rjz/vasy/76qMP9zxYr/NtzV/zTd1/823NX/NtzV/zLd2f9I1b//mbheqsGpLf+gtVX/bseR/3fEhv+wr0L/vaoy/7msN/+/qjD/Wc+q/yvg4/813Nb/Md7b/zfc1P833NT/Mt7a/zbc1aqHvnT6bMiT/522WP+wr0L/vqox/7msN/+5rDf/vaoy/6C1VP8/2cr/N9zT/2vJlf9hzKD/NtzU/zbc1f813NaONdzWz3HGjv9ky53/prNN/8SoKv+8qzT/uaw3/7msOP/EqCr/ecOE/0HYx/9V0K//N9vT/zXc1v823NX/NtzVTjXc120w3tz/Lt/e/0zUu/+Fv3X/rrBF/7msN/+7qzX/vaoy/6qxSf9G1sH/L9/d/zPd2P8x3tv/L9/e2C/f3Qk23NUKNtzVzDbc1v823NX/OdvQ/0nVvv+xr0H/ta07/7+qL/+7qzT/r69D/2LMoP823NX/VNGx/2TLnVEAAAAAAAAAADbc1Sc03dfgQNnJ/2bKm/862tD/pLRP/1vOqf9S0rP/ib1x/8CpL/+4rDj/qLJM/7qsNn4AAAAAAAAAAAAAAAAAAAAAM93YI0vUvLtux5H/VdGw/3DHj/9Zz6r/Xc2m/3rDgv+5rDf/u6s1672rM2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyaYjUburNaytsUbZuK056cGpLuS/qjDGuaw3gLmsNx4AAAAAAAAAAAAAAAAAAAAA+D8AAOAPAADAAwAAgAMAAIABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAACAAQAAgAMAAMAHAADgDwAA+B8AAA== + + + + diff --git a/openSearch/google.xml b/openSearch/google.xml new file mode 100644 index 0000000..d2ecde4 --- /dev/null +++ b/openSearch/google.xml @@ -0,0 +1,11 @@ + + + Google + Google Search + Google Search + UTF-8 + https://www.google.com/favicon.ico + + + \ No newline at end of file diff --git a/openSearch/yahoo.xml b/openSearch/yahoo.xml new file mode 100644 index 0000000..6af7eec --- /dev/null +++ b/openSearch/yahoo.xml @@ -0,0 +1,11 @@ + + + Yahoo + Yahoo Search + Yahoo Search + UTF-8 + data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAAAgIAAABACAASAEAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewE4824BNLJvADJ1cAQ3UW8IOCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwCDknbQQ1UW8AM3VuATSyegE383sAN/91ADT/dQA1/3QANf90ATX/dAI2/3QDNv90Azb/dAM2/3QDNv9zAjb/cwI1/3MBNP93ADb/dAA0/3oAN/99ADj/ewA3/3sBN/99Ajn/gAM7/4IEPf+BBT3/egAy/3kAMv9/BTz/gAU8/30EO/+AAjv/fQE5/3gANv98ADj/fgA4/4IAO/+EAjz/hgM9/4kEQP+LBkH/hwA6//Tl7P/05u3/hgA6/4oGQf+JBUD/iQQ//4cCPf+BATr/fgA4/4EAOf+LAT//jANA/44EQv+SBkT/kgdF/5IAQf/s0t7/7dTf/5IAQf+VCEf/kwdG/5IFRP+PBEH/iQI+/34BOf+AADr/lAFC/5YDRf+ZBUb/mwdJ/50IS/+bA0b/6srZ/+vM2v+bA0b/mwpK/5sISf+bBkj/mQVG/4wDQP+AADr/hgA8/5oCRf+gBEj/owZL/6UITf+nCk//pgVM/+nB0//pwtT/pgVN/6kKUf+lCU7/owdM/54FSP+WA0X/gQE6/4YAPP+fAkj/qgRO/6wHT/+uCFH/rgtS/60BTv/z2eT/8tnl/60CTv+wC1X/rQlS/6wIUP+pBk7/lgRF/4YBPP+HAD3/pwNL/7MFUf+0BlP/tAhU/7cLVv/HQ33////////////KRYD/tgtW/7cJVv+0CFP/rAVP/5sER/+GAT3/iAE9/60CTv++BFb/vwZY/8AIWf+9AFH/9tzn//TX5P/01uT/993p/7wAUv/ACFr/vwdY/7QEUv+hA0n/gwE7/4oAPf+0AlD/xQNZ/8QFWf/EB1v/2ViR///////RQID/0T+A///////ZW5L/xwhd/8YGW/+9BFb/pQJK/4EAOv+NAD//twFS/8gCWv/JBFv/xgBT//34+v/wvdP/xABX/8UBV//wu9P//vn7/8cAVP/KBF3/wANX/6kCTP+BADr/iwA+/7cAUv/HAVr/xQFY/+OIsP//////xBxn/74GWP+/B1n/xBpm///////jirH/xgFZ/8ICV/+vAE//igA9/4gAPP+qAEz/tABR/68AS//SfqT/xlmK/6oBTP+qBU7/qQRN/6gCTP/GV4j/0nui/7EATP+vAU7/mgBF/4MAO/+CADr/jAA+/5wARf+IAD3/jgFA/4ABO/99Ajr/gwI9/4cCPv9/Ajv/jAFA/4oBPv+UAEL/mQBE/4cAPf9/ADn/fAE483oBOLR1ADZ2cwQ3UnAHOCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqCDUndQQ4UoAAOnZ7ATi0fAE48z/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAoAAAACAAAABAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAz/3IANMpzAjWIagApiGoAKYhzAjWIcgA0ym8AM/93ADX/ggI6/4IDPP/Tkq3/05Gs/4IDPP+DAjr/dwA1/38BOPyVBET/lwZH/8uDo//Lg6P/mAZH/5UERP9/ATj8iAE976YFS/+nBU7/4KC4/96ctf+oBU7/pQVM/4gBPe+MAT/vtgVT/7sWW//8+fj/+evw/7sWXP+1BVL/jAE/75UBQ/zFAFX/68LV/9ZYj//WV43/5a3F/8YAVv+UAUL8kwBA/8tUhP/12OX/tQBN/7YATf/22+j/ylGB/5IAQP93ADb/hAA4yoIAMomCAjuHggI6iIIAMoiDADfKdgA2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + diff --git a/openSearch/yandex.xml b/openSearch/yandex.xml new file mode 100644 index 0000000..0c1ce14 --- /dev/null +++ b/openSearch/yandex.xml @@ -0,0 +1,11 @@ + + + Yandex + Yandex Search + Yandex Search + UTF-8 + https://yastatic.net/iconostasis/_/KKii9ECKxo3QZnchF7ayZhbzOT8.png + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3e29b41..ad1ed5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MPL-2.0", "devDependencies": { "@mozilla/rally": "^0.5.0", + "@mozilla/web-science": "^0.2.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", @@ -236,6 +237,28 @@ "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", "dev": true }, + "node_modules/@mozilla/readability": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.1.tgz", + "integrity": "sha512-yar/f0w0fRUVM895s6yd5Z2oIxjG/6c3ROB/uQboSOBaDlri/nqI4aKtdqrldWciTLcdpjB2Z6MiVF2Bl9b8LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@mozilla/web-science": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.2.0.tgz", + "integrity": "sha512-DnlYwg9MuZanFkGcb+wbdVYzYyW9OPoX/uI6QPEuIkwirgXVmAI5oRHx/k2WsYpvf4/lQIZYYLwCSsZRZhFvpw==", + "dev": true, + "dependencies": { + "@mozilla/readability": "^0.4.1", + "dexie": "^3.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-commonjs": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", @@ -2241,6 +2264,15 @@ "dev": true, "peer": true }, + "node_modules/dexie": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.0.3.tgz", + "integrity": "sha512-BSFhGpngnCl1DOr+8YNwBDobRMH0ziJs2vts69VilwetHYOtEDcLqo7d/XiIphM0tJZ2rPPyAGd31lgH2Ln3nw==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -9143,6 +9175,22 @@ "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", "dev": true }, + "@mozilla/readability": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.1.tgz", + "integrity": "sha512-yar/f0w0fRUVM895s6yd5Z2oIxjG/6c3ROB/uQboSOBaDlri/nqI4aKtdqrldWciTLcdpjB2Z6MiVF2Bl9b8LA==", + "dev": true + }, + "@mozilla/web-science": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.2.0.tgz", + "integrity": "sha512-DnlYwg9MuZanFkGcb+wbdVYzYyW9OPoX/uI6QPEuIkwirgXVmAI5oRHx/k2WsYpvf4/lQIZYYLwCSsZRZhFvpw==", + "dev": true, + "requires": { + "@mozilla/readability": "^0.4.1", + "dexie": "^3.0.3" + } + }, "@rollup/plugin-commonjs": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", @@ -10740,6 +10788,12 @@ "dev": true, "peer": true }, + "dexie": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.0.3.tgz", + "integrity": "sha512-BSFhGpngnCl1DOr+8YNwBDobRMH0ziJs2vts69VilwetHYOtEDcLqo7d/XiIphM0tJZ2rPPyAGd31lgH2Ln3nw==", + "dev": true + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", diff --git a/package.json b/package.json index adb51dc..8f77199 100644 --- a/package.json +++ b/package.json @@ -2,18 +2,20 @@ "name": "rally-study-template", "version": "0.3.1", "scripts": { + "compile-typescript": "tsc", "build": "rollup -c", "dev": "rollup -c --config-enable-developer-mode", - "lint": "eslint . && web-ext lint", + "lint": "eslint src-ts/* && web-ext lint", "package": "npm run build && web-ext build --overwrite-dest --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", - "start": "npm run build && web-ext run", + "start": "npm run build && web-ext run --browser-console", "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"", "watch": "npm-run-all --parallel watch-raw watch-bundled", "watch-raw": "npm run dev -- -w", - "watch-bundled": "web-ext run --watch-file dist/background.js" + "watch-bundled": "web-ext run --browser-console --watch-file dist/background.js" }, "devDependencies": { "@mozilla/rally": "^0.5.0", + "@mozilla/web-science": "^0.2.0", "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", @@ -26,6 +28,8 @@ "npm-run-all": "^4.1.5", "rollup": "^2.41.4", "selenium-webdriver": "^4.0.0-beta.2", + "@typescript-eslint/eslint-plugin": "^4.19.0", + "@typescript-eslint/parser": "^4.19.0", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" }, @@ -45,4 +49,4 @@ "url": "https://github.com/mozilla-rally/study-template/issues" }, "homepage": "https://github.com/mozilla-rally/study-template#readme" -} +} \ No newline at end of file diff --git a/pages/css/style.css b/pages/css/style.css new file mode 100644 index 0000000..c5e50a8 --- /dev/null +++ b/pages/css/style.css @@ -0,0 +1,121 @@ +@charset "UTF-8"; +@import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap'); + +html { + box-sizing: border-box; + -webkit-overflow-scrolling: touch; +} +*, +*:before, +*:after { + box-sizing: inherit; +} + +/*standardized font*/ +html { + /* Never get smaller than this */ + font-size: 8px; +} +@media (min-width:600px) { + html { + font-size: 9px; + } +} +@media (min-width:800px) { + html { + font-size: 10px; + } +} +@media (min-width:1000px) { + html { + /* Never get larger than this */ + font-size: 12px; + } +} +body { + font-family: "Roboto", sans-serif; +} + +h1 { + font-size: 3.5rem; +} +h2 { + font-size: 2rem; +} +h3 { + font-size: 2.5rem; +} +h4 { + font-size: 2rem; + font-weight: 700; +} +p { + line-height: 1; + font-size: 2rem; +} + +.chevron-container { + display: flex; + align-items: center; + font-size: 40px;; +} +.radio-container { + display: flex; + align-items: center; +} + +.rotate { + -moz-transition: all 0.3s linear; + -webkit-transition: all 0.3s linear; + transition: all 0.3s linear; +} + +.rotate.down { + -moz-transform:rotate(180deg); + -webkit-transform:rotate(180deg); + transform:rotate(180deg); +} +.showing { + display: block; +} +.hiding { + display: none; +} + +.wrapper { + padding-top: 1rem; +} + +.footer { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + padding: 20px 20px 20px 20px; +} + +.logo { + max-height:100px; +} + +.logo-div { + text-align: right; +} + +.fa-chevron-down { + height: 40px; + width: 40px; +} + +.radio-button { + height: 40px; + width: 40px; +} + +.button { + font-size: 2rem; +} + +.see-more-container { + margin-top: 20px; +} diff --git a/pages/js/notice.js b/pages/js/notice.js new file mode 100644 index 0000000..bf29868 --- /dev/null +++ b/pages/js/notice.js @@ -0,0 +1,54 @@ +window.addEventListener("DOMContentLoaded", function () { + let totalAttentionTime = 0; + let previousAttentionStart = 0; + let pageHasAttention = false; + if(!document.hidden) { + pageHasAttention = true; + previousAttentionStart = performance.now() + } + function getAttentionTime() { + if(pageHasAttention) { + return totalAttentionTime + (performance.now() - previousAttentionStart); + } + else { + return totalAttentionTime; + } + } + + browser.runtime.onMessage.addListener(message => { + if(message.type === "WebScience.Utilities.PageManager.pageAttentionUpdate") { + pageHasAttention = message.pageHasAttention + if(pageHasAttention) { + previousAttentionStart = performance.now() + } else { + totalAttentionTime = totalAttentionTime + (performance.now() - previousAttentionStart) + } + } + }); + + let revert = false; + document.querySelectorAll(".revert").forEach(revertElement => { + revertElement.addEventListener("click", () => { + revert = true; + window.close(); + }); + }) + + + + function handleResponse(response) { + if(response.previous && response.current) { + document.querySelector("#engines_notice").textContent = `Your search engine was changed from ${response.previous} to ${response.current}.` + } + } + function handleError(error) { + console.error(`Error: ${error}`); + } + + browser.runtime.sendMessage({ type: "SearchEngineNotice" }).then(handleResponse, handleError); + + window.addEventListener("unload", (event) => { + browser.runtime.sendMessage({ type: "NoticeResponse", revert: revert, attentionTime: getAttentionTime() }); + }); +}); + diff --git a/pages/js/search_ballot.js b/pages/js/search_ballot.js new file mode 100644 index 0000000..e562f50 --- /dev/null +++ b/pages/js/search_ballot.js @@ -0,0 +1,102 @@ +window.addEventListener("DOMContentLoaded", function () { + let totalAttentionTime = 0; + let previousAttentionStart = 0; + let pageHasAttention = false; + if(!document.hidden) { + pageHasAttention = true; + previousAttentionStart = performance.now() + } + function getAttentionTime() { + if(pageHasAttention) { + return totalAttentionTime + (performance.now() - previousAttentionStart); + } + else { + return totalAttentionTime; + } + } + + browser.runtime.onMessage.addListener(message => { + if(message.type === "WebScience.Utilities.PageManager.pageAttentionUpdate") { + pageHasAttention = message.pageHasAttention + if(pageHasAttention) { + previousAttentionStart = performance.now() + } else { + totalAttentionTime = totalAttentionTime + (performance.now() - previousAttentionStart) + } + } + }); + + let see_more_clicked = false + const details_expanded_set = new Set() + + function shuffleArray(array, ordering) { + for(let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [ array[ i ], array[ j ] ] = [ array[ j ], array[ i ] ]; + [ ordering[ i ], ordering[ j ] ] = [ ordering[ j ], ordering[ i ] ]; + } + } + + const searchEnginesContainer = document.querySelector(".search-engines") + const engines = Array.from(searchEnginesContainer.children) + const engines_ordering = [] + + for(const engine of engines) { + engines_ordering.push(engine.className) + } + shuffleArray(engines, engines_ordering) + searchEnginesContainer.innerHTML = ""; + + const initialEngines = engines.slice(0, 4) + const moreEngines = engines.slice(4) + + for(const engine of initialEngines) { + searchEnginesContainer.append(engine) + } + + const moreSearchEnginesContainer = document.querySelector(".search-engines-more") + if(moreEngines.length && moreSearchEnginesContainer) { + for(const engine of moreEngines) { + moreSearchEnginesContainer.append(engine) + } + } + + // TODO: async here necessary? + document.querySelector(".continue").addEventListener("click", async () => { + const selected_engine = document.querySelector("input[name=engine-select]:checked").value + await browser.runtime.sendMessage({ type: "SearchBallotResponse", engine: selected_engine, engines_ordering: engines_ordering, see_more_clicked: see_more_clicked, attentionTime: getAttentionTime(), details_expanded: Array.from(details_expanded_set) }); + window.close(); + }); + + document.querySelectorAll("input").forEach(inputElement => { + inputElement.addEventListener("click", () => { + document.querySelector(".footer").style.display = "" + document.querySelector(".wrapper").style.marginBottom = "120px" + }); + }) + + + document.querySelectorAll(".rotate").forEach(rotateElement => { + rotateElement.addEventListener("click", (event) => { + event.currentTarget.classList.toggle("down") + + details_expanded_set.add(event.currentTarget.parentNode.parentNode.parentNode.parentNode.className) + + // Toggle this window open/close + const textBox = event.currentTarget.parentNode.parentNode.previousElementSibling.children[ 1 ] + textBox.classList.toggle("showing") + textBox.classList.toggle("hiding") + }); + }) + + document.querySelectorAll(".see-more").forEach(seeMoreElement => { + seeMoreElement.addEventListener("click", () => { + see_more_clicked = true + document.querySelector(".search-engines-more").classList.remove("hiding") + document.querySelector(".see-more-container").classList.add("hiding") + }); + }) + + + +}); diff --git a/pages/logos/ask.png b/pages/logos/ask.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8a8fcbeb80100ab3879a6121f48ae4391fa6a6 GIT binary patch literal 146750 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®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

OPmevn3zrdi=A!F`2XO~Kus&C&!! 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ⅅAj9l-2?4ArIU#?D8x-gf^ z@3)$v5=0H8332VouU&JjJ0^{KHC$#6&M>(s1aSS*Ve2AoqV_~OFfnYZiK+5Z33a9g zopTUUxGcQZy6WIEA}VQq%#^26F7%Rq{!ymo!A7&$zrC*>)px3EtH=93nOG(T&K=f1 zT~X=FVln~mpzR)X9UpCf{Jrcy*g^(aG-GVV_%nRfa@W?}@oo7k}e8()!RVVq|%*?%WIAgu`_-*r%KJ{iArdeDJLcc2zf*7!whvlH%Odv2ZgpxJW0jT z1daBAFxb2dy%2N=MX{iwnp?NEjdg6jtiJV;hyjKHRx7e6a(W2WNL@9ZFS%t9_Y`X1 zdWJ>8siCDww?y+2am>eA7h0GqDo{7DF5->^BT}4ul|bVewEJ7365~w~rpx|G3_o}a zkomCA<8{IVgHh1{AAvj}^Kcit@Q3%x`D~m*Ary~W50rhKYLR(uHJ6LzBkeU}>BZva zW1~waTAX-_w3_BL1Bi&l;I_m03$?k1MI2^VI_x8i-ma+li}A3ucYCf!agns`%ScQG zZZ_GQbeXkDW5$)_(@-((E+j|>ctVs9GzxKC1PVb|0hb@hu@T#p?#-S+y9m3;N z3r{~O@}u5HE;JviqU_M*==wmW}vzg3heMs)RV z7cV^u#B)Vj+s$<3F+|h1-SFk;EQmDR7mUAtU+|j{@Eypn*Yr_8z`fMXqw5CyN+4}J zp%P$U3lBv_RxG5p~Y_5@)VwC@iOeg zzaeB2OaM%kLZ^*D;lu_VOBu9k`QOnTcw%KSe(aqE430;-4AH&z?wqJ9JR}|g+Lwp# z-1v*r|Mi2KgSxfgi%sMBQ#}4`xUhOp{`zO8#JQ;3UZ#%5@n+>;lM}J|=U_`aP1Nr?(NoNM>PO{54Pi!^Ki^9A8E5!vHN1@B*eJlW^7XrEvu&G)F(Q-(VP8BX26_Hr z-fag>(BGl!aaZ1mr0C*7 z^UGb?%uD_Hwk)c@sAzpnm-?(fgX{jM7C-)9Z1H(bES+9YDpu%Q?-f5YtLjcp#paiS zF2%{uw(;wOk3Czg*LiSzKbO7i?2x#Yt<&XUIr}{6GDO#b(?awiYFDKj5~J1zut=ew zBtJAFULnBRyHL0>zPu#v;msi+R&5e>%LRvQIt3ovrGUtwnRq^BUEU+qEf)vW7cW{k z`~8s)`Uz{8!{^UtbiSmlK1_$Y5~PfV>p;IUOj$P?Eh{35ojP>GikmIp)}@! zK2QS@pe8i$TX~_Jn2yH&G$Qq*9GkV33EVml5Y5UL?9D4dVH_3ThUtIlR#WuAqLV#O zjpG-m6OR^cO8h=9*YO>r`3>O#^TYA6oPo*0k(?=7G5|{|{n9)bjcW~9xRc(*)gc_u zAob#o77_`P5CCAVK{a1L|#a^sxX;{-2&S#$;!Oc4{`tx)Eim z{5`3GAy7{Ej6gV6zRbpWe0nDf{1q5^HHSHL|eL;G!A+iHx>D;7Uft~nQleJ4DAsk z=#wy?X|@jEdbzJTIN|ou6!xOhW`>k|7z$0pIK?^`pSrSc(VY*6b9P$GyVDT2dL*~_!j zP1f$eB^Ff(WqLZAx-%zMRxTk?HSM5Bu4bvM+6#~FuE(?ct>?9>fl1u%uCe`S)aQ`f_mj`bIlj+b&O+jn3CmoOLb48u?x~Ru# zN|_<}Y@QkMB=sWh+4Gxz81;Ree8Ms^;f;ZF9wiG|;fn*mSg#7#9mtlkd*6kFY7+Os z$TnC+*1Ya+aWU%R4wGe4v58>wPO<10*ssl?BMLVm z1T*+I{#%x%ImCV9`)}c(l4t)=AIA?913TDV^Wd#F@1xoYW0K{d#ZTrma0PR>NSz3( zRatc>Pt5|H1b$C=kO}3)=rkJ#zSP!jvZO7hnA7hz9%sp1s3#nfX^3%L>ZDc8R3C}$ zv}(EYs1g3v&O4iDMmhW~-v@`XsV<_aZav*cF2i0LSCMw6kxeonF^siwfFD{a37A{t>0r=D#e23Ia={QMf`a+^KfKt<%lii4 zU8t@qjt3MnT~{^;gw^+P{dSA`HVB<*wu}F5NFWL8ztHHW8-E@HPK|A|R-x1!FQ^IMkZ{KT|S zqZ@U@rsMU}-DQ?E`-xuQllJOvP|F#yhPu+|cd*+>m~XY?cm96Hm$HnPS^HI0b*W7C zhAf|VqXQm*M1{+MFKDILiLpuLvAf;(;Wh7a)Tc-HD<8|USn?>1^7iOWD)1nC5Pz_Z^A=eB>Sw$S=#2Z~tX8XTldJfGffQm?|%o zNTz3RRK)^{A7(44lA(+4ehy`-DcFY9mRMeRldZ@5FN*r01=Zy{Dd0O6c>;&3Jsd!4 zGvrZyb+bVKu|wn8j&#|ADtwU%fU0%b)N70g817^vQ=7K-)AqG2(~)AgCH6d@MpG;<0@IMLqpiDWH^8slvt1RnsEQe#Jf zpABSAt$+F3JO^Z#CvkkC$w1y_ZhyQY)PI}z+ZsT6-n|P8BT%%;rv=?F7kcM!>#iW6c1(ljtuGhNJr?;x|Asi{P_~ z#r{!?jn~a!uBl>&lXZ0@h_Vv!UJ$VG30v@tGkyBVytadhbAHDve!Z9cmtajF;jCK_ z?#ds#JXXLh%oyXp@Or4y)~t?upNEqBE^^wi@+)Nsie6ZW!CQFaMe`Kh8*25UpCH%njxiSZyJd)1o@(ZscX*;SLZ(aK)9Rz;wZabaQaZq$v;_|IJ9=c{FD7Wujh1k z?I3XD6$VCL=93#Y5I2nY9CrfY-IQTs%JuV8b|{8;mHEN zEX8ZOAhJoY|8YomND8Kh^ByQ{tY_id=?KBN*Z}|E?0Y|cCp3adk0CR+mZNS@Mzo#v ztTd*fkSBb$6;V_4Nc2bX`c?l8^YPW78ZKk9Us&$c@d#U9)^>GCk-`N^$Ow#EnzkrR zT_}+tgq4THBx2J#{Gs+rj4=36$Zi0RkyAF8p>N{f1BL#EeTMso3@{1(y-K<=4lvor zx4R6mmPw#AYTd5i$~Kjro;u-*29w5quczOa|A^~Wp^yD3NW1pAY&MyvTQzf0QK=Ic zF491oBJKVt<0e+l(?LO692w~2XAx=?Ev|rOgG-UGAt{^8Btm;eM~$EFein*;iuK6i zd-cQ{0g@#+%h1bFRkTC339Lzum|x$88<~fO*MvZc(*#yhkEE!HCDYkX(P{*I!6=^# zQZ2(V6o4Z(fzwjrGjdijpdpz?@ZL$($T(x_bNp3v)qx9{^f^U z0b6s;Qbe?YvUolqcAkzP3z3zpurVmc^^LIq4x5NygCQEBswQl^XzcL=!s_q2sw2IC zRk4mK<^al%>b#75TeSPo_#=_^Pn%9G`FA{yhI|~(&Vm?bd2+$)-a`%&oafuLW&Ew3 z^Rlrr-aC#%Yo;YA1|XH+XY?U4m^@aMu8jQ3svcTLjYL7Nu@$E-@lLAvo1E`H!#>pttU1B00j06L84n|+885t0$tO9`w9%& zRBy%B-6hMXkTSDV7wK5Q!&Ku?=5eyPJ2Thw^!|lR75=Ue*tWZt(Qmthji(!+h_4x- z2jy>M9ag@~?307;5jU3}p$u_cw$1{X)RyR0<-OPyBPf8J#v)h9&#*vJ8W^GM%5^XA{r z`)DqI1v4ve(E&siSYPNv`GbHQ=@h%U^v=G;i%bVq+6idrw!CtY0RI*kc!4VOZ+kxd ze6o__dHKPd5Me=plr#NFySqmQdy2L8mi@=&;1%oo_=dSXKS1~MK}|X=MblZZULx{V zC6OTSecHhIdnuumm4O%2A_G0;y4I;S8MA~T37|>v%$l-Us5m1Vj_s>^-tCWz)eJv;6h{dQ?VA`@+i@T!|Fe+bq=$ms&iN36DLbaK{vf9?{OI>(MCV#)5`YgRq z_ZLLVKTM#UOd-}!V#pl4=M5!?gTGz<*kMYkfQ9-^tI|d+ZK(>NL@_+ z4(wRs9hitG_Is$1O&B0A@jCN4g_vdLRqI0T;W)0t>hccs`G9X3sao2@s{JIcXfxD9 zNHA<}apHXqU`xt%$+@W`GWZIvR8=9&%Y+1YEcB1=!N?T1uJiQBfF^j(L*#j00ZihH8!`A1D2!iWG^LFM3K8J{<55c^jxfw|Dpy878qjthC(A@@OvtU=-|y1+nBBpeW+EnPmj zz(|%OQi$@V((|2FDH>gn%YeCg}F##D1`K@+%7-GSC>7O1b*Ox05F& z4WqusCOy>hbop);@GLvfG%}=I3|YX}74dRCe#QI50=7LUL2fYr+GF-`qV?fK!;9B* z1AaGg-$zrkj|2DKFN8$U&5o%BSVm&$;8|(nT#P4=T1mtVbFN+vB=-HL1>v@10BQ`a zpD(ux&CxIDvIEFMOac^N%_iJkglo1KeS#A9LIyaEy`g>h4oUb_*`9{NzcDi@fV_v3KG=;kq&R>Wh_FJRC zi`$T`1X9^o=r!n|>*69Tlh*!8KU)D@lY!ZKx{7l+NG!j{)%_ldnt8LfQq|uz`Wh0Su)F`>?OlFdV95vr(@$I3L|{njIVWR^R- zvp=&0LQkJAs4cke-@hRcWnom8t(W?Eyf38WFQnT+b^cTRJsu$zg7!;q-3^^}UN$s8 zr#1UR+AgwZn*D)iOFw`S9%Erqnkv7D<(ta-4vzBu-uTYk*}se7?*#vdi&=hofKy!j zQTmPFUL2XcN7`J9i130PSGgeg6tpPq$zcT`Ers$Ee_%eFbA>DLw(r-~as zB(jrbN+yP_lbdmiM&|;xm(IeQl|+PcD4x`Bl6(8E4o1qD0K}Uu9tg9KcswWnDHR;L z$QpG`23I~*G9iU!mo+?;yO2dbZEgEuelFuZmP7#}8;c38roR4h|7>XBN7U@;CxCxz ziu#7Iu>16&$6JLzG;U=$ixz8sB7fyfu~%r;F$;jhH*&HRz}CjjF4a_eE05R@T-b8h z%vj#*tH%!RH!<~;c%t~0@X|G8pa67Eke|x0Y^N^uGrDw*!4Bf5PIU)78)29JikhUpN;eK#ZpaF&>>L!GJweYRhjkjJ-HAqphDLUvnn2 z;m14eyoL{24*x*EaesY#ja%|6_iV@VpyF?(jzOS6#$^>aqPUGojZjUo2A|_3uGcMz z*o@?a`zQ_+fy!GB1lU?3Q~GPqObE3wk@0A51%|A zM$kE(<0FwxI+!L7^!&Tc3H`DxVvXvL3GDLzl&0{*=u~|kwNH&17p!q;&=G7yfQM5l zbq-8WIXCnSw1wUQb4sEYFK#NxD`6e8$82xM3q9?B2c{R79xBe|q!7wx~R>pD34qQY-)aMB*ycR}{}neYd5=BfU85rNaKJ#2+5_<7

IvdThg`< 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 SquK@jT~yIl&O2{;|Nj89@GQpw literal 0 HcmV?d00001 diff --git a/pages/logos/baidu.png b/pages/logos/baidu.png new file mode 100644 index 0000000000000000000000000000000000000000..21b48e448591d3ff6ee1f06e6541632444a6a773 GIT binary patch literal 21885 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

`oU$As@? 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 literal 0 HcmV?d00001 diff --git a/pages/logos/duckduckgo.png b/pages/logos/duckduckgo.png new file mode 100644 index 0000000000000000000000000000000000000000..57ebbf868e59aa3904c6c81a4d36469a18cc243d GIT binary patch literal 6693 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 tu6}$0XAm^Af^hW>XsPL`mZ%^D{s+I^n9u+K literal 0 HcmV?d00001 diff --git a/pages/logos/ecosia.png b/pages/logos/ecosia.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3edf9e8701e05762fb2094a2a7fb4c1039165f GIT binary patch literal 87436 zcmX_n1yq#n^Y*fI*V4TpodQbA0!t{lgn)F1q;!|S(jZDVN-Us&A|cAsAt90qC|%Me zAn`rR`}=>#{bT}!IgVz(*U9^q zK?5@Xj>0|{PLG?u$nbtJ?fdrV(}VTaFa<11N=jS^uATq&c|2?dl-HNzl)zQV5ictF zgoG21yL9p!0is)Af?f96G)kXiI2LV7lnbB46?ySg3R%67I!cH_P2 zDTW0}asQ{hxUXi@?k=;`5Ndaz-0B4=qa+*03LHVt4Oi^Mb)vz^>wcMRNkfD@c3rbe z{-3m!d8aE5y)E6(lK5mE7H3R$A5bvkvnOooBA*G=8SdNX6u0&+i9OIZX)R4311y|~ z4TTat{d73WW~Kknj$E!UvHt)iW$~psAwqzb0?U`e{AhBLkTv^hEKQ~x6^wzDlCoZk z9a@_9UiQBDB+)X?IGRvb6MM)Oi($wP8MFe5&?#x9wF$9lPEOU|Gx?HOPeGY}|MrnE zqwv`uV&!)nw*236Wp~>l+e!)1E;NC^bze05;}H zn6_TTFa2JmP`MD1{>mkxc9W9`x zY$8frN^%HWRpedbm6M66S5N7I&o011&{&b?{Ik(3!ZI%!mSPD=;-jX<9`k_}HE@uw)l@C@{_%)Ze3vM1rw_ zs4s=li>zbJ+@hl==4~Lx1e4L{C>8xk9+d@0%>CL8aofHU@fV|lLT@nAuJF*@A3`D% zlH`bErI}#d5s{iP$c^A!+yDfPK$6qZ8v`{HSxye6CXeSbDTomEbF(m{DzE5`Ib0wWv~L4aBPl3PSTJfo`1vaQ8dU9EP!aVND<2J<1@6Uzu{E0P z+a1ooAx(-#R{CSyei9|atm?MjTEyqc0HFgT9r%Gv_7!_U2$WhqZjtZh;e`*VyY&F0 zuDouZ?9>=$9T}vU5o*Ja9-Vay%%)$CADewiIABY`w@9R3>md4)ErQvPaR(JkeiR$YteifU-@$g{!4Hmm|NKC z0rxRC?;5C1958X6BRGJ%l>Cj#$C?F00yty@&=@gu;j#-xd`3hL02(04${s^f6Z;Nf zTk>E1#mJyU_W>jGUaE$l|LDsrZ=rx@fsr;)AW>)%lNlGdi`OP|%Ns9RfHU(rf^Ehq4xaD8d_@;YER{!+5bn@(}#`p28oJ zm|r-rhyf>3;^ydJ&E?TfUP9It*-NcD0KY_aZp9G0@nJKr5vEn6?YNcT@D9z$N3a{a z`0wGbWd?r&e!;zq(eN84Gx`#}rFvz`(QgG<6Jm3kuw*G*y{f~xYhlp`$VP#YEn>n` z&7omjB8(4pA54!4THbD7#eKo_@R~*g}jUes?E8|q+5`V4HhUm9;l}*kxQYl zuq=xYhorHJ@GqEyLQp}7(|S=){9?KTdf=D|;)K5{y4jD7^?F5-{d7`JJkX-b7WpHH z;fnGqxLgtVgvbMmV)n+m61DmFwTHkb*f62lUfCipplp7@^nbQNUOvJK)CTl^f^e2zW-tAMDLA2e zEgNl+Pd$F0_`}H9qv9#flkfp7stuE6|4tM`jK)GV8?G$eC@fgPcxC4m!swnU?0Q5 zBT6G-&;3M*X!k<(E4!y2y-nA!KshqsV#v1grC0_^#Ms9_pcZNv6*b3&A44%L8I+8A z!eb+$L270s;w~}=w@i)fG z3B}is4g9l9eW8_-R@)m}-KXh)Yh7(Luj>VFF0phuC;5AIW0LgP4K=-a;i_0NfI=Z& z#JH59*6);VvRNk&jl61}iIYKXZhhG3G_`57K?Mu%mf-D{gw>PAx<=>D;>@feT;Jzq z&hu#)N!%@5cq1*Hx#h*eM_Xb4lBl=Rilo>UWSgYaM?f+9l2`CI6Pi16t(-3NOTWZz z2XJESwp$ZlZcPhIACTaEzOCQEU1@;Kowc&c1I=!8efw$3Wl@W++!1o*dF&(wy_*KJawfteY!nNuh)r4q2f_r>* zW4f--5`CBVqt^XJ8Mor+TXL#smAP|J87g9gX#*6@*zB1A>_xx|kC1nY`X1dX9cO^S zpsX4bwM2qT5!q4dvJoe`A^hKxT{gJ$IG8f_gx#zpRvO<6#C6Tgw^%>#vDMZ~lr}L) zjT)?{&;$`15rq|?nt$)S{3Pv9j6uSs?$J=q1Vu!9@bt(Ov31F z6zw0)cTu|LN+=Q~B@+DyKd_{!iLoi@t9!fp<~^jwUTH8wK7(Dxuvp*lL<*LIy{=un zAZ>5_6z2X&$n1diJv+w1)~~lR^SL-X&t(nG@X?*{{!uximx)%S?0bO|N7r?o4O(E{ zvJ&0bDVtOCEMCh(qA77(eEiQ)A!3xAeGU+`BiTjNVuM9d(CDE#Ni?Rri#fAuEEhlE zul$8;MM2G>P!+ww7*pRH@r5US4ZkX-!LL_o(Y44{HN>&v3Wxd`3N6RV&x5UQa~ERu z)6gznwxP=EwXGq~@~wCr<=hH?GH4C_w(#w@aga0%>~2O0=!dd@WxpE(?j3<_Tuk#q6w|pdQbTgGAj~Ul&$v>JbqDfJ zc_p-dNr)B~er0QP9aAQ_^?(Ld0b6keab^>p|1c$*dx#*cB86OS{S2BFgHDT4l4inh13e-jz}KkIg>BQHH}rP|deN~B#{>L9M4-O1<>KJS^JBZ+| zbJk9I{==E6NpQca_f&U z?t(s|tvvSpiCW&jtNOp~b3Mk$D5FUs>4#KfzOj}0Z_v^UZlo*bJD^>clm?N4ZC<~- zWSA_p;wX8Zqi?v11yXQeoWL&t{nFncjy25mR#Gng_EErN%}zOqxVu}EKpSi&N^{t` zsTxxmX#NDT8UCMp4x@Jhr3urQE~EM1Vp~~5C%jwnq3=LXXswrCb*Q|-&mlydReknd zV;^_P$M44_l2?leC|9})`H65n=|8#6K*YCla7vz=cpG?$M3iVo2YrWt8njD9DqT!e z5u1!7hA{YV0}K+{Nh%Uf%h5Fh{rV2OS_i=o$B7R2QaOSp8X2$qdowt;WV&2fc(zjz!$ly%!@9wG z8Ckx35y2S9CSzk#e5R|CXf0W^{45?Qo?j49Gtfc+w^Hc05~vF4zqmQcosu{+08axK z=LB)(Ca%^h)T;~{v12^OmeUP+UE0H%c=F?xYT$ye2z@#fVYaV)T3)#V^Ss;lYC`rR zhog703RhrS^wt6sd8yy?nKg!;riXQ}up@wy5GP2??vaqKQ*Hd{JKejPK6PaOH0n^i z4;jx4TT}LgP?xYiQ~Xd|Htb86b$thu5#;OsrI@HOupSjHP$l{h5V=Mzh^1NwCK=IE zAlT1un#8lSz;_ekb;(`z$D6rr2NIeXZZFvdRyCdQhdVrymro$=_!J%R4JN-t8;0W4 z*EFv(fpS7*x8+Ii%TiQOW3yJdB?rS3r`Z~Li#-`WQ^x7e^8YW$#wW*^mYi{te$KX` zj4vgK2uFkAitmYo4{QKnoW$>*4ZtTic_V8R(1s=`T{9-ESswNV8K@Pc_#;pA){cwS z)g+92kV#oA;~e!FZ!jOYVuKYU6x)^!RYoP7OXg%;F zMUE0~h2TQeH7N`_PQZj;5}>CQ%5Lkt83bUp34b6ECRvIKIlozgrN|>ze4BZYHA&B9iEaN4`cb%?i7YMRY#j28P#SitiuET6o^^?TAZRJ`OPe7LDj zc_iP-Xid{_X0;iNN?=6CO-9XaQ^Sw>KxH|q{YM~UXQdmtnz~~a%+s<=EYhdl+S4(p zAn^$5Y<1&mnvPXx+&k~Yi7=95X<=23d~HLptAMsOxn8q8-@1!+o%+{^iV_!XV*7s` zB39kq^nK=p_=W3o^?#)UDK`JrD~KmQT|t)3eb-cePqJ}>O|bzon!x^fKJt_{4}0n( zb|{gc_fOd<3jp%&;B0H>oX2S;=7B!q+L`z4eDD8QG}La1}T z|Ik<|dTOIT-q){nP5Fct1js$Jsk^bm5c4M727+<-C2C4c{HJSHur!uU|1-t?4~t@Z z8s>T*GrcG%aoK#Ol3Gu7#I?HG82Bs1)9Ykc`A(64*7HAP1Mf|@G*};&!4u8G$_C!6 z&BT5Kss5GWXY`N;@H0{R=Xr%}y#mv`CC+N|GiM6G<%V4}z5 zo6>7Gv$+S}QJZ2398w9+&xz(s&_(kIA@UTTnk_q43{S=o{%1&$HE%WOZ8ya|RL{2- z=R}R)j1Q21Q-MM+27%y{s))3#9CQQ4il(Qn zfh81b>y9ljeHL)Lw;CVy9jluLUlujHC{-Tgo-s$=aYpDDSy{t?_D}y$Hp9+l+Ed&Y z_*T5sgwFO`A1u?oJPyKct9NA|CU;bGj4F9ajNd-67>BDgGeau5{+jMpXg4n=e0@y~ z-PgdB=duyT@1&9SdpFnziXM&K+=b9t|<_;uQC8NX1(g!6O1^&<8&+;M`f zve_WXlfRoPZv+Btc2!<-nLTyhoZsDSL^b`iGbAZ3@A|*l_PhL0*mv5`rz2 zsiUwbLQ}iI+C} zhh0{Nr0F+WiLOD$%++&1enW;>>$p3ZRdBRZ^%MYSDMj)f|RJE z_jF1pVIaS9N}to}VgmD11;;tlxeh6yDP`MoA7yY2%5Op~H~_p3mt7@qf?iq0ua1@% zm^+e-!d38l4( zs!r_Dn#CA=h$4d1pFWI((Zis2`Kt|-R|B0C7y z<=KH;vRERc@Q0Q+0c4z``t1xxdMRV;HP8oK9AwnKoj&U5E*)}kp27|Yv68 z51$#le7Xzk`zkaPg-P8JTeFU&&w~o%1~)Z1c|V}~<#+qbqizQWfP0i4?)+b~^cI^( zm&A`r5SpV*{CL+6f-wEw%LoNZxzNMBa03%pM0v7yD97Ptk!4M+5wTb%P;{ujF*VvLPCCov4s0QOcmZaLCGcEU2Kxho1)_4wZ!!k2kw-w-QeK72?q$nQxC9ZEG(WdJ zvFdq99S=keY?%w$@oZ&`PEgc+0S<6Y@VJk%B1aO+D`C7T4vdQN8QgkKq`w)kViHho zHGJTgVEPUT@Z%PaXSOaKgVR990ScympU+cYwM$>{xqJi;HnRk{FxJcVsB zHt#QDD?k5X1UumX-7BX|i_5X8Jos~5x;i-o*rD>T%VC4|GoOm;Et;Ify1l998kHbz0-v-vHbY9RABFBTG_05+C$hEV)=3_uso= zn-R?~pFTvI=ziO7Op1sa*qs|PP+q|W>F21zoQ*ozzBkQgJ@TrL11=xsx%MgmC{ER{ zlt5t!?4GNyhPb>G_!EPD_~fKp!gZuS5qd) zdPIqVqY;0do){c8E*Y;nKp?t~;G_s}GB65qQI)v?cZdL{anhZ%w1>PB1}YsKt|;?m zX%fHVeJ%T)-OBP7%tR;$V^5jq$tldiN@~-~5oSXY;3WzKiE>!Zmw=uJx4K>4j#465 zDKWec_$R88*KrDyUH}D`Y9c6gi)S+O7^d$ufYA(^U3-jhUu%H*<0}J3#zaC}+3vN@ zI{ncL{tGMPks+lYe~NCelbV~g#W_;|RUZUoFRu9cb7%y0PHYi5QG$`#)dpw_I+I5s^WF$QpBYxBL*=zGu~jOjYwQ>VUNH3 zI^#eM;;_H*f1W0)`@R^%8Pd+A1gOfcehAMk zeg<1~e#WG#pYJTa?>Y56dJYATEIC};h6lgCR-qvV{OuB*owJE+?{Sw1Xy2?${Kkfs zHM;_6fPvEDeN&Qj4L#z=Z>=HlYww-}-*^@m7XB!^>PcqW$hX#yyX3((Bq!M~Ts!Hl zI;k9URg*M?5W0l*qwWWwpRdtaSh=8W+;0Sm@|qJ^P7%3{+^@%c{3mHG$Kfh>>RQ*S|buY!gu`zySm0_}=74QEROwEzXwKd~r^lARW!>M_TFi(;t~<1`C{LuO3% zgV?-LoRY??1H&M|TT^RUy)6d6H#|~RoCvKp68SKx%FPyx&N)2-aitUZ!Mg%yIeZ~oPUr~r@(Q7YYtFsK?EKB#QpGf@i5gX#c0{@5kT4=D2x%2KWQK^WU@s{Y+b`48YZQw+p&`7hs z>AaZQ&K_g-*tZ8#4U;rqBQ|uOKxV99Q=nE=Qj_J~x#l-#ONlLvq%qS6)M;C7Lrl1O z1i+X8=UX}A+&5@!@E<(@x{4PBNuRwJiP_*>2=%%?BMJOr12=o%<8{F5pty)CwNdRB zmS5wM6dG7(_T(v?0JIyQ%Mq>oBL8FQu>f}I7fD;NGmCsz1cYHz)mw2C=M*j>=vii7gPnolq(4-bq-h%2 zsvyKA_vgwLVLU~ks7O7EZo@Q9o!`;xY_x_hirT$PFH#xsVp>tC{7V17EDGM1>kB5s zBh74*zIPlZ8Y^bBR;}Z}k3JJUW-5OhY5eOw5B&4r4IMSVyR<|(wq6!%jo@=}sZ>Ky z!NNm}CyRqnZp?eo8qwQ{SfNy)ci5-3O|G;BSt0(;*Z}M@FqIX*IJqbqdAdz6;pj14 z?Ce`RfSu3nQU9iRyb8@283KAmKKFLyZ=%S9l%|&m-RgnSd{n|Zh@nRU{CtZA2*5-J z9H5G1;vJu;MFaR;V8{QFml)4hY1%=ib`$sGq4>)W#t}e* zU#A#xzkA|7r{KpXwvk-Vw0hmTAM4qazkgVV8$_CDa$1oIH#tHwA)2pNMj34=QI5}En)u+QKS zk4|(RzAGhLTga~&;a(-hXQlj;=O!(s&BXcivM}w_fLSmQTrhqhxP+su7&NepzJyK( zb-xgATR3MKii$D}+-Xw;%bRNDlt9-*zIYri=rC54pd^zQDMGz!_CP~_v6e{@ZJW>B z%)0E^`Mw#hI_l6(R$y@fHAz1PAdj05fsPNT9>3Yh=)%qy(cjVjdvkq_U$2jnf)iV| z>2M1YS_3oW%gxxoiDPLR(fnB}Ck!YHk~#I|7Gp1E`$&$?1Gj;yO-?6p)!3}KAV`$A zV+D4hBZpMH^I5wb#U#^s!lRo`UZ5vB-&Bq?Vmvd(kFb1AmnqlF%WG_4xC(DHtyu^4 z$J*dUa9Cc=jzo7IeBXUPHuK=QBIQX4{W{iuRpmLj*j{H?CWutL1lBN?ZkxL2d0hmW z79+jM!jCY^vS>cUx>cfy2fHQby~>I+08bY)x=M=;Z zpRwnXvhU{I{Mt(B`TA+Jv-c{4o)&TQLpY7jaELC~HGR+19ft@a*M3gxU@d1P z5%&CmT9QP{u?c0~eLDfWe*DR4&8ytH1|*u~eCBV!S33Qg=H&yRPV`^}Hc9jY>{#S9 zs9TiOlKIz3$=U{ziCZ?I08n|jw>KY>H~Xv}wE~i2KwFP8&%5*pd>ZN8lJ66122ne2 zcJ4Qut0&g>eA~byNtj7|j-;ix@%tyHN%KL9T6aD(0X600>cJZGxd5BN-D(5pn1*s$ zy8g%4LOBmtVor|mncJ>hj(h=LzG%dX9MKTr6}nCMZKbzU;$tCDyk^&*IsP*(RmF!K zWyP?D&|vK-p3Zw3D(l#146XGmkE;b}M_oT5tMA~X@jk^b=W^?Q8Ck?BR8AY~)P9qE zacWmH?=3jBD^2UZY9JM<4_%O~r2S-WZr?+v^VETBMdNmpB`M`B5BAQ6F>KX9{a)5F zH!c3e-YtRAKfCZ<=1UzNiVlF%UwU|X+3|vC#Gw=g0jF8sv_q=oZ>3OAH98vH=*oH+ z`q;5yuisEtRD6zej-KvxXbw5NPu{w;fB5!&-6k6D9)bRjyC7*OblTkd$OM`u0>BE9 z=UbNOmWIo!c~LL-trsu+88EdVtR6Fy@A~EsdVQDFV|-N5#*SRbxFrLChJWF{^fZm8 z;SNgciB|U@gz}+DEJB@EDnfB;{rMhXhZ4%&#V zaK`sfa~KQ7N{6fUSnPL5qA%Z+1}V0x`9xL?o02BF`5+``I$LMWf~yv_c0_EY`|C#ozv_BUQ}FiB&6 z;gb(G;_rdNG$G*Iv`*reH)06(9G38CXTS~DPRa)TO^Bmh%2e<9owF`sc5k$2vwr#4$#hv4OAjeE^A_%54WZnL z&*@4k1Ad@#87I%wj~|UB{B)wE?N#+bLq)Fzg{p6u#gGwH(5 z1nrzvqc&IbICrczCAa25lla{EakoxeUDR}K%u)3LkRm--; zI%<@bm$g2-cUi|wsw%}xHykswIB}W|Ee(<%-~YY;+d$sU7~w300aX)1Crt$`%OByN zV?{EJIQM=yW@q<2bndSxi`tPUEL8tvuPZna_C>-6Fn54^pJ29&=myA|lKe2`6TTmt z*7F&bQTKL=yi=WpUP23Znl>94o0l(x2*gq@=PRy$d)3JB7lu-eu|9#{mHvDQ}j_WavBk&&T*JK0(rcBOn!N&FG2W=HHPjuy_mYXb*+j)F5+&!63_F>7#k4mV=w(Y}TXLNSEPgzo z`3!5%ei|L38S$`u@=y=3dM2hlk`ct^vWIm=TmD+s{6%~bnrN*cU0eAf-#YES+g!Ho zZ#{X1iZ+K|;l(pt-w;iA!P2M0Epv(|dVQYj1Jfv(wJy#yh~D zySBa;96fdq2pBok%3nyi5G*S`rU^La0r>&7s;xeJ#nt}-(3IxSXB#trE16t#5W@4k zld+Fd%PZSaU}|j+ATMM0`0?TBMTx1)+PVpK?X1eN3COWiqp4y?PKtTd9mp~~IF)4n zklca;tOGMfnb?Il^Xr~v&&vs5ZzV{)ui9QQ6*jM&Yqixpzj(|FY}t6A3c1iO<%{@H zM=ml;Y=~b!wJrCk;FiGpN-F{<+=j}cO!u?+=Sm+j%&X1B|JotW8wnaf0auz|P?9XE z9tHRneIxtWGc61^9r1icXD8CzP7Lu&JMWuwmCl?fBuB$trpC;e3NKz?e|&E{H&t0t z+;7Ji=H(w`Jy4Jo32TBp@^dfb!yhH>?^A1_0wbMgE6 zzFd4t-cbg&4K&6!<5yG(JRefxd(OYax28-Tz45Ey0av@|bn%dmOWmlPnY0W3tF)!Z zJ~{Um2BtgWs6Sz_umOq7G=<}}q)xrCmj0!PPIJSsQy)YqE)2*Y36EpU@&TM+uc~>j z0NP<0Z)`69I7cE&c+A&}xegd(vL;iy@gfk;dK80z3~=jwW~>TG>VFkB4qeF zB`&{}h*{ums9dLk{c!p><&fH}!+@E$VVtM*60Db3bkfXED@y9oR<`o{n75r!WLILjH33IB#F}kv*5q&G!Z9q!;%45P*c?)L zU(HyLx;i#YFkv<>9pk)lBgAuJb>v@I7(b)21vb=x<&yh<9?{4RakcHM>OsnBUag1| zZY2*(dh6VSUlXXHg-lP+uO9}4sogU;_fmvg(o;3!XC;}&1_UeoO6T$Hcv;bd*VnvK z;U{XpRh7Wx0Ees1X7Pz8I-jM0|JTLl9Hoy%qF-!?a}yK4KL0i|D?#KzOSEas7uJ{3<)%+%sBZ`-zvjg5*%&Rn zNa}o1L5~X<_E}@oXuef$FFpuQG&yWFvR@LQlG*Gb6Vx=m#N1W6WQJyt%DzPao&tBU zNaGLX*z^l1*}_(QDztZMcb?p+apC=E{d|wf!e2q(81jy>6`ly83zi=gTt4sO;BKP8 zvK(FaE#h~#V|*~qhh_jq7Hp!JBvkVTv!0dncv%@_o2}Zur8jxbpz`J`1FrA%T5Ag@ z3AuY*|K$F1LxP&#@4_UtCbI->;rD8A%LWEv!Te)UJhh#Zt=~V!?ox^D%Fz9j$p|`p zT9jSB`rXk%XKqkP#qt&YWMB?1c)*_V!FwYWok3pS`CeXt2uiE+(MVE9DTCFG2qpKSBUxjD6m+yZ5NGD^EnZS|FAw1^FdY@(@>(W#w}Z`4jW{ z0QrxgUy zH;nMD=+`SmEDiv4&Us#Q{XLr?bv-EZ7a_aww;~U3BQUFQJ7n0La4rCT+(>!w$?N=# zhuz|dgj3g-fdH@RmW^ZhX`}B+iKWc`@p8n^>hWd$uWD1DkwEJeDrg%?@&`{BdeXLBHfLNJ_@I&|BXK z$|__TQT`V04uf7~iV@0s4m8_eT{if9ML9S?&`v}zm2TTwZ~Oz5=BT!Rez--7?MPy7))4Rf&6+s+r!+N9 zFBR_ydHMSM#H)S*QshRRLn?pA7`DP*Qy-9|mtM^~E{=bGu=&{N{tr&=RX5_}6DjHY zf1m_~Hh~M&tT97Fyk_Tj%Lqu@3^|@l0EvlYOfM7f>K}t`ZsE8w{gX%`cHJzIL_mmsRo*jDUBgsUjeoa;UzCVc$XG-m}ym!gWbgFea{S~eF__gg}Nce%#`3Q(-`hSf-cAu(ZDIE2;La!1+gfrrZp)w5sXmHO9Vyju&J>8S= zBk8RMSc}ulbgTo$ZCakN(4i}2gAc2yN|-`enW zC)S(eNl^d`GqbDmql{Ep0V}Or;$qPW&w%l9ej#RyV!ZgB>)V3xl#&Za&~ntdZ^%av zqDTBdU)J_53E3**-JK}qzF(onn!!ATjw4m*%`ErQB~4m<151})Qqg3&{Bi%m_DOr) zhVOFRgCk3K^NYbO%kEcLNIOQ0N#W9pa?HvP1fZJKFyA+7@}E(FSW%5{(0vkuR@}D7 z2nx`)Q+C$&vjHlk1>^R+)%jNaeTS1xUDm_+$~ZvNwWKiCGHSn&z2BOWb?4}S5Z!R7 z%TGP*t-x6lx)G++ttO3Vj|qI;z|Oj6cNWG{Bln*C$)|>b^6? z;CGs2j41+hFk5gZf)R;8vUd_C@ebNrY5-mWTqGs4=ADuwLR?m1j4y`hW+mo-oikwcm2DJ@uDx&W{nGhaoQdt(1i9^4M0A%6oBEeDiwCoBI`UM$kC$r^QZW zvw60hCp9;BW)}d>oc~4+QqxwieiY+NJ)+tYH7dvp<%6@~8WkUHaWEw$jwe1U#Kc!+ zk)g1RNRPwJ6qp{kXf;0!1+US{9j$Fk{yRV;w*Ju(e{Qu4k}J5> zk^Oup`>rRaYM&8wkde7Mx3SfxuF01D)R(mTdW36xlm7WdirojP{An9IYDQrf#Fs?+#9>Vh54@fl3v0p6@h!0K4(G) zvpcP!?Gm62QLttVErSsoj12NVIVT(^uxxA;FEf>JuZO)Ok5PcZ>13NGFz2P zO%lrak#SQ@GW0X5n8$*y`ZC1qP+zuLva?05zs*ABddQpm9e=9s)!0Jm_h`(0IO&TN zQ23*RYEFN6Y*I}hK-61UhM=H-v z)4lofYC;Bb`0t?V?VEf#u@Hbw`%N_YMzb^6z!$R$8-fY6izkdL_9KS{o+7p3vAVEq+V4ZSvson!NqNwpyc9m;tCBGG2JMsq& zKcA=w47Q!g#Lo$j81%?_e*Y^rK$aUEI%1>>GG$zGNHI#k0WTzHh1!DeihTB5eV+uC zbF0n$XDhja08uO1#69kaJKwG#>r3$3%S`Ba3wX2-!Lhi2H8x0|fFC`q^q#ISG1MWAXVL?fnlY z+OY6wik3mE@M%!ZOnN*3p53hu0Zy7}WZ;avoMf(Fw6&^A0PE>r&7SbT%yDG?2FP8y zT6#zec{KE|HEaco1nHz&dX*@EujKqTkuxd3scWJrRVVy{boa#iUbc@^Qf`W`4mkU( zM4O+@lRbod7=|1h2O6092jejlEA}+l&1ufZlA516F^owxfkNKXbv6&NlQCTrF-5~V zhf#yJ$Dw#x8Jr@dM36qRC#mnne-RW>cZ97S&(u5Y8MImYLjjztc+P0!x&Y~1~{tQ@jpKr zU~GkzuGPJqm}HyPuu;M z)(I-8>-lj-3t1?AmG4l}J=qmQn6^Em1!Espct5Y;IZFm$A2mVJhH`>^u?XJsv5Kw{ zYUh|YS%l4G-cnTnHQ~;@GY=dnSwF6? za>3CpMCf|WE&)x-{EWxChcab=FmVT~ZFn~-NX>;cHG5~o@O#WYGH<6EFlch+y(YA> z(hYxtiX6jhdMdU3lfI{@-toJ7RMTV?s6_6YI2aQl6`GtK?j z-U(Y{Gn&|*$DH!zjAHjPaV#c^zr_G_gRnhh(HirWa%3A1TD^R+;P1`Kfa`OWd10b+WRqcY-UW3 zs-Td--S`kSku9^5^dtpv8A%sD5H)9gYXaZqUM;-pYeM30)=Sbev=f&t@uxGI;#b$n z{*`{!CkZ`lC5&cUyJB4wz3v}n=H%bQQg>jqkVb?`O1f+XE_r5a0$;HXeJ{~J{N;(t z%>dWM2W1Z*zkw>wJ=1}7&+Hikg>~LUXF1%SmsUZ)SR1YUpW=O#OjcDnasoixS}#|T zblASk5dAfyj$o+kQRG2@!>r2HX#h6oU+WMXT-Dy4PM}WKF$l*p)BEL?TS$v7ZyF{+ zk0*t51M{8fJ+J{Nccl|KD^8?Alnrzo7kcwMCK++$uB8(NO9vCj2=89_8T zRg7zGjz2MuKQ=+ayLDN4%9&?Ya`)KiQwO6to9}|p^9|>u!p{VeL(lC?8MJ9w2FUhm4bwMNB&8o&fSU(*% z4*3#J1(+t*RJxq~Mjh$YJ2y6J?L^{1cT#~NvWD?{|8Drl!go5vqNkQOBAF;1mudDD z9m+V?>}~anOuq6eF}-6x-Ga3f(b~EI-R@-AHMg++v#`Eo}kX*jhVapPGv0 zdswubt;m!{HIH71nzqwVPHmbR`dslw__}GlT)z9?LnVVJV}s$q$`vW~LU^{S0<|4X zK9xUhVDkHA3q$|A|2jm$j19?{tyljoL6p2}3%a(axRM3?RDH+v6yu?4wnx_oK>PeG z8Ud4XSil=%KBrn2Cje=uvfTXrksMcWIl=Fqq)~&ekDjvC>?EV_JVz_JPF%&KRvQSN zbzX`m>9V|30#@#>aTgwyFD8eq_9k_{`YTQdc*F5;>Gqh-#uKci9MyO8IRKG#-C$p^veE8Y0Gw+kno+Uzour6Y7{;IyCs4?A6;|S*4c4n5V);29&sb%ZD^QjVAu-V zGEyW@Pc?hiu9l@euyC347CU3g9*J6m+Gj|(iuQ`0YvFT4J2yIuD?iiIG*R=7ky0$4 z+tR1tXlOQC%8Olz{d&(5b^8t6_%>22{_zd}ykuVQC#bTdzrX6G2*`oex^{g^{EUr8 zy7AInAgLux|B9^>YCICA?D>t=jnjFw`TtnDs(>n*w|{6sy1P51yQL%*Nd-v}>F(}B zgGeK(fOL1aARr(y$c>x*(#?Qesze$g6DKA@iHk11SwVu7 z$~ZC+T|ANeU4*B>)4o?ClJ20wGg*63F8)Z4wK1qDqZ%a=s5&4W`xSbR8Nw>!3AtWt z(w=#YBJ?3u`uGmzNrZcZ^}k>EDVrNL^jA6SP8iy0QDqwjo0AZoa5`0L3q;#t#Q9Qf^3_h zW-m%nlvn5<6eF+-77{-lkm^k)fCfAHGU$J!zGPbCkFrTq{P=x%TtZLV2x4MNeqS>2 zVWI$75jSf1!JTNS8%@h$7>+P{f78NJ8`n2H;VpQgZcwsG#T8zG{QhfacF3gpU`zWT zY%QF|G+-t$VRVk&K1bJ0{^8r} z@WIn7{ukWBwdoD{p;n+LzH|5+L-nDH@wrQ=wvo8BUakic4`4SgT`_xF-HKqR_emxt zcqd*jRpx@iB`5(qX8v^X?j|Z>h{yRq<;rv(PWS{B_Bb$@>vP(?J z^Gwfs!Wup!U~wafgjk)G3Xu*t{fpMKg_nuXVKAKUKgK!3hEc#Rv|2d<6^YMB#4zl9sEsPY@JWHG2JI&R-tD%{1vgU&(60LSZaDYW>S(?pOCFIYx*!x({ zT^B0|?R&kHC&WU%VPM66LyjBPA)+bKQU777lbxdy`ku0zdu?g;K0gB;1_8+CAPbA& z(ht(MXgx~LH|qAAonYC)UwvD?>Z%x;!+Yl%Y3Cg-b+KP>&+i#Efa{fMtGn-BSmJ(PY0Q# z>q9h=J9ifL_-SwW0IjqwY)?911xDR>h_x*Q+`(y^Fw0;*eSD3;cCt|M`x=2Kk_IJP zTWMw;|4M(u+qmq%?syLm*MhTzij7RZlf_M6?sWm$*|4d(ka$l!=8mhU;TiJ{LDN%A zckyOZ(^N#OaB2hQN^puKZq{oV!%SoXvMbpa06+S9V|ex37q^X93j^V>qlh>Pk_ z=m$g5V<*h0g+cJ7dY|%cPNp-OQA)7mRzlh(02&zxF~rIZh$U#w&dqeRzC_ zey!Xq0OWs7TDK=^bgPhxtRs<6^q#7mc(R0_8tW_CT<sd5i_BmE_l znws4;r(dQaMTfv<-%(-ro{>I=;&kX>$yOE}LYqQ(L*rs~M3u9P`}FdfewH4J6P3;T zVE%V$ol}A)wI!jeWGtWf=S3{}F*=7V7-5CUe}y|tlgjG z&qiD9^E#ixvHxli&r*Dd2fB^>KE^aH$F@8>0HyYc5!^(E(>sI!dry9Uu|&GjAb-#8 zvc08ECi_^@?zf3NDKL!ys}Yr)G)>$5{#|u=nlI|tD`8q&cj~@;xYUv@$omp7%te^vGC*(qq75N>tIK0Qom0zO% z#c^QsJ$~eiQ0(q3TIo*Po-yK$F!O|i8o|w^Y1p?zIGYkA{K8qSaoUx!4F`r?I8nPT z&%+Hu9>^5&*uQmyULrd<)qaL|s%tP-y2n7UsQX_v{}FYSLDrSiiM1L<9WgrIsI=#A zy~T|1cyj+x^;?$k^Yu?1LOjki@Tp;DXD53v=1%joYZGbBX{>6dSu@giO)`GO`S>f| z%RjtPFzuwwa~vYWUdEe!Lh}eo_SH1HxK-T`6CS#Xzv3M(F0K@CQ&1(DqVnsWgC)q! zX0(k$+li*ll|x%@5VvfBmjGbRn5`sP)Z$C!l4OTdUqa~;eG2l9l4a3`lWMiVseG?2TDH)nDgF}VSMHpenPMl}<+DdZIy zy##%0>M1$0w9e4<+;u0?na7f+uNIcC{-b%Dj?3GegDDmaZTDybJ#|k^P#VcTzBMew zQk7~a1J&dpwqg99ro}>+e8=RsU>oMI&wPS4k#oLy{G_%%_tZst0lEtQ&~>h-_aR9P z7lY_Y<}Fi%_rj_n*{Bih8sVhmLiRta_5O_cEEs(220iGV&FRL~%ky!4@>ehLH4Q~d z7#UTNAaLfX(t+V^X8;EIe1szd!L>#xEA{+a{zjRp?rQ%8GN;QEF~Qht$bwoyz?cUX zEKyMjo4eq>6D**fDzX#xOi3+Y$%VX+LZIIj*z9{tP|k$Gc{H%*Fei)8@uPzlio+kZEk))NF3lH43h%Bb;Yb>plH(8knpL~v z2b`qs#>U>_3U`)MaJ{YHu<5_OM84*ipP!R_<9gY(I~m?V!dGb-pob48+|_gdhXeU-`=g?~6sZH7Gq&}f57E@q-|32u z${g%muU?=hZ5QpxII6;PdenmZgO)wZvLk>%FEYE$MKi-l|Hcv(Z=pfw9pAuCjW6x5 zwVT`OcZFC$1^0wT=q^oG>qT^pJFI7d33npFOMUl((r-vdQ2d0d3Y3~hF;c6n$YB6L~h`{1X; z!v8Q?02b$H?zQBhB~Pp{1at3j@RG7dWVP>Io`G?Q~AsY+6L zBdI^5mW=RWs66~&3~m-k%V7vkMd&-4P4H3AIS?nempsYR0(7l@;}+=wviyTb23^Hv!^|e8Ibo0kw4g~xQVdN7ZE`#Q zl%Tm1o~Qxf%q|assT$ju6Lwpv?%!q7-mnJxXNENt+Obk|Lbru?b@Bsi1GU&U=fi`zyluFGBBrE(_PLr=nK|Ot#U5V;&nd!#d+ognJkCQaY zDH@3J(1Jd9qW%SRd&w}>uHvJuC=a#Gg~rBu1mQG2*OwvbXLXy?i-2s8PaZ#WNY+st>kA z=#!tVe_>^^QsAI5!S8N5)_!Qd;O>uiAagRc7=g-F{CG(IAAT*+f^d96Jd4FbU#8*O z!tiS+3Qk$H8t?;}0EQ!lt=R;P|A^i^bGAIN=5s7Q2z2Kdl##El$5VE$Q#D=$lz>HF zh&RT@Bx4ftl|Qya0ezxVXMtyJ`@ake5q-+D=$*KFy{GH)%oBEk#Eo0zvQTw0YShit zGHI@dWSpqw?Hj8`T`VgX1@j0SM)$gy_nz{LCK-8dk^TU7-&jl|JZ`m~e+^K#n9tj& z2ZZuLbkF5e?Y?J=J3hae46vjO;s73QKM?6fLYg3qaMV%RK}JGk(TUadE@m~tDK5mm zxP^&DxrzV$qakMUh}I$7{0M8X(iq^HMmetUjKa#S4^&{U3*?P{|4IH;u8bVgKQ~}* zYJC_^K!KySiY-g1&q;sM1uqd}=&P_mToalMT@vVf#djSte>il3C+zKb@3Dk6WWqeL zFT8BF#6f7dSurco^C8*?Cn__q=N28>HdL;=XN?}K{8L>JK*E2F9{qJVDr=Z9!MS;XXrGo+Eo5n520OyEA4qqz0$lq+}I#V@&Mig=Wp6$?D7I>rb* z30An*V}O{QtvW2u4WP;qpj<9m_Q<^BOJePMsa`vWHIkWG%DpB+C-ZGl=QYYi4u7Qo z?7aHjcYvOKQmzu&u7=M5Bv>eP@oU%kf5J1y;I9I#e;t!$vXMS7GvZ#${;eP@wo=8K z+v;p|p>?O)TjL@@tY~;ncvYmuLLRJG)04PgCkp)_v`a7b%m*yw~`(}_xpro znGVA@itU;3(zD88WpmOXHujob#V78(ksaB;9rNXh(Igiw_r_WgFwO86U!%zp^M%8B zJo>{`^G>)s9wYB60p}Qy%H4H)&hlI*c*m=9(MK(Z#!_Blut{F_y#(e+Yv%4|oC#r& zW$xMrv0SVwBu%a0rHCedbjZP4C{(flwL;mr&5S1LiSMbZ&?a=KH_&+rJ0D_N67;D3 zB`8A3IBc!~md5Gmwss73^nTu$c>PXD(refZCaIt0MVwO zMB|ElBqw%DeSt48-KudnI$rB;H(V>g8{Q@Cu@Np>qK_I_n}~;!+tNUI=W2%$AxB+feuK{8pITo z4AZ2`3lBCHZj`{QT}8av%@o@#jN~nZ*)&v5$Ju2;$m5)^Lf2wTF0QZs@}>QKFdjEU z_fij*I^n`=wMkzWm#JVj@cDivE;D3+j9cBj2o!f;;`Lz#M8%OLC{gzzO)jomv0wE+ z!JVsW^uWDCl&J*Wi3SdOa0P&(!T#>oPHaRzN!!w%5FkI__cKV`zoOf9)c(zEZ<7Bj z!IpG$7Y_N1vLcpAK&?9{x(3zqU#{BPkJFHX=WzHAQrnQaM%7k_2xr%0?A>`HyWIbt zj3OyWaEDlsYW}j`QRxf!OG4VbZZq&u$?*@6zq8L0-qW$y&;P~O$5U0(X8nL3L+=PR zPd3ozM*B4;aO1ed(6loWdHRNuCz#s}Zxg8}IW?){Wt~R$wq7`x+P-;1c zEdi{@y~CD03OoT4M8@slCjr7wuoB&v=x4!^P-SFitD~}hvuI<~ZDqBP9?j5iPm$;| zajpJgM9xh9!;Uc^TKXIuWBf!1XlU?zwz~e`#j;wTi-i)*7h->_xoTfj?2( z2;+?_>RD|@TlyPLY)^X5z-q$4BXuWvg9XjeXfipI+BxQBhG0%+*_8o%Cm`p4y{>*Q zy&$krIrPOFr{c@m6AjWDa$P61{auVuW#rQN-&M61`iFqw9&IwaBgn!`WR*ajMlU3< zgzH@sO_5QZMAY!s$RSi}1>CI-PA}m`wBSk3{epfUgffEWW#Bz~+Bz0v$Yc1jF%DX9pP-kzH$Czie6w*rZf2o1+gy7_?xI z078>8!ACG8FPrrYhXD8+LuruFt_w&9BJMAN;pQ26JEF^g1c`R)2t|I{=eqvN@ouZR zs(LHK_yBIekHb4A&}lBnM)n*TPVpS)#Kww(`7a~%Li_YJf-d-w6PBl!#9VNrLmU^* zgl6nsVQyu@px9lGiKc&O-LLatZ%AE=C6m}M!<%(l)H#t5?2lqRO# zzxMxezuiJpJQx%tc#Qp%))E+CSA>24>u@~p8%KxIJiXR8@+f zZh#eL?@=ebW}|yM#OVDpFlPqD3PtwIl2*(3kChsas`7C3~JU7nH-ua7+o*BJEnJ^70azfyFB`4^ znEMeA>(OM2xEH0z@bC_wT)I93r9-3k&ENM*)mn65m$fi$7p`TO_7MZG)+ECN2^O^b zBEoYb2M3<&$A~z&kesuepJ0=Q9M*az#d%6%^{+43=_SJwv3^8L(kE%`Gy^tZ=W259 zSrcKmA^-wZ6O(nR81>n3m+RAZ?pY~~ed1M+rYwNy^fX=GBtx%eg;Uc@q4_I2-ZRn%zCx@w z^F@PT_wNT9P|#EO2T019?>J3`2K0VtYIcfbJsU_1HUJHNYrOK6Ub*>)x}x4I!@xwf zf*F?I=|JUbv2xY2t-xK#m!9pl|3jo|19>My;n4?j;H|90W_znD*DWqvm_&G7X86lNw9N z4gbNWl1Q%HNd!^yG+$&Ff32-s-RRPBi$S@QTF7&CGkJaujq4}1ipge6vzCdHC76?_ zl?v;4%v+~v_b$m@=yJN|zN@;O?f!rP%Hr*RvE5rv0`dWzAC9%XrtSzx!vZXTzw%8G z!0>07|I`g~n>gW`0lPD@H_7E8!!+un`n;(RR1~@J{V^fnJ47S8a>E4sIK%# zWNFzJWR7azb=8MKDefrwjP#h#UhJkaO(gfOs&n}ua;I^N&!uk!5FS?&NTp4@4z|2} zW;RW7xSHGXLU|KBu3la`8sw8lr$2Iugb_bl;J0JF@;3&#dryeb=)Si2?MpzknmrzA zr!dP_701#xNQsPpPz6JKl*ut|{tgUKK8rsXk97o6J$XvC{8Yl;0<*nN zGbdbnAu;DY`V*gnze@B0Djclu1}PE8zj4fDO|C@3q}1pvTz#1~vbGu$ccXzqS4hv&>I(!ChN z4^Ov4z=ZNS=1PtpQ#EzM?Q5Y0>AXE(uF*WsQu#4dba^7W_*ut%S8_R02+%ZNDAx&_ z4|m13-z@6SUv4>w{Yr*vynGy2byXQwGV;1-San~SQ;s)zwJvpl39{2;74riAzOIE4 zg3D=YR`@~;-;{fp*@jEz^vfp90c$Z%cV#opV=i{7QggTsq~&-@$3xhS$@%&fhA6?O zVH{CCS&uYpO0z1qVh7cO%PrAoP8{IdyuV3f!F&^|I>>!GGK>X6t(PcgkvD6iTC%z^ zd!F{q>{GJHSSK~k)oW~!N)O8lB>)R<%P%qlS^VYl{aq(C~T2_s#mtBH&?pQ z;w%t;x~cK*S{jp$xI4t6x;LgI%}+Z*8j-mO1vn)Yhp=lA8q~U)bgGK5rVLBjj<5kBX=7f4(zMhW6#SACwu- zb)46;jqbC*2LouA@??2uuFb_@rO97^-{hmKB(a7!sS?gz7DWySGw^SyAGqm^>6S)* z6+PHSmc?3~TBN71|3zHV=S9WyI&b^KTu z3c5}VOH02?m*2H-dDbQ_D)Zp@tVmK)$~*z(T+C@Ym*H zdd`c4@5$o}kW8jah{GRg6#42nbX^CH?hU2w_=xhW#LT8;>THZ9bq-cPP}~t;{emB zbj}?&C=r}O2=LC0DAm^fj_+{Cni6)T!V^`(PErz$vg5qfM$MgYVeAfL8iX*#gGyEV6!mAv$$$HRVS<#jJ&I0J zQ322MAx1;^NgQN=!07BCS?0$+Ktn1Ab1d$ioytA|ILFwq04rr#i6l`JO~+0y0H)x) zS&EKf4A84JQa2V#5|vlX`ukP*h@(;;t3&|o2C%f~GaBB=UtAU1>55y5sL74LlgjrDG%B*btV|J<-%D^SGC9-s+NJa5I1H zSgBLkv3r$*8o^>SSy1@!l+}U|VKs3o;HE!QP^nfRx2m?l0>D6Lk3_yeIk7*pnp=H; zi=z0t58;m03#$p0<|#xB`{N(JR-0Ey&YJ+8t>?MpA+* z?{dU^s*zp?&2q;=li!8pZ{|--CIa@Bf9?6%q5IgJ&G?peSkNkEC`X zvmcrLs!FYiRj#}gB5SRE8iHYKhA&BMRXbZ@=>)Tc+bSZr%NJ;Hc5_G8 z%*07)hfAG*OBIW6ECYZuTy|YS9H?bdkk;V$#ftw$(}@3(1hZ$bT3ojo>xg~RNYl{R z%f+2O8cAA3+1e1&?|2X!p~Lf^T8<79N0MQFU3~m?rco%io*#?;(8p;;blcGd@gq3m zL?V)?y(r(ln~{0Nz$(mw2_oX~cAQC{;e3k|`_7FX64t>h2AgCkNOz-dU-}!}7-IR!V0z+hN?OuOeb}y;=m3^Ui zu=AaqZtefZd_94rbB*h%KXkEf9SKJAS#s%}TcTK@!5hk}S3o`p&Ky}k@JPerP^=K4 zYzqaM?2-*=Msse{v>Fep>on@`&}XN_V*Y!1Pqaprv|Tu3dOUtdr|5AU0ZNk}F{bPQ znlrN66`|ctCW(_83tI%oc~tVEKhD4AzbrYwEi!B>GRN(uJt=s{MTQv!&UZlT6v=Cw z9@d%m^~1L%MZu^8)K3bUbA%YBtOqsqXVA;trAs3oX&tyn{3YujGRJsmY_>mmBFJ@F zQF4tAeyNsNPeKl4TK-Goy$fpOywZiACxbZ!#4M6R)eYv0*PPhC$6u$e1TPzV*;S3( zR^6q@vVVe;Lt^Tv&log;bf`F}p51faRz`|l*UcJ;u>1zq+ z5CWONhvt8?p>qa)V!)yq9WrAh`6mzGQ_Szj@XPej0G&UhnVemR2qpoR_(*gowSCYJ zYASO*v>+?bT;^_2UFUR=@5!>0qTnNnj9}9CzsM#hfSPcB@7&)b#WNgT+)I!EvB2g> zE>^F28F~bc2?JlmzkTK9h%85U!cf}ebiBP~N+jG11_(!!I9jUMaBSF8QB2qE`Pnn( z3Aw1|spi_rHZqXU<17bH3#D_Ks)~JxV zyS+7qV}b*%2nl+rgc?_r8IALTQJtrS#VXVgZGrgiQ}LSaYftFi2n zJne3DZAsR=QUs*VDQ=l1zNA-wiA%Pl@t9VlVpDwoVPm?& z!JA6U#?iRNCB9EVxF~4=sUU^llgpWqCEOgG9^&xzuu2*!H%r+yM`lwGoMF_rnoAPS zEcg>OVR&)d$B?+u0^R&5Cu+`1udU(sXHK$kEC@_SU>%qnz=cA$=cf?Pq%=Nn7bL+} z&2U6!WM3*Mhn_kUqqX~ZxX>rb`G}lnZ?uwz1lR&t>22fT_N|mv7C55=QTuCs5?B@{ zJk&MHsag_vuN3F7Z<8Pme398-9#MCG#~>I`{sH)payJtxPPfH*T3AeX0K36})Yb1X zmo>0=n&4~7lWL%Xl)#9SPC#c+43YXCc^Mk+;VB>_Z71^9@7s)G(=4Ot75uPvS z{Th6olA;4%mZ#5rrG~%Tr6`H0`q+#zVKF@>i~MJ>@=oM2zJc9fnIFae+1?yPSnOu> zmRU~)2)z}&>0^JkVst9WtY%~f<1WEo3u(#WT%Pa$l);*y@K+2zs#N}JEKMEx_Dk=X zS3+D&2HAy8I4$rcXQhLF!n1iToql0yB#t1%zQL9oCCq<3B?7GkwGsdJ64q^;$_IRT z1S3j)c--p*PEAJP3BEUtlY*cmy^LhiwotT{3);ePFv1&3)+3h#?g)&5^_yD%lc5$g zMc)OUeeaD$et86LfS<$P$&>Y9ASfNPz+MvmU0tG;2b`#qv*J1xi`zrhwIWvtI?*4# zV4Glgq#k;4v={F&48Ul_Gb1{De-YX6pyzi9b5=xwH=`-6F?JLHqS)5^bfjQ-KKfk^akFPAy#zb8EYFirGgpZ%6MFi5 z`*c#_y08)co35i^5*)}COVW1tHH|Za}s$8_Jm zj@GqBJ>pB+ZlL?2j75UnLr{&XLeG50zVg~*xqkeE`&~5e)l%iMCqvPJ312j4z6|xo z-#I4$?!rSbX1O#_pCc&f{Mw8Qnykwkp+bOcAIW!rXfh!Z<}?FY1N3v#sI7R}%Q$<$ z)D8DjK2$LNBs-SIU3dsPoQwIW2~zffutf=aPsl0YHKt9_ofzCSl7tO0=Px z@Y6r+Rkf)CMGnZ9o&P^Fq`Q$=s%b9V)niRo&z2rg8Jt4Bv2e$tQx`F1avh#f@93+c z$~nV{VtZ93pvwTpgr1JEppQ-id5cs?wV4FFb6gsIf8QpOPQc|(Jgn9rye5%MO>NVq-~XA+`Hxw7M@7^V<-_rXBI<`1LA5F zQoNuu_UCWi9!+^EXrv*B{V^XOa)6UA1yvq_7Qnb?v*ceDX6U&ZP#IP|!uA_$2}ucq zOG5t5dYaG!io0(qF6ft(Kh7Gk0F5Vw`h8KJU6R<@eWV6{lcQPo7^+u61*o=)pX(XE z)~G>0Uf%>%F1b*CqQ`-)e~xcTN|YWgFaA>NYP-X4Ll)K;|INEohT0N;(M&Vd2+_o8 zmITduSf@>O#V1>p`>oL^sW0GxVyo51;tZK(*M0C(o`DL;>?7PoGs7TQh>b*_L2IZT zju<#nXLg>wcC2}i{?YyB!$!lim&gr5@!iv#yq;b&q5we)n$%iWP;r%e@jioc>PfUG zO!FxOCOsuB2f8yg(pO_tad!&Zv8@PMBdl$uD>B3U;Djj*cpmM+UV4*a5Mn?@-PYwK zfJ-c6L#*r(^r?KKGg!WnBv-p%Rx4C?-gvs%%rU724+#U#gx6F?bb!gW7jPbJgXxIB zD?)mY?k;TWn(hLezREZ)B)sG`pS7t{Ia)3`{Z&}{YF_AU_i^67$+16l5MKCD#oq~I z>SgiL`GKPedRpO@0;Qm3{>TH~ydoUH;tv`JEFVtJmJGIqf9t+1Gqr;Gq_)*~f0Vn$ zU7Ar`M*{v8^QBocIL9O+ye16?Eq@0h{sy|d1d;`=P{k8MY?rw-t>6bgNot}H`FQfyVb@;PqOGq#)ptul)H~!%kPOs+i zJfs5i7SKArRWOO=r}17*6ItxC2)JWQMJwZa&GaE`3{mS4LRL6aJKb2hG)H=l2dC&t1VjnvhYHUB8CO`W#Kx*5DK zMQka4l$L=iO$lvd1)oAXgVE~y2tomX>p>eD(DqJM40TP{By zK-amo8mC7`%rKXd0kfzP=mCT~?}**|yDRQa(O4a+8}A!k|CVja#dJ4T_?q_q067%? zeT>jHo4Eu*kg}+F_Kx`21OR#RZ(9%#n$>~2d=0Jg=}in4Z-8Sml*E1PNhAjct4L(z zqmJ8=kS;gB&SM{8%l>+a0!hsIAkD>mnHce`Gb9$)@R(xp!y{FQ2X#4$2U}_`(i2s7 z-9m}Q4)YdM8^w)^t=N`2XtDgC2uw{L7VX4eW&1KY6TvIw8jHBh$(7Ly7t4hq#vH^9{J}3HqZoWgAm}Mx`&OozjY%HA3Pk$(p}N+|of?f**CXw9{5b1li<^J;-{wiwLpty_Gt8nm#^y&xOXI?ibE`m7?%9ferUs zu}sppgRIh8eQ;UWDCBZiW9RZWEK|a|8?=ZkG?^8BokGTO@Mxt8){n6<%Wi!+P9XcK zQ}Pz7$BcU}Ohl<;q~(v7bmTsELaVjifU=WzFc}T;HKNq!9+n~wE@&$6JZ46qrZCj@ zPEfuYv#`h+6Wfj=8(@U`GR)!MEcdibMd_7{_4FD%>jkq)>V6)CO2Hc=>c7rx>^N~S zY$aJs*Sk3Td&74=7)xc@V_idA@<-woRj_wtC>(lhRgucBBMB{IeK}#SPPyUFVD1lN zK|`Md_)wN>RA(gBf`&Zu%f8Uv-@t|DuBS{_#Sh5EH+D;=aL?7_QVj$M=#<_WV0cJi z!0qDDMz=%p&o~tRKbgpX&@d;@*rtz?w)q+{!n`zv{k&SAeUI!dEWI?Y zInhF05r3*8YzRu76=!aFDMGRyJxXnA${;jhBbV8Y^*d9gkrxtm|JWrO{fI%-lM~uk zT9G%e)HHUMNMZ{yjAp%_sY$1}5?0)PU-*u3;AynJ^H~W}#~*3mTm{cXdtM__Z1s3n z1o_<@+v)aXwOyh^Du{RP&;moggUA$X^v&vwfJXn?#_6xkDD0-KLR`4L@S$d9%hPlQ z6IcqG8D7g|@;RC}1~fEq5#mY2XNZv_Y>*#{4Hj3sgw(i58gn4gVEych0-%8Ik=k0l?o5BSu@V8 z?7H6#2r3_K%ZZyPb)V6u)efl2!k34;E>fxTee&rd{>-)3d|!Zt}rPhhDyJI+VCmAcg0KUi1q za!b$Id(X3Avj`X!Z(Bbd{h1c^w7=y9=DCBjKO7*5gICDZr!inj8_8kjA+$Tuf$am_ zL%|txL_KL`jG7w_z8wWREy`l^7M5qS@{L*TfGMK`cs2Y3Mj-98yQ#m%YnJ2OzT|z`jEwH>LP1jF;Y?1XS`Kw_EB&Ws5$XAq>U=74Pbry~jj0Vf~?4 z{u6WRceAUTuSU1eXt&7wG<3=Ep%cWP=I6~ z?HC{3usLhQq0s+bNL$A2_xwzE6}LF;CN45BoEQ*|gw?Uy1>!;@%Uyaa1VjwcfBi|G zUEALV8_b{S=<0f_nDL8R5K6f0NCzwasxJ99qZ&jPE|!yF#`%hWB{6)f*&fJJZv;QL zP*dUuV@o2@*@9mj*|F?9%0Dp&5>#Ed_G6VgMLKi3yr|1*1~p7m=5IH7(CGn}UC30N z?U2fX2+|&B%5U%gMfla@_X82A(Y?61LHJ6?c!knLi@{OlXexXmI0^yjA!B40it+wM zH6VBFxn^ zqt^W9*==YfD2MesBu{;A^?{j)dRdGHEJ@)seSAu7P|w@$gZ6-COxA0qHt`;ia|d!f z$z&Tf1T6)`oXtYOf^UDj#{vm=X7E=&`(mo9Yi|h#AeyK0A}xg!e3AiF*+YQ=arX7A z|LjDwCc82>f(GMQ8pnWr5a#dI2J$Ggm)v<5ytkXPFWs0;EjH9xx0=!4@;0~|3Oy+I z&ApBHy&#_G=^A=z?t6W{GxgLCvq!weB!FB-JV_*<)iPqYEteA;Gg>rr{*YpjP|LGE zC|)gKm#b7^p^+awAHs&cpowsQrzZHS&CY#@yP1^rw#R(qw7SzqhNdyy@4H_iZIbh?~AdwO4#0MrR_bM8hEvY+^STut7qo$!z*AV|9`52%fz*uuQU;WH~GBfOq0 zkLilenL^dm+ukI*icuMKt;B38Tk;;B@~VwP_=&gRX`EOy5!OHYvs<`q6*!1=QDq5f z=OlufqpY&JpfzB7$t0tbLPse-EFL7jS(hSbGbIIhV7;!jc|Q zT35`jy2U=>_dA71!~YZj1hKbIiHyVy?grOH@$ zTwW7>-j|@+y*zeY;RapM(RK=oYiI>C9gIp;jZW zA|pWk45-yWy6}?{BnOLK{SDMJFXoBZGDu}sgio~yE-{)hmPQb<>tAD2{0>v1jRk;X zd~n$6f`~tR3J(OE-j@ug7(CqQmXT<={%yb5aMW+dR2wH!*}d|=B?)KxGp!V04|0TPbkPFYxWF9ty40iFfkjv3G9bQ>z18=~iRsE^Q z3RB`jIQ2F9>qo46C>lq>EVFk=9vIPR7=ClH4k8``oD4wB+ORKh?;F}DLED73h1D1O zNZZV}KYh9kd>mZzix||&wnFM$=GS@GVC(jyeV9niL8!esSPh4ck@0JiI?wysTPxwr zZ!CXZY3V{&3j-;p1Va9i&Nt21a2m9GSnY@&UPfSbdorpPxO^D<*&Hx){%(0-_V-V} zrF7A8eur*TW~bL-f+NJ^(8z%x<9uVly9W|AADlNGEdSJ9)XAdFdiVf|Y%>YOy?VEFzbj(FhG=hCd+N^CXAH<-W$C@J z@I!T8GUePP{TxHDRqN zJju#usw%B-UmcZ_SfAYlwdCj(iQJQ@3Sm9C^$WzltA0{F|ECp^Jl=$nk3*f^^Whib zg3yN5tO8Gd=WXxJB$fmDtO9PNJI;bTH~xP63z3V*)_o(^U$BO22;^BN4kCWkuUr)h z-;$?NQz)IAp)cL?dvl_64;@{vwCI{ohL3o!Ri>DVcYgHh6o5VZOY12?;xlJ0=ax!@ zs!y8RFA;Q=VV!C6oygkrL=e~8*HcjT=n=w)DIt;1m$2~ow2))_x1C!*0}Gu<4Cs?e z|NZDcK~k-Dy>l@p{H-|u+Y`g6yv6g^oPcp8c1o-ggB~7AqXA`|NumxAKTTaeRpTgq+n24wlsny@K|v)6YB!a~kvml!n`DMDk}t*yeV zIiO^buciZsIE`Q!^?qKtrK82Vm7LG8H1q4%Nx*gd>#OuMpmpmbL)VIIO#zy6LpJyQ z;Q{x<;fwJok@S{qTi*o%wAQy#U4L~3*j`k0D_lF6x(?%o%gW1@q6m0x_5~;3;ZH!O zMu_bZ9NCk$^(xQAmA2hlaw=j&hFeK~YKC5g&TO-)e=H(d>J0KC-3!OMReCaIz+$@g zML;u#Ed5su8Cffj-K;&POXKcMEfaEv1Ou$WC-MDZn0m2O;u{ZI^uy^dAzZPwc%Oae z`BnU1V{N{-@Bg#nbK&sV1-7f7cWJ`2Z-RNP6Y*%2~5ul8PepmA7_C-d=FNch7IN^Ghb^I#c$gAw9VuinK^l9 z1yjP9+|(V28xmw)uQZqfgFmy!sEfwnp>w?u1A+dm`1YB?W~%m3R#bFkLUl56y2roP z;dw4=u%&*2JgeLEK4q2HbPul_ALnSck898FOP+sBb^iW?#DVbf{bZLX6Vq$auf7*+ zfrUJn`J{UDNzrrJhPelntk3DitEt0&Obw})$eKC}{x+n-{HGe;I_Eg@bz^o~f`FT< z853c&`xPc^hLZJ=H2Ng2n(nbxz4(RunMqnH7Q+J9kcO>{sS1%|OC}vMNYN>KSKpn- zKIZ|s3pU;6ccv1ugYxW*5IQ9H304@}R9b>Jt_xpd zkHrex8hF&J%|D%MQ^TrN-~JI|6B8UE6I8W(p*9GQ%aqhUEwb>B;^&iI!Kb9(CHv0& zjReUvTyy&!9>=&`qAg`ss5&Y)!cnmmIa&ri_e$TLIpZ|+_v>U?(%peA_ZX}fPITb0 zjlo)?d|}kIC&f4`;W&5a`1j6{O-jVhpHb91@xXR#5C;;0-#1lYJW%{urL43mgMuaF zMUga$gZ6lT1Xj^nep@4t&$?xJHuH1&O?t+I_iHi%U}7#BwcDDC20Ez~EaQ28|4xqf z%jsUeOpCBOoJ~Fu%R>gkzC@Ogo5m(#=w(HB=vfG9vSCkfyj`?{l-=p_b&QKBV8H=;xtg6Lgdy%TNp z-g|Tsy>}4=2|{$E3lY5=(UJ%fC5U{-@B5SInYnlF-Fu(4*IN4=e|q9H(R@>bz*Qb< z4?`DQn#=Sa2CVB$mET!uoql6XzK9*EvxU?---D(ylfRm~DOi%yMbF(lCB+2st!W#~ zT$=CvQRkGSx%$o)C)^~{OJ4Pls8#b1!Q>}@@-iLXMGTnzId*)2q=M z#=P#y_y~swP;+d0>g|y{dz##%ztlE4=&@=f`WZAB!CS6CQM4@b@80`!JsRh&c(1~w z$HA*)llKD$+=U(_pbw9He@)KvQ9pfXA8j);HBzsR!S!;7T72mx9_*eZ2W;r$qe%CFnIZ=en*qISOM1k13aq z9KpS(5FK7CrVNCNh7Otkf8ng+WHuuv9k^|BtJ=&QwT$$UZxamNRPHz=-_OR?eh||0 zG(WeUbUpioJWMRO<7iuF{F^yxUFkGvo;R50(TQsqCH*Ng zi_j$!NF|i?-WFRySkj&+3(ymVyG#hvXdoFV6zA&B6&p<opR8vnu_LD;1HZLNS<} zMl{h@AbFj45D?^fkO9qm)+?Y^I#x7J5m#qDa){n?Mi)P16$uFsJn0Ko_P$DGAb5B0 z7Z@Gd)Q3R+7$35KVzDGcdq@Pd^RQ`?fW-za&iOc6#Gb2PAPpJ#(6z7)+tYJBoC0_Z zC>4`uHe1&xp}%eKESW)il7cRO!V=$@iggR{CgJSsPvUQED?-}Tdi^}t1IFrWN9VzN zavs*K?d793g!dj=LOII`nm>6({qo(C9& zwC5d~Ntw9Mq8m|)Y%h2g%%688fS97bW;-t*{6}$cULr~sWrNwMezl@7nF5V`OZ9{4 zu_ZBbCu`HSmoMX0zsoP7MCfMAAJo@s!{dU|A;IK87G!4F!0*IWl89lChTvXxDsN8F zA9$7SO_$QwXt{;mID^b_Z%HXf7syH{t{?BeaPL+jd<;#)n)J#(v6$0mw4*7K^VQ+^ zp7|=NiJE!A`dUdAu&yTI{J`|G4<(5P4%izZV$MGx4eB=a)YWpIHFhRy@6m9>!E#ZD zpE@RTIWkheLw9`;o!fiU(P$4tbn@6YJ03}Byb#P?-tWj!$6?Fp)^L$o5kcL{!$%c^ zl~i2KC<$yKAk06!n&?H>P(z8XFxW`Y2J$=Gi@OvFY~6!UFA|zmsx4YhR62f`6Z!L^ z$VNs2s`tO>B_VL=ktMseKpXt+RaZYvoZ2-jhX_qdATv94F1-?r{?Mtvv(xtoLm%4X zTO}Rylz6RY;R|t_vrLRIE~wgcU)}oDsSW#TaG`{0-gj2r^z?!X%m)rsPK?kQPs%4q zch?vDS@xDp+%MVS$J5#C^)B`l==MMD(h{q+k8%KSETqJ!u=P)YpgB2zPj-QkL#;2O5RaSBnATqtN`Hh<~MXij~6rhxujV`u} z)%5IbcvRvf=BH10olBjoXC=c}MI{R$r%E!j%{>t|uD8q*DyN`oN0{PD_{HtrcdK41 z0N~Mn1*d}P|Ir)g%-+m4z--$1tm=<$~>O(jYF zP0ve{GIevF{DS)A#xupK@-TDH-l|6>j>Hk4lZ$@{my6UV2Cmk30~C49BWavrzyIs!-NiO?@x#bc9+(_9kwErppO4&R z3qq?d23HrELL_3qTh#pU8t3WIV{!mUBE3GOrMWM6N{wd3Jy4__WrFxgm1&5?&(m%^ z&PG0t>a=J~ifr7$Rb`#DUV?G1fMT?io*Rqm?+0G)U^s5n(GKP#9Abt<8D}eeVEoAe&HW7e!k|>DD)?6SK!|LJ=WD%Q;Qu zHa&mCwBb}OMrHj$S-Wi(~U)W-vvK5TnJlZ-3nd& zpY8a=fU7LC`K!gS=U3q4Gz*guKN04zzt+qF@yqdy)ni#bHP4WoX)mYZo)RzIzXvYg zHTRV>K7f*}J)S4urjyj_U!NSmzE+zW7Nk5VmK93x7XNu;BzJ-%uJq@xU{aWBswHsd z(VLGW8dJ*l`U8YXb*2UtEk;RsWR0*2);7=k1bo31;eap8KprsCZ z8SS)+{p}66hstuO#5K4rdJuFYXV{*n?t1DRu@(^NkvJiC}-g0dLD!p@JiTDjLcBnzI%hEP6h>6*G1ub z;`P`P$2>C9^$D;wlmmiC0`uW>a6USXsg9~^dUa$c!Te7;i1@pop>?DVMUmkT^(oTF zXdue<8G?GYzK3sqbcp~yOwo|8E0OZ>?yV_~Mmp=T<|B&6da5jh`g*H%Jt$KG=TBhd z0!-UID-a^j?F@rfe-QV*MI42?!mXC*I8zdEd@}b3n!Ev*M7fl{Y+>}(8#h)0y5 zn>+^XpW41RzCsjc|MXlzH@Ml$5ymYyVoMB(+7_W>*Z1CC1^oxe7j5^`>MTK_k{n>& zqs)o#Q>ThG>3^B&09mu93Z9`sjjF_M^?aVwu*?tB$|TQ@5Ii#o1TA30A{22m8l3M{+7re=fE|&9)3dzeb2PaG7sK6U*?*u1 zz>1A6r^sePpW**LDX|!B3U)P!F`;ipO}WWD8b_ptr9!%i@ZaBknR!VcDJT-I_;MAG zB!W8vrV1Iv6z+E6gM_u?Joe^cg(5FZaxZYhMma8FHkdIGPoy;{t-sB$hj5gwvoGQ( zp=GtTh>}I&>n6}n^urU1Un_O@1(Skvf5+Xdj89Ligkz49g4~1YIL?IPWrzrZgk!%T zw4BBGbs=zEMgpbdrOaQoAMUIGB=2FDv=DAgFA3c9l-eYz2^S2yP^%dErowLxhgquK z-v37CGs!K=aPL!KG0qP{kuTprP4=P{A}l2wac|vF{r_luTL18VN8cbcCMqd1w#Qq~`u3}_yY`y#u+{~@`8jP*ZtRV4N`)zeDXA><6 z^~A_DO4rfhf4Bdc<>4I;_R86%Dv*lXybI8=Yq@Gm!q?_75xu0f;Sv)dWJ_R-?NHkM za}vErQr=U8o0>Kiq2^27l))e%_72;aD2XI~E8@#`5~R?YYIEfA){?34+&U>d$1zHz zqSU57P;G?sXE7te>0{G;`Y5q<`jZvSvI~6^kMh@H9RpN~JsD$X7xxD%HA0vyF#roEOV8&Rs>D{71fFJXpCNb+ zg9Xz(PXK#BtLzz5Ujh2Gg*g%GF>;ew^UyPe&S(CDpnQ=eTc!OM@a{FVKh=qR&ik*{ zch#cPZjW?}MFd2o$lckJOa~CgqehX}d;-`hza|h9aqIUbha+i1dO9dH^e$<5aN3}$9{k^(< zRXI4~8`G<;7}+5|d}YC3Z_VaBba|}_TU&Hng`#c_Le)qcP{r3*$OZrMs-(MR!UpiCN z2O0U^W@1U`!Lp!5RGgy{#d(>7nEI!K7tixbQ!~PMB_>G?<*4r~;|Uj1j_JTNObGyG zBJEz1YR$j|wc%FB4D)ScyP*~F_vY_MmyDxW)Aim$v9+7@#WCt}dtwD%c^`pDnJ4oL zwH*o6__K)Wi^Z3V5G5m-M|k-ti?F7q`zBOd*9V6tpzDQn5SIF_Fx=+ID{-L``d?2z zMs?WTFlW(phLiX{FAAM+c%=QT3mW*0OBf;Kws^(T-n2glW)?;v!IKh@H9H2&ZLY=w z``+`c6a(CR#5c43Kv~s8H^`SH|GkO;v;{6o!yX>}oG6||z~zE@d}Mp=F%lU(qEb6_ zt^IIw-R>`$A&o22KpunoxBB|SvE2_7e8tKNrwthb%g=BLOmR1_I#Do(bx{&dFB%Kp zuGZV;{8eJsR4OJ-*{$F7P4?r=dwofPc;~#nqMy zAq5Z>EFcW!o#oF=%-Sd)=llr_>ezEL61Y@E&>m7NREpZVt)74}%q0PaH>W{Ps5<^?sLzk}R|GHT{-*nh`ttE=IglLqA- zj|9e7lQ-+dIF|lI*L)qSjk$v*)yvUW^Q*;$VoL;{(!(aH{@;Fu$|AYjcL_&K@#gNG zCT!lA|D=V~iN(kg{R-ss?^l4rbhjV=Sp{&xyI(s$0Y9{w%~K4IU&RR(?$;i%9>WUK zTBk@uZ7A2hBz_9w~y#|ySI{Eru`i)9muab+b2%Yx-Rdeny*cj|nKIAMV3ViZ4~ zb$u{`3X?Zaj~=d;zY^s63(<^fgbx{W1sU zp+*k#Fnokj=u=KOdiK;tn1rnW9M=wJ!Cw6DLUoBu*+R~t1ECF^cx1kJw_c7uJ|$EZwPSc66j3TT?9Qw} zcz#M0qP^lPhT{w)JVe3o5v0rYAHjI=oFp(|%5(`+0<0hNZ*MeHfoKa&^cr-zG^ay4 zpay!!HlTm{uEe{j3zw)w({Z0Ye78DSr5XQ$|WWokkP|ez#^LYKrCSg+3vd2pLBf47Ajo8gk}&x*$P9-Ysz05g<8|h?68t*0wg-INAH1ER)icbsr9*AYPQsO$XTmq&wrwH0u&j-7#V^R zz>r`bc67(%{4g1DzGVC4nm0nzH=JY+J-3(dPQsB*Zt|1uis(=7hjCpl=>}rBA?&wx zHdcWM6v09{ifK9xrglq*xm zoGlM+cN~?eoT^&k^Ih2_TtrlVc#Xj7QGP+7$Ex~NKbbms5pIto`;qH~CB;7cehC%; zSh$qIV3EV}S9zC8Ve}tL6jUMl1QjCIw1e+)1zW_}Kfe@2f*g(Db?FS-=~T@}QOrHp z&J>Q8;rUbJ{fCv2ppWSR#Nvkm7&WC?O+6P9yn}f3H7PEJpDVr@9Cn8ERC2|GTk-4_up^<0d3-zF`&IV<88q-b~D=eecY|JivF zr2A1$csEN2oF7_oMM7a%%0zks@iHfrLS7h1>MJ)GA(4im;Etk1M{fpE(sN9lS6acB z9*Vdy-s{2BdgII32t>i?)s=Ms_OgqI9O!YzdEDx_=#udEw%a{iBM$2J}tciNU(N zl=lX{Ujz|2atiLuz(}yUjW0%aIX%QopjFqUC-*~5714KG@{rVn4I&btBtXK(WWy;U zh|6{`-){Vqr8VXTgO;fNzICo(r#&tD$hGjPwHxQn+kc#X`r;3rTYk1z2qp7GX+t8O z(&Dcoz|81l?d`PEbe+dTv6D5tMdD-#P*};?sh)vRt<&e(9ZVTB|GcHzGqD+yP2!7N zgkjV`&JwII)C_jJYmiCHUW^J-%%Dh5iahebBu2{g_g2d=5Ez)(_WUI!QK8M=BjR)? zg{5gIeE#W$JX*A%3)>rG5BL4&EG(^g`iD*h2@~G-zt|WT1TN}qABD93 z3cOfe`|o(AMDe13(ygr1`a9jjz)BInQX5?g*?Sp;6GWk#s3aWRim!BCL~#l*h7aPT zQBlxOc{FUn-11i7y@G@f8=qJWTB*a)UuxVu(odCQmT+2olk&6g@=flY#_nLYhb@y% zfgVR$tLuHa3U{UspI+$*%k{>v8_K>EgFxGD$C#w#@8#!4Gjg2ivX5aH3FIv?vhs~H z<;@D-gLv3NZ%4-H36KHGD4!72I0NPM2mt>UCx&)RdfvO68I`*98Z?>jQl6M<`UI_O zJ`D%Szde5U?*Vnt7k7r6_vdpm!Y=0(p=)*8pPK@kvX?e^(uK(`_hB@!c|@xG_R-54 zkDfiXm&x%x)7~$^iqN0`158Kb+nTK{Q*X?{Bze$#`5ao)?iA7uzL6pWHlwc%bI0(wE_;w$n&RtXC) z76&QqaOHV)_=_YQHirE1C{DFMpNZ}i(Qz=o=C?vnwzRsWS0oQO|Ek0cvKt=t#nu2E zbqfyw(joYLKDIQ}513+ZaQ}VxpBWLH$vHe3`jTY_>p6&gkR1vyDO6C{4d?VP#inE= zK+?GUI#~-pd1*`lqRGAOIZb~&q~W0N=@b6um0xQBcYMmN@`RA+fOhug!|u1p%Pqd* zMO52sirmzFH31T0MuOlu&!J1)e@igXo1nDrgNjT>8mtnoGO@M^ss#8638g?c%9gMi zIxd=~@H-y<3L3RAlCyx>=sn_cqm%Y-J^w{i-XHCMw*czrl^fBwr>(Vx*n~U_2*Ox& z&MvsXg%bvHw`i_!pC^W*r|qseek4G!k8W?j(%;{$zXlen=bvGZE8~DD*o2x8hAfFJ zH+@>K`fvnd)>(_Rr({yl$jnFjx>mR@)O_{jog|QtPOp%la2(H~!>xXxvBU?aR;SCr zetcV-i8yQ@%O8CJ2_F6T2Bmby#dZB>`Q2^_Xcxmsrf8LWACvRNM7>Mt1_S3q9p3hy zvcEAFLx=~D8)-uLu4ibT2Y9m50#FgNl1};&@+@Zn!a(qOOPGv9YeKN30mob12IB6C z#!8dH z9Lqw53~*om*!Th-2`@cbf8s1-l6rMW6x!9{&3jAEz?nYk`P0{a_yrvh1pXwDa?e7} z1`YMkw=HLTpU13-T$p6obEH_4bog0HFNhmfVnbZrK738F+SbU8>AXA<<(WEQLUYG? zrEcxn5h6uwfP!z;_WDQE(<4RRLI{1{C}d*QeS#ENlT!Gt2oR`%uE1F7bJ z__#5RQk$>A`s|M%&~~BdQ4~SkL<1po8s0`sx9Q3GJ~OL&tlvt;n>Kr|86}H+)JQ~| zMcd`mS2PbGNb_Ch0&zXb+^Wr&wNIf)7BK^Jl7@r#L1b^b{$Eb6R=61Yk@d>F&8lRO~R1`sZd@7TEqN|U%lY|E&tN*9aRYx%OR!&nO~Ec-O*oyqGgFicpgZ6lT{5D zjlEl1In?&|j6P1-t+Io{w*j7Yu(K|cbwQr)|3Ah0cul^SRJE? zQ#Rb)=}hr5yh4TU%)|Ve1Ni&ti$6W9w6--Cynf{BZjWcngh929J>w$iG6-fpd#^6^ zz9&+)en}#Y-T6pF-BNvl01sLTW3o`T$Apoj&hI?6Cq_O}@$v(iwm({eD;WA^j3RaD z@1MyzM~4&lqS6e10I=(%MT*9#`+f(^N{zujwY~A@Tx)nN%+@`|@0@}7fZxDAJ?GaV zQrVE6+Mn!_%*}W6u5r7Crr^i(OQnP;WfyR%TPT~wOOb|!u3+kO%qaqCmP_N;Y{%cf z|BLgPh4ri=7yw`!qv=wrJ{;*^n^Sq^R|u>@QdZrc$P>TrF?8N8|6ydDln3gX+uj7}lv92*>}h6H-}6CmqTAXw)NR`SOSx(ecA?f@&gggV>Z|(D*z|oV zE;tbObFDguZeCdI1I~z%zK=RGh0D;AWiX9aY%aRw&W>eKw<@1BM%Duzj%EGS=Ka-Y zfMRb;98SI}bll%%MoUv00SrR0G=w>pUf)+|vFcY~rkhN;_^EG+fs?jA$aIE9u{~ag zX&VKh!&7;y%0V(g=XP!%_CvCJ?tT8>fC?ok{EZqIFh)?JcBedlz$5QCld40s(U{E+ z%2|bh^oKdK&>4Pm)Lfl$4AnxS3=IO_$red@*vo#Arl7wU{5U3 zIWczrfbAm(3ZT%0)Ui8e{Xi`@zy68Cgt45(yp#-bycoL4J2sg3lbW6fXW0K3)4a9Q z-f|gZ35;;sSAXRu(ncw1?bc;6RA*h>vCFMh*p0vGg>qX&QQUhg2(5v}WXL&)_80wk zEeMe`IgIwKZ~ev}jWZuFPJi;^IYMDzV_zGqT!?R)c76C~<5K$zqP2788bVD=HUP7% zT~I(Z1sj2BTh0lX^sV_~;Jx+FLS)(rA1xthz{Y}BMpX}^9HutdUAM( zL>u=Lwt!wmhE4?QHE^zkh<^I^B@bV)Zsrpj>wh8BEIyUmCh*f`MF@rW+4M(aU*%Bj zqoIx4j*W?L1_3Fx2)#lMoaoFe6j&dj6n@+9;)>?I_B(audZLFAO+-J;yt0^gR*r3P zpNH&GRaEfCMs$4$9x*ofV;8|q1P!^X-1U(8R@Ct_58z5l=nR6Qk3FBa8S- z4!^2w!F0%91Pv&eNSi2W7u}<+w6SUGjqk3)z!!JN^OsmZr`5N>k8~*}$v)lwXXi~% z-2nQCtXi0=cN}Nk&Zf#$j%hr~#KFr?whH499d!o`00_vZv~h92zZ^aty7Pp8s5co! z(vJiscwt?J5-9meIYXV`jr!y|`@eYXfEgjSJi?pxi7gd~(@Mf2blg9yOZQ*JNjnCDLJMrOM;3yG<2UQRA9pjiosajb%Kc}g08azNE6+Y}n_DsHFyGHH$9)ZAhX2>>D z+;wQVw6Z=q_%{0s2vkC=7^;MgEI-TaqpPf7NT(W`9;OF?i5_}_56i1Y`75+)?}2j6 zH%D{)#;`z)2T^TV_UVB(n=%>L; z0bEHqmBpqtt)D^FO+GKx_=5kv1lwGjZ((r`jeyd*t?@oBY8Xc%LA$^)5|ixik(NA; z+Rrh7n6O+z-D}fhb*6H_NuA)(aDerE7A6y!1mt;=YIA#FyRcx|ex7k;@jtK z;!7sul26J^&XgB`9bdV|aa=!$(0BS9Vwm!_G!zj4_#|GkLR(;jGmK(CP+f zbb@vohH?f(=I1c^w(jd}%v3J634~@iGVA7vGZl#xGT>}Ff;y?*DD%AxW$~j!I~qs9 zjql^4v0AvYdBF-^e%#(2(A{a~Y4idVSr&W6JNQmB&mME#>1#e6TRC zJ&Yv$w|kBJ9$Jo#0Dr$`F>e$+n8^KQ3BOVq)_JNr$pRIB&y% z(&zI|ZLp3~vh>F2(O(`wA<|H{gZm*VkwQMa!UqmX1ph6*!fJ~FiT82+HSRO%{vAhaf#y<w}V(KTZi`D(1yP0!e

sS4ks-HWZI`io_L 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 U+)9M1fCi99%34b03RaQ-2l)H;vH$=8 literal 0 HcmV?d00001 diff --git a/pages/logos/google.png b/pages/logos/google.png new file mode 100644 index 0000000000000000000000000000000000000000..2d963b38993a0e100c3b69acbdba327c70aacd6e GIT binary patch literal 19482 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

*4f|H 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

Yj^wS+i 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 literal 0 HcmV?d00001 diff --git a/pages/notice_2.html b/pages/notice_2.html new file mode 100644 index 0000000..5791b0b --- /dev/null +++ b/pages/notice_2.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + Search Engine Change Notice + + + + + +

+ +
+ +
+
+

This is part of a study conducted by Princeton University and Mozilla.

+ Princeton logo + +
+
+ + + + + + \ No newline at end of file diff --git a/pages/notice_3.html b/pages/notice_3.html new file mode 100644 index 0000000..b86265a --- /dev/null +++ b/pages/notice_3.html @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + Search Engine Change Notice + + + + + +
+
+
+
+

Change in Search Engine for Firefox

+

Your search engine was changed.

+

You can always select another search engine later. Learn More.

+
+
+
+
+
+
+

You can also revert this change now by clicking the button below.

+
+ Revert +
+
+
+
+ +
+
+

This is part of a study conducted by Princeton University and Mozilla.

+ Princeton logo + +
+
+ + + + + + \ No newline at end of file diff --git a/pages/search_ballot_4.html b/pages/search_ballot_4.html new file mode 100644 index 0000000..35792b6 --- /dev/null +++ b/pages/search_ballot_4.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + Search Ballot + + + + + +
+
+
+
+

Select a Default Search Engine for Firefox

+

These search engines are each used by millions across the globe.

+

You can always select another search engine later. Learn More.

+
+
+ +
+ +
+
+
+ +
+
+

Google

+
+
+ +
+
+
+ +
+
+
+ +
+
+

DuckDuckGo

+
+
+ +
+
+
+ +
+
+
+ +
+
+

Bing

+
+
+ +
+
+
+ +
+
+
+ +
+
+

Yahoo

+
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/pages/search_ballot_5.html b/pages/search_ballot_5.html new file mode 100644 index 0000000..25af151 --- /dev/null +++ b/pages/search_ballot_5.html @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + Search Ballot + + + + + +
+
+
+
+

Select a Default Search Engine for Firefox

+

These search engines are each used by millions across the globe.

+

You can always select another search engine later. Learn More.

+
+
+ +
+ +
+
+
+ +
+
+

Google

+

Find what you need with the world's most used search engine.

+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+

DuckDuckGo

+

We don't track you. Privacy, simplified.

+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+

Bing

+

Fast, accurate, and private search from Microsoft.

+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+

Yahoo

+

Yahoo connects people with the things they love.

+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/pages/search_ballot_6.html b/pages/search_ballot_6.html new file mode 100644 index 0000000..acbfede --- /dev/null +++ b/pages/search_ballot_6.html @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + Search Ballot + + + + + +
+
+
+
+

Select a Default Search Engine for Firefox

+

These search engines are each used by millions across the globe.

+

You can always select another search engine later. Learn More.

+
+
+ +
+
+
+
+ +
+
+

Google

+

Find what you need with the world's most used search engine.

+
+
+ +
+
+
+
+
+
+ +
+
+

DuckDuckGo

+

We don't track you. Privacy, simplified.

+
+
+ +
+
+
+
+
+
+ +
+
+

Bing

+

Fast, accurate, and private search from Microsoft.

+
+
+ +
+
+
+
+
+
+ +
+
+

Yahoo

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/pages/search_ballot_7.html b/pages/search_ballot_7.html new file mode 100644 index 0000000..64a3d43 --- /dev/null +++ b/pages/search_ballot_7.html @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + Search Ballot + + + + + +
+
+
+
+

Select a Default Search Engine for Firefox

+

These search engines are each used by millions across the globe.

+

You can always select another search engine later. Learn More.

+
+
+ +
+
+
+
+ +
+
+

Google

+

Find what you need with the world's most used search engine.

+
+
+ +
+
+
+
+
+
+ +
+
+

DuckDuckGo

+

We don't track you. Privacy, simplified.

+
+
+ +
+
+
+
+
+
+ +
+
+

Bing

+

Fast, accurate, and private search from Microsoft.

+
+
+ +
+
+
+
+
+
+ +
+
+

Yahoo

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+ + + + + +
+
+
+ +
+
+

Yandex

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+
+ +
+
+

Baidu

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+
+ +
+
+

Ecosia

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+
+ +
+
+

Ask.com

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/schemas/initial.measurements.1.schema.json b/schemas/initial.measurements.1.schema.json new file mode 100644 index 0000000..09d0e86 --- /dev/null +++ b/schemas/initial.measurements.1.schema.json @@ -0,0 +1,82 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "WebScience.version": { + "type": "string" + }, + "SurveyId": { + "type": "string", + "description": "ID sent to Qualtrics, for associating survey responses with telemetry data" + }, + "InitialEngine": { + "type": "string" + }, + "InterventionType": { + "type": "string" + }, + "Time": { + "type": "number" + }, + "TimeOffset": { + "type": "number" + }, + "HistoryData": { + "type": "array", + "items": { + "type": "object", + "properties": { + "SearchEngine": { + "type": "string" + }, + "Visits": { + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "NoticeNewEngine": { + "type": "string" + }, + "NoticeInterventionData": { + "type": "object", + "properties": { + "Revert": { + "type": "boolean" + }, + "AttentionTime": { + "type": "number" + } + }, + "additionalProperties": false + }, + "BallotInterventionData": { + "type": "object", + "properties": { + "SelectedEngine": { + "type": "string" + }, + "AttentionTime": { + "type": "number" + }, + "SeeMoreSelected": { + "type": "boolean" + }, + "Ordering": { + "type": "array", + "items": { + "type": "string" + } + }, + "DetailsExpanded": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/schemas/regular.measurements.1.schema.json b/schemas/regular.measurements.1.schema.json new file mode 100644 index 0000000..0af665e --- /dev/null +++ b/schemas/regular.measurements.1.schema.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "WebScience.version": { + "type": "string" + }, + "Time": { + "type": "number" + }, + "TimeOffset": { + "type": "number" + }, + "CurrentEngine": { + "type": "string" + }, + "SearchEngineQueries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "SearchEngine": { + "type": "string" + }, + "UniqueQueries": { + "type": "number" + } + }, + "additionalProperties": false + } + } + } +} \ No newline at end of file diff --git a/schemas/serpVisitData.measurements.1.schema.json b/schemas/serpVisitData.measurements.1.schema.json new file mode 100644 index 0000000..8f8f198 --- /dev/null +++ b/schemas/serpVisitData.measurements.1.schema.json @@ -0,0 +1,87 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "WebScience.version": { + "type": "string" + }, + "SearchPageVisit": { + "type": "object", + "properties": { + "SearchEngine": { + "type": "string" + }, + "AttentionTime": { + "type": "number" + }, + "PageNum": { + "type": "number" + }, + "Attribution": { + "type": "string" + }, + "AttributionID": { + "type": "string" + }, + "SequenceStartOnSerp": { + "type": "boolean" + }, + "OrganicDetails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "TopHeight": { + "type": "number" + }, + "BottomHeight": { + "type": "number" + }, + "PageNum": { + "type": "number" + } + }, + "additionalProperties": false + } + }, + "SelectedOrganicDetails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Ranking": { + "type": "number" + }, + "AttentionTime": { + "type": "number" + }, + "Loaded": { + "type": "number" + } + }, + "additionalProperties": false + } + }, + "NumAdResults": { + "type": "number" + }, + "NumAdClicks": { + "type": "number" + }, + "SearchAreaTopHeight": { + "type": "number" + }, + "SearchAreaBottomHeight": { + "type": "number" + }, + "Time": { + "type": "number" + }, + "TimeOffset": { + "type": "number" + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/searchEngineQA.md b/searchEngineQA.md new file mode 100644 index 0000000..c988b80 --- /dev/null +++ b/searchEngineQA.md @@ -0,0 +1,260 @@ +## Testing +In developer mode, output will be logged to the console. +View this (and other) output by going to `about:debugging`, then "This Firefox", then "Inspect" on the study, then the "Console" tab. + +### InitialData +- InitialData is collected upon the first startup of the study extension and reported upon completion of the intervention. +- Start the extension for the first time. +- Complete the randomly chosen intervention and check that the initial data appears in the output. +- Here's an example of the output: + ```json + "InitialData"{ + "SurveyId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", + "Engine": "Google", + "Time": 1618936823852, + "TimeOffset": 240, + "HistoryQueries": [ + { + "SearchEngine": "Google", + "Queries": 24 + }, + { + "SearchEngine": "Bing", + "Queries": 2 + }, + { + "SearchEngine": "DuckDuckGo", + "Queries": 1 + }, + { + "SearchEngine": "Yahoo", + "Queries": 0 + }, + { + "SearchEngine": "Ecosia", + "Queries": 0 + }, + { + "SearchEngine": "Ask", + "Queries": 0 + }, + { + "SearchEngine": "Yandex", + "Queries": 0 + }, + { + "SearchEngine": "Baidu", + "Queries": 0 + } + ] + } + ``` +- These values can be sanity-checked: + - `SurveyId` is a unique ID to enable syncing of survey data from the external Qualtrics surveys with other data. + - `Engine` is the default search engine. + - `Time` is the time (milliseconds since epoch). + - `TimeOffset` is the timezone offset in minutes. A value of 240 represents UTC-4. + - `HistoryQueryData` is an array with one item for each of the tracked search engines. + - `SearchEngine` is one of the tracked search engines. + - `Queries` is the number of unique queries made to `SearchEngine` over the past 30 days. + + +### InterventionData +- InterventionData is reported upon completion of the intervention. Each participant will be randomly assigned 1 of 7 different intervention groups. + - There is 1 control group + - `Control`: no intervention occurs + - There are 2 notice groups: + - `NoticeDefault`: the participant's default search engine is changed and a notice is shown informing them of the change + - `NoticeRevert`: the participant's default search engine is changed and a notice is shown informing them of the change. There is a button on the notice that allows for this change to be reverted with a single click. + - There are 4 ballot groups: + - `BallotDefault`: A search engine ballot is shown to the participant allowing them to choose their search engine from among four top search engines. The search engines do not have descriptions. + - `BallotHidden`: A search engine ballot is shown to the participant allowing them to choose their search engine from among four top search engines. All of the search engines have a description but the descriptions are hidden behind dropdown toggles. + - `BallotDescriptions`: A search engine ballot is shown to the participant allowing them to choose their search engine from among four top search engines. All of the search engines have description that is immediately visible. + - `BallotExtended`: A search engine ballot is shown to the participant allowing them to choose their search engine from among eight top search engines, although four of the search engines are hidden behind a 'See More Search Engines' button. All of the visible search engines have a description that is immediately visible. +- Criteria for completion of interventions: + - Control group: the intervention is immediately complete. + - Notice groups: the intervention is complete when the notice page unloads or upon the next restart of the study extension, whichever occurs first. + - Ballot groups: A ballot page is loaded upon study extension startup if the user has not completed the intervention. The intervention is complete when the participant selects an option on the ballot. If a ballot is loaded three times with no selection from the participant, then the intervention is complete upon the fourth study extension startup. +- Upon the start of the study, complete the randomly chosen intervention and check that the intervention data appears in the output. +- Here's an example of the output for the `BallotExtended` group: + ```json + "InterventionData": { + "InterventionType": "BallotExtended", + "AttentionTime": 12345, + "PreviousEngine": "Google", + "NewEngine": "DuckDuckGo", + "ButtonSelected": true, + "BallotAttempts": 1, + "Ordering": [ + "Google", + "Bing", + "Yahoo", + "DuckDuckGo", + "Ask", + "Yandex", + "Baidu", + "Ecosia", + ], + "DetailsExpanded": null, + "Time": 1618866488328, + "TimeOffset": 240 + } + ``` +- These values can be sanity-checked: + - `InterventionType` is the randomly chosen intervention group for the participant. + - `AttentionTime` + - Control group: this value is `null`. + - Notice groups: this value is the milliseconds of attention to the notice page if the participant closes out of the notice page or selects the button to revert changes. Otherwise, this value is `null`. + - Ballot groups: this value is the milliseconds of attention to the ballot page if the participant selects an option on the ballot. Otherwise, this value is `null`. + - `PreviousEngine` + - Control group: this value is the name of the initial engine. + - Notice groups: this value is the name of the search engine that the participant's default is changed from. + - Ballot groups: this value is the name of the search engine that the participant's default is changed from if the participant selects an option on the ballot. Otherwise, this value is `null`. + - `NewEngine` + - Control group: this value is the name of the initial engine. + - Notice groups: this value is the name of the search engine that the participant's default is changed to. + - Ballot groups: this value is the name of the search engine that the participant's default is changed to if the participant select an option on the ballot. Otherwise, this value is `null`. + - `ButtonSelected` + - `BallotExtended` group: Whether the participant selects the button to see more engines. + - `NoticeRevert` group: Whether the participant selects the button to revert the change. + - All other groups: `null`. + - `BallotAttempts` + - Ballot groups: the number of times that a ballot was shown to the participant. + - All other groups: `null`. + - `Ordering` + - Ballot groups: An array of the names of all search engines on the ballot in the order they are displayed. + - All other groups: `null`. + - `DetailsExpanded` + - `BallotHidden` group: An array of the names of all search engines on the ballot for which the participant expands details. + - All other groups: `null`. + - `Time` is the time (milliseconds since epoch) that the intervention is completed. + - `TimeOffset` is the timezone offset in minutes. A value of 240 represents UTC-4. + + +### SearchPageVisit +- Upon completion of the intervention, SearchPageVisit data is collected for each tracked engine SERP and reported upon the end of the page visit. +- After completion of the intervention, navigate to a SERP on one of the tracked engines and interact with the page. +- Close the tab or navigate to a different page. +- The data for the visit to the SERP should appear in the output. +- Here's an example of the output for a visit to a Google SERP: + ```json + "SearchPageVisit": { + "SearchEngine": "Google", + "AttentionTime": 16882, + "PageNum": 1, + "Attribution": "generated", + "AttributionID": "2Hk6q6VzJm", + "OrganicDetails": [ + { + "TopHeight": 697.3499755859375, + "BottomHeight": 1128.699951171875, + "PageNum": 1 + }, + { + "TopHeight": 2313.283447265625, + "BottomHeight": 2442.050048828125, + "PageNum": 1 + } + ], + "OrganicClickDetails": [ + { + "Ranking": 0, + "AttentionTime": 13149, + "Loaded": true + }, + { + "Ranking": 1, + "AttentionTime": 17009, + "Loaded": true + } + ], + "NumAdResults": 2, + "NumAdClicks": 1, + "NumInternalClicks": 0, + "SearchAreaTopHeight": 133, + "SearchAreaBottomHeight": 3719.283447265625, + "Time": 1618866488328, + "TimeOffset": 240 + } + ``` +- These values can be sanity-checked: + - `SearchEngine` is the engine of the SERP page (ie. Google, Bing, Yahoo, DuckDuckGo, etc). + - `AttentionTime` is the milliseconds of attention for the page visit + - `PageNum` is the page number of the SERP page. Note that in the case of DuckDuckGo (which uses an infinite scroll interface), this property represents the number of loaded pages. + - `Attribution` is the type of navigation that the SERP visit can be attributed to. This is the navigation type that originally led the participant to the search engine. + - `AttributionID` is the attribution sequence that the SERP visit is part of. + - `OrganicDetails` is an array where each items represents details of an organic results. + - `TopHeight` is the number of pixels between the top of the page and the top of the search result. + - `BottomHeight` is the number of pixels between the top of the page and the bottom of the search result. + - `ResultPageNum` is the page number that the search result was on. This should be the same as `PageNum` except for on DuckDuckGo (see above note regarding `PageNum` for DuckDuckGo). + - `OrganicClickDetails` is an array where each item represents details of a click on an organic result. + - `Ranking` is the ranking of the organic result among all the organic results on the page. + - `AttentionTime` is the number of milliseconds of attention for the page visit when the click occurred. + - `Loaded` is whether the window load event had fired when the click occurred. + - `NumAdResults` is the number of advertisement results on the page + - `NumAdClicks` is the number of clicks on advertisement links + - `NumInternalClicks` is the number clicks on links in the search area that led to different pages on the same search engine. + - `SearchAreaTopHeight` is the number of pixels between the top of the page and the top of the search area. + - `SearchAreaBottomHeight` is the number of pixels between the top of the page and the bottom of the search area. + - `Time` is the time (milliseconds since epoch) that the SERP visit started. + - `TimeOffset` is the timezone offset in minutes. A value of 240 represents UTC-4. + + + + + + + + +### DailyCollectionData +- Upon completion of the intervention, DailyCollectionData data is reported on a daily basis. +- In developer mode, DailyCollectionData data is reported every seconds after 15 seconds of inactivity. +- Here's an example of the output: + ```json + "DailyCollectionData": { + "CurrentEngine": "Bing", + "SearchEngineQueries": [ + { + "SearchEngine": "Google", + "Queries": 24 + }, + { + "SearchEngine": "Bing", + "Queries": 2 + }, + { + "SearchEngine": "DuckDuckGo", + "Queries": 1 + }, + { + "SearchEngine": "Yahoo", + "Queries": 0 + }, + { + "SearchEngine": "Ecosia", + "Queries": 0 + }, + { + "SearchEngine": "Ask", + "Queries": 0 + }, + { + "SearchEngine": "Yandex", + "Queries": 0 + }, + { + "SearchEngine": "Baidu", + "Queries": 0 + } + ], + "Time": 1618866488328, + "TimeOffset": 240 + } + ``` +- These values can be sanity-checked: + - `CurrentEngine` is the name of the participant's default search engine at the time of reporting. + - `SearchEngineQueries` is an array with one item for each of the tracked search engines. + - `SearchEngine` is one of the tracked search engines. + - `Queries` is the number of unique queries made to `SearchEngine` since the completion of the intervention. + - `Time` is the time (milliseconds since epoch). + - `TimeOffset` is the timezone offset in minutes. A value of 240 represents UTC-4. diff --git a/src-ts/.eslintrc.js b/src-ts/.eslintrc.js new file mode 100644 index 0000000..6b44eae --- /dev/null +++ b/src-ts/.eslintrc.js @@ -0,0 +1,64 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +module.exports = { + env: { + browser: true, + es6: true, + node: true, + webextensions: true, + jquery: true, + }, + ignorePatterns: [ "jquery.js" ], + extends: [ + "eslint:recommended", + "plugin:import/warnings", + "plugin:node/recommended", + "plugin:@typescript-eslint/recommended", + ], + overrides: [ + { + files: "tests/**", + env: { + mocha: true, + }, + extends: [ + "plugin:mocha/recommended", + ], + }, + ], + parserOptions: { + ecmaVersion: 2021, + sourceType: "module", + }, + plugins: [ + "import", + "node", + "mocha", + "@typescript-eslint" + ], + root: true, + rules: { + "node/no-deprecated-api": "error", + "node/no-extraneous-require": "off", + "node/no-missing-import": "off", + "node/no-unpublished-import": "off", + "node/no-unpublished-require": "off", + "node/no-unsupported-features/es-syntax": "off", + "no-multi-spaces": "error", + "no-var": "warn", + "prefer-const": "off", + "no-undef": 'off', + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": "off" + }, + parser: "@typescript-eslint/parser", + globals: { + ChromeUtils: false, + ExtensionAPI: false, + __ENABLE_DEVELOPER_MODE__: false, + } +}; diff --git a/src-ts/Initial.ts b/src-ts/Initial.ts new file mode 100755 index 0000000..82bf7e7 --- /dev/null +++ b/src-ts/Initial.ts @@ -0,0 +1,115 @@ +import * as webScience from "@mozilla/web-science"; +import * as Utils from "./Utils.js" + +export async function reportInitialData(storage) { + let initialData = { + SurveyId: await webScience.userSurvey.getSurveyId(), + Engine: await Utils.getSearchEngine(), + Time: Date.now(), + TimeOffset: new Date().getTimezoneOffset(), + HistoryQueries: await getHistoryData() + } + + console.log(initialData) + + storage.set("InitialDataReported", true); +} + + +/** + * Collects the number of visits to SERP pages over the + * previous 30 days for each of the tracked search engines + */ +async function getHistoryData(): Promise> { + const date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 30)); + + // TODO: update these values + const searchEngineToSerpUrlDetailsObject = { + Google: { searchQuery: "google.com search?", parameters: ["q", "query"] }, + DuckDuckGo: { searchQuery: "duckduckgo.com ia=web q=", parameters: ["q"] }, + Bing: { searchQuery: "bing.com/search?", parameters: ["q"] }, + Yahoo: { searchQuery: "search.yahoo.com/search", parameters: ["p", "q", "query"] }, + Ecosia: { searchQuery: "ecosia.org/search?", parameters: ["q"] }, + Yandex: { searchQuery: "yandex. /search", parameters: ["text"] }, + Ask: { searchQuery: "ask.com/web?", parameters: ["q", "query"] }, + Baidu: { searchQuery: "baidu.com/s?", parameters: ["wd", "word"] }, + } + + const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [] + + // Collects the number of unique queries made to each search engine over the past 30 days + for (const engine in searchEngineToSerpUrlDetailsObject) { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: searchEngineToSerpUrlDetailsObject[engine].searchQuery, startTime: date30DaysAgo, maxResults: 1000 }); + for (const historyItem of historyItems) { + if (historyItem.url) { + if (engine === "Google") { + const tbm = getQueryVariableUtil(historyItem.url, "tbm") + if (tbm) { + continue + } + + const tbs = getQueryVariableUtil(historyItem.url, "tbs") + if (tbs && !tbs.startsWith("qdr") && !tbs.startsWith("li") && !tbs.startsWith("cdr")) { + continue + } + } + + if (engine === "Yahoo") { + const url = new URL(historyItem.url) + if (url.hostname !== "search.yahoo.com" && url.hostname !== "www.search.yahoo.com") { + continue + } + } + + if (engine === "Yandex") { + const url = new URL(historyItem.url) + if (url.pathname.includes("direct")) { + continue + } + } + + if (engine === "Baidu") { + const url = new URL(historyItem.url) + if (url.hostname === "baidu.com" || url.hostname === "www.baidu.com") { + const tn = getQueryVariableUtil(historyItem.url, "tn") + if (tn && tn !== "baidu") { + continue + } + } + } + + for (const key of searchEngineToSerpUrlDetailsObject[engine].parameters) { + const query = getQueryVariableUtil(historyItem.url, key); + if (query) { + searchEngineQuerySet.add(query); + break; + } + } + } + } + + searchEnginesNumHistoryQueries.push({ + SearchEngine: engine, + Queries: searchEngineQuerySet.size + }) + } + + return searchEnginesNumHistoryQueries; +} + +/** + * Retrieve a query string variable from a URL + * @param {string} url - the URL to retrieve the query string variable from + * @param {string} parameter - the parameter of the variable in the URL you want to retrieve + * @returns {string} The query string variable in url for the given parameter. If the parameter + * does not exist in the URL, returns null. + */ +function getQueryVariableUtil(url, parameter) { + parameter = parameter.replace(/[[\]]/g, "\\$&"); + const regex = new RegExp("[?&]" + parameter + "(=([^&#]*)|&|#|$)"), + results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ""; + return decodeURIComponent(results[2].replace(/\+/g, " ")); +} \ No newline at end of file diff --git a/src-ts/Intervention.ts b/src-ts/Intervention.ts new file mode 100755 index 0000000..6377b0d --- /dev/null +++ b/src-ts/Intervention.ts @@ -0,0 +1,190 @@ +import * as webScience from "@mozilla/web-science"; +import * as RegularCollection from "./RegularCollection.js" +import * as Utils from "./Utils.js" + +let storage; + +/** + * Select an intervention, save the intervention name to storage, and + * conduct the intervention. + */ +export async function runIntervention(storageIn): Promise { + storage = storageIn + + const interventionType = await webScience.randomization.selectCondition({ + name: "InterventionSelection", + conditions: [ + { + name: "NoIntervention", + weight: 10, + }, + { + name: "NoticeDefault", + weight: 20 + }, + { + name: "NoticeRevert", + weight: 20 + }, + { + name: "BallotDefault", + weight: 10 + }, + { + name: "BallotHidden", + weight: 10 + }, + { + name: "BallotDescriptions", + weight: 10 + }, + { + name: "BallotExtended", + weight: 20 + }, + ] + } + ); + + storage.set("InterventionType", interventionType); + + if (interventionType === "NoticeDefault") { + noticeIntervention(2); + } else if (interventionType === "NoticeRevert") { + noticeIntervention(3); + } else if (interventionType === "BallotDefault") { + ballotIntervention(4); + } else if (interventionType === "BallotHidden") { + ballotIntervention(5); + } else if (interventionType === "BallotDescriptions") { + ballotIntervention(6); + } else if (interventionType === "BallotExtended") { + ballotIntervention(7); + } else { + completeIntervention(); + } +} + +/** + * Conduct one of the two notice interventions. The participant's default search engine will be changed + * and they will be presented a notice notifying them of the change + * @param {number} noticeType - Specifies the notice style that will be shown to the participant + * Should be either 2 or 3. + */ +async function noticeIntervention(noticeType: number) { + // Determine the participant's default search engine + const originalEngine = await Utils.getSearchEngine(); + + // Creates a list of options for a new default search engine (excluding the original default) + let newSearchEngineOptions = ["Google", "DuckDuckGo", "Yahoo", "Bing"] + newSearchEngineOptions = newSearchEngineOptions.filter(engineOption => { + return !originalEngine.toLowerCase().includes(engineOption.toLowerCase()) + }) + + // Change the participant's default engine to a random selection from the list of options for a new default + const newEngine = newSearchEngineOptions[Math.floor(Math.random() * newSearchEngineOptions.length)]; + Utils.changeSearchEngine(newEngine); + + // Register a listener that will send a response to the notice page with details of the original engine and new engine + // This allows the notice to notify the participant of their original engine and their new engine + webScience.messaging.onMessage.addListener((_message, _sender, sendResponse) => { + sendResponse({ previous: originalEngine, current: newEngine }) + }, { + type: "SearchEngineNotice", + schema: {} + }); + + storage.set("NoticeNewEngine", newEngine) + + // Register a listener that will be sent a message when the notice page unloads + webScience.messaging.onMessage.addListener((message) => { + // If the participant clicked on the button to revert the change, we restore their original default search engine + if (message.revert) { + Utils.revertSearchEngine(); + } + + storage.set("NoticeInterventionData", { + Revert: message.revert, + AttentionTime: message.attentionTime + }) + + // At this point, the intervention is complete + completeIntervention(); + }, { + type: "NoticeResponse", + schema: { + attentionTime: "number", + revert: "boolean" + } + }); + + // Creates a browser tab displaying the notice to the participant + browser.tabs.create({ url: `/pages/notice_${noticeType}.html` }); + + completeInterventionOnExtensionRestart(); +} + + +/** + * Conduct one of the four ballot interventions. A search engine ballot will be displayed to the participant + * and their default search engine will be changed to their selection + * @param {boolean} ballotDesign - Specifies the ballot style that will be shown to the participant. + * Should be either 4, 5, 6, or 7. + */ +function ballotIntervention(ballotDesign: number) { + storage.get("BallotAttempts").then(ballotAttempts => { + const newBallotAttempts = ballotAttempts ? ballotAttempts + 1 : 1 + storage.set("BallotAttempts", newBallotAttempts) + + if (newBallotAttempts >= 3) { + completeInterventionOnExtensionRestart(); + } + }) + + + webScience.messaging.onMessage.addListener((message) => { + // Modify the participant's default search engine to their ballot response and mark the intervention as complete + Utils.changeSearchEngine(message.engine); + + storage.set("BallotInterventionData", { + SelectedEngine: message.engine, + AttentionTime: message.attentionTime, + SeeMoreSelected: message.see_more_clicked, + Ordering: message.engines_ordering, + DetailsExpanded: message.details_expanded + }) + + // At this point, the intervention is complete + completeIntervention(); + }, { + type: "SearchBallotResponse", + schema: { + engine: "string", + attentionTime: "number", + see_more_clicked: "boolean", + engines_ordering: "object", + details_expanded: "object", + } + }); + + // Creates a browser tab displaying the search engine ballot to the participant + browser.tabs.create({ url: `/pages/search_ballot_${ballotDesign}.html` }); +} + +/** + * Called when an intervention is complete. Sets the value of InterventionComplete to true + * in storage and starts the regular data collection stage of the study. + */ +function completeIntervention() { + storage.set("InterventionComplete", true); + RegularCollection.startDataCollection(storage); +} + +/** + * Called when an intervention will be complete upon the next restart of the extension. Sets + * the value of InterventionComplete to true so that regular data collection will start upon + * restart of the extension. + */ +function completeInterventionOnExtensionRestart() { + storage.set("InterventionComplete", true); +} \ No newline at end of file diff --git a/src-ts/RegularCollection.ts b/src-ts/RegularCollection.ts new file mode 100755 index 0000000..2d81c52 --- /dev/null +++ b/src-ts/RegularCollection.ts @@ -0,0 +1,116 @@ +import * as webScience from "@mozilla/web-science"; +import * as Utils from "./Utils.js" +import * as Survey from "./Survey.js" +import { preLoadScripts, serpScripts } from "./content-scripts-import.js" + +/** + * An array of the tracked search engine names + * @type {Array} + * @private + */ +const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] + +/** + * An object that maps each of the tracked search engines to a set of queries made on the engine + * @type {Object} + * @private + */ +const searchEngineToQuerySetObject: { [engine: string]: Set } = {} + +let storage; + +export async function startDataCollection(storageIn): Promise { + storage = storageIn; + webScience.scheduling.onIdleDaily.addListener(reportDailyData); + Survey.runSurvey(storage); + + await registerContentScriptDataListeners(); + registerContentScripts(); +} + +/** + * Register the SERP content scripts and the listeners to store SERP queries and get page attribution details + */ +async function registerContentScripts() { + const siteScripts = [...serpScripts] + + for (const siteScript of siteScripts) { + if (!siteScript.enabled) { + continue + } + + siteScript.args.js = [ + ...preLoadScripts, + ...siteScript.args.js, + ] + + siteScript.args["runAt"] = "document_start" + await browser.contentScripts.register(siteScript.args) + } +} + +/** + * Send telemetry submissions with study data + * Not spawning off worker because we are not doing any additional data aggregation + */ +async function reportDailyData() { + // Create object mapping each engine to the number of unique queries on that engine + const searchEngineToNumQueries: Array<{ SearchEngine: string, UniqueQueries: number }> = [] + for (const searchEngine of searchEngines) { + searchEngineToNumQueries.push({ + SearchEngine: searchEngine, + UniqueQueries: searchEngineToQuerySetObject[searchEngine].size + }) + } + + // Report regular telemetry submission and clear the list of search page visits data + const regularTelemetrySubmission = { + CurrentEngine: await Utils.getSearchEngine(), + SearchEngineQueries: searchEngineToNumQueries, + Time: Date.now(), + TimeOffset: new Date().getTimezoneOffset(), + } + + console.log(regularTelemetrySubmission) +} + +/** + * Register the listeners for data from content scripts messages and initializes the data to store content script responses + * 1. Registers the listener that gets SERP queries from content scripts and initializes the SERP query set for + * each search engine from storage + * 2. Registers the listener that gets SERP visit data from content scripts and initializes the SERP visit data + * array from storage + */ +async function registerContentScriptDataListeners(): Promise { + // Initialize serpQuerySets from the stored list of queries made for each tracked search engines + for (const searchEngine of searchEngines) { + const queries = await storage.get(`${searchEngine}Queries`) + searchEngineToQuerySetObject[searchEngine] = new Set(queries) + } + + // Listen for new queries from content scripts + webScience.messaging.onMessage.addListener((message) => { + // If the set of queries for the respective search engine does not contain the new query, + // add the query to the set and update the list in storage + if (!searchEngineToQuerySetObject[message.engine].has(message.query)) { + searchEngineToQuerySetObject[message.engine].add(message.query); + storage.set(`${message.engine}Queries`, Array.from(searchEngineToQuerySetObject[message.engine])); + } + }, { + type: "SERPQuery", + schema: { + engine: "string", + query: "string", + } + }); + + // Listen for new SERP visit data from content scripts + webScience.messaging.onMessage.addListener((message) => { + console.log(message); + }, { + type: "SerpVisitData", + schema: { + data: "object", + } + }); +} \ No newline at end of file diff --git a/src-ts/StudyModule.ts b/src-ts/StudyModule.ts new file mode 100755 index 0000000..0db8523 --- /dev/null +++ b/src-ts/StudyModule.ts @@ -0,0 +1,50 @@ +/** + * This module measures user interaction on Google Search Engine Result Pages + * + * @module WebScience.Measurements.SearchBallot + */ +import * as Intervention from "./Intervention.js" +import * as RegularCollection from "./RegularCollection.js" +import * as WebNavigation from "./WebNavigation.js" +import * as Initial from "./Initial.js" +import * as webScience from "@mozilla/web-science"; + +/** + * @type {webScience.storage.KeyValueStorage} + * A persistent storage space for study data. + */ +let storage = null + +let rally; + +/** + * Start a ballot study + **/ +export async function startStudy(rallyArg): Promise { + rally = rallyArg + console.debug(rally) + + storage = await webScience.storage.createKeyValueStorage("WebScience.Studies.SearchBallot") + await webScience.pageManager.initialize() + + WebNavigation.initialize(); + + let initialDataReported = await storage.get("InitialDataReported") + if (!initialDataReported) { + Initial.reportInitialData(storage); + } + + + + let interventionComplete = await storage.get("InterventionComplete") + + // If intervention is complete, start recording SERP data. + // Otherwise, conduct initial data collection and run intervention. + if (interventionComplete) { + RegularCollection.startDataCollection(storage); + } + else { + Intervention.runIntervention(storage); + } +} + diff --git a/src-ts/Survey.ts b/src-ts/Survey.ts new file mode 100755 index 0000000..5b71969 --- /dev/null +++ b/src-ts/Survey.ts @@ -0,0 +1,101 @@ +import * as webScience from "@mozilla/web-science"; + +const millisecondsPerSecond = 1000; +const secondsPerDay = 86400; +const surveyRemindPeriodDays = 3; +const secondSurveyStartDay = 30; + +const surveyData = { + initial: { + surveyName: "initial", + popupNoPromptMessage: "There are currently no available surveys for the study.", + popupPromptMessage: "Please complete the following survey for Political & COVID-19 News Information.", + popupIcon: "icons/PrincetonShieldLarge.png", + reminderIcon: "icons/PrincetonShieldLarge.png", + reminderInterval: surveyRemindPeriodDays * secondsPerDay, + reminderMessage: "reminderMessage 1", + reminderTitle: "reminderTitle 1", + surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/initial/thankyou", + surveyUrl: "https://kartikeyakandula.com/", + }, + second: { + surveyName: "second", + popupNoPromptMessage: "No survey prompt message 2", + popupPromptMessage: "popupPromptMessage 2", + popupIcon: "icons/PrincetonShieldLarge.png", + reminderIcon: "icons/PrincetonShieldLarge.png", + reminderInterval: surveyRemindPeriodDays * secondsPerDay, + reminderMessage: "reminderMessage 2", + reminderTitle: "reminderTitle 2", + surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/final/thankyou", + surveyUrl: "https://www.google.com/", + }, + secondPlus: { + surveyName: "secondPlus", + popupNoPromptMessage: "No survey prompt message 3", + popupPromptMessage: "popupPromptMessage 3", + popupIcon: "icons/PrincetonShieldLarge.png", + reminderIcon: "icons/PrincetonShieldLarge.png", + reminderInterval: surveyRemindPeriodDays * secondsPerDay, + reminderMessage: "reminderMessage 3", + reminderTitle: "reminderTitle 3", + surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/final/thankyou", + surveyUrl: "https://duckduckgo.com/", + }, +} + +let storage; + +async function startSecondSurvey() { + // We get the status of the initial survey before ending the survey and + // starting one of the initial surveys. + const initialSurveyCompleted = await webScience.userSurvey.getSurveyStatus(); + await webScience.userSurvey.endSurvey(); + if (initialSurveyCompleted === "completed") { + // If the initial survey was completed, we set the current survey to be + // the default second survey. + webScience.userSurvey.setSurvey(surveyData.second); + } else { + // If the initial survey was not completed, we set the current survey to be + // the second survey with demographic questions from the initial survey + webScience.userSurvey.setSurvey(surveyData.secondPlus); + } +} + +export async function runSurvey(storageIn): Promise { + storage = storageIn; + + // Get the start time of the initial survey from storage. + // If the value does not exist in storage, set the initial start + // time to the current time. + let initialSurveyStartTime = await storage.get("InitialSurveyStartTime"); + if (!initialSurveyStartTime) { + initialSurveyStartTime = Date.now(); + storage.set("InitialSurveyStartTime", initialSurveyStartTime); + } + + let secondSurveyStartTime = initialSurveyStartTime + (millisecondsPerSecond * secondsPerDay * secondSurveyStartDay); + + let currentSurvey = await webScience.userSurvey.getSurveyName(); + console.log("SURVEY 1") + + if (!currentSurvey || + (currentSurvey === surveyData.initial.surveyName && Date.now() <= secondSurveyStartTime)) { + // If there is no current survey or the current survey is the initial survey + // and the current time is before the time to start the second survey, we set + // the current survey to be the initial survey and set a timeout to start the second survey. + webScience.userSurvey.setSurvey(surveyData.initial); + console.log(secondSurveyStartTime - Date.now()) + setTimeout(() => { + startSecondSurvey(); + }, 10000); + } else if (currentSurvey === surveyData.initial.surveyName) { + // If the current survey is the initial survey, we start the second survey. + // We only reach here if the current time is after the second survey start time. + startSecondSurvey(); + } else { + // Set the survey to the current survey. + // We only reach here if the current survey is one of the second surveys. + webScience.userSurvey.setSurvey(surveyData[currentSurvey]); + } +} \ No newline at end of file diff --git a/src-ts/Utils.ts b/src-ts/Utils.ts new file mode 100755 index 0000000..5439c5f --- /dev/null +++ b/src-ts/Utils.ts @@ -0,0 +1,66 @@ +/** + * Return the default search engine + * @returns {Promise} Promise object represents the name of the default search engine + */ +export async function getSearchEngine(): Promise { + try { + return await browser.experimental.getSearchEngine(); + } catch (error) { + return "ERROR" + } +} + +let originalHomepage = null; +let originalEngine = null; + +/** + * Revert changes from call to changeSearchEngine. + */ +export async function revertSearchEngine(): Promise { + try { + if (originalHomepage) { + browser.experimental.changeHomepage(originalHomepage); + } + } catch (error) { + console.error(error); + } + + try { + if (originalEngine) { + await browser.experimental.changeSearchEngine(originalEngine); + } + } catch (error) { + console.error(error); + } +} + + +/** + * Change the default search engine. + * @param {string} searchEngine - the search engine that the default will be changed to. + * Should be either Google, DuckDuckGo, Yahoo, Bing, Ecosia, Yandex, Baidu, or Ask + */ +export async function changeSearchEngine(searchEngine: string): Promise { + try { + const homepage = await browser.experimental.getHomepage(); + + // If the current home page is a search engine page, change it to the default Firefox homepage + const homepageLowercase = homepage.toLowerCase() + if (homepageLowercase.includes("google") || homepageLowercase.includes("bing") || + homepageLowercase.includes("yahoo") || homepageLowercase.includes("duckduckgo") || + homepageLowercase.includes("ecosia") || homepageLowercase.includes("ask") || + homepageLowercase.includes("baidu") || homepageLowercase.includes("yandex")) { + originalHomepage = homepage; + browser.experimental.changeHomepage("about:home"); + } + } catch (error) { + console.error(error); + } + + try { + originalEngine = await getSearchEngine(); + await browser.experimental.changeSearchEngine(searchEngine); + } catch (error) { + console.error(error) + } +} diff --git a/src-ts/WebNavigation.ts b/src-ts/WebNavigation.ts new file mode 100755 index 0000000..4925e82 --- /dev/null +++ b/src-ts/WebNavigation.ts @@ -0,0 +1,216 @@ +import * as webScience from "@mozilla/web-science"; + +/** + * An array of the tracked search engine names + * @type {Array} + * @private + */ +const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] + +/** + * An object that maps each tab to its current page's engine and its current attribution ID + * @type {Object} + * @private + */ +const attributionForTab: { [tabIndex: number]: { currentPageEngine: string; attributionID: string } } = {} + +/** + * An object that maps each attribution ID to its search engine, attribution, and + * whether the search engine sequence began on a SERP + * @type {Object} + * @private + */ +const attributionIdDetails: { [attributionId: string]: { engine: string; attribution: string; } } = {} + +/** + * An object that, for each tab, maps the URL of all the visited pages to the + * attribution ID of the page. This is used for determining attribution ID when the user + * navigates through history (ie. with the forward/back button) + * @type {Object} + * @private + */ +const tabHistoryAttribution: { + [tabIndex: number]: { + [url: string]: string + } +} = {} + +export function initialize() { + registerNewTabNavigationListener(); + registerAttributionTrackingListeners(); + registerGetPageAttributionListener(); +} + + +// When a new window or tab is opened from a navigation, sends a message with the URL of the +// opened page to the tab opening the page (used to determine if links are opened in new tabs +// on SERP content scripts) +function registerNewTabNavigationListener(): void { + // TODO: Do I need this? + webScience.messaging.registerSchema("NewTabURL", { + url: "string" + }); + + browser.webNavigation.onCreatedNavigationTarget.addListener((details) => { + webScience.messaging.sendMessageToTab(details.sourceTabId, { + type: "NewTabURL", + url: details.url + }); + }); +} + +/** + * Registers listeners for webNavigation events that keep track of page attribution details for SERP pages + */ +function registerAttributionTrackingListeners(): void { + // TODO: should we be copying history attribution information here? + // Copies the opening tab's attribution information and history attribution information + // to the new tab + browser.webNavigation.onCreatedNavigationTarget.addListener((details) => { + // TODO: make sure these are deep copies + if (details.sourceTabId in attributionForTab) { + attributionForTab[details.tabId] = { ...attributionForTab[details.sourceTabId] } + } + if (details.sourceTabId in tabHistoryAttribution) { + tabHistoryAttribution[details.tabId] = { ...tabHistoryAttribution[details.sourceTabId] } + } + }); + + // When a page uses the History API to update the URL, update the tabs history attribution + // information with the new URL + browser.webNavigation.onHistoryStateUpdated.addListener((details => { + const urlWithFragmentRemoved = details.url.split("#")[0] + if (!(details.tabId in tabHistoryAttribution)) { + tabHistoryAttribution[details.tabId] = {} + } + + if (details.tabId in attributionForTab) { + tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] = attributionForTab[details.tabId].attributionID + } + })) + + // When a navigation is committed, updates attribution information and history attribution + // information for the tab + browser.webNavigation.onCommitted.addListener((details) => { + const engine = getEngineFromURL(details.url); + const newAttributionID = createAttributionID() + + // If the transition is for a subframe or is a reload, we do not need to update anything + if (details.transitionType === "auto_subframe" || details.transitionType === "manual_subframe" || details.transitionType === "reload") { + return + } + + const urlWithFragmentRemoved = details.url.split("#")[0] + + // If the navigation occurred through the forward/back button, update the attribution information + // through the history attribution information + if (details.transitionQualifiers.includes("forward_back")) { + if (details.tabId in tabHistoryAttribution && urlWithFragmentRemoved in tabHistoryAttribution[details.tabId]) { + attributionForTab[details.tabId] = { currentPageEngine: engine, attributionID: tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] } + } else { + attributionForTab[details.tabId] = { currentPageEngine: engine, attributionID: newAttributionID } + attributionIdDetails[newAttributionID] = { engine: engine, attribution: "forward_back", } + } + return + } + + let newAttribution: string = null + + // A visit to an engine page is from a new attribution if: + // 1. The transitionType is any of the values associated with navigation from the address bar + // 2. The transitionQualifiers array include "from_address_bar" + // 3. There is not a previous attribution for the tab or the attribution is for a different engine than + // the navigation for the current page + if (engine) { + if (details.transitionType === "keyword_generated" || details.transitionType === "keyword" || details.transitionType === "start_page" || details.transitionType === "auto_bookmark" || details.transitionType === "generated" || details.transitionType === "typed") { + newAttribution = details.transitionType + } else if (details.transitionQualifiers.includes("from_address_bar")) { + newAttribution = "from_address_bar" + } else if (!(details.tabId in attributionForTab) || engine !== attributionForTab[details.tabId].currentPageEngine) { + newAttribution = details.transitionType + } + } + + if (!(details.tabId in tabHistoryAttribution)) { + tabHistoryAttribution[details.tabId] = {} + } + + // Update the attribution information + if (newAttribution || !(details.tabId in attributionForTab)) { + // If there is a new attribution or if there is not previous attribution information for the tab, create a new attribution + attributionForTab[details.tabId] = { currentPageEngine: engine, attributionID: newAttributionID } + tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] = newAttributionID + if (newAttributionID) { + attributionIdDetails[newAttributionID] = { engine: engine, attribution: newAttribution } + } + } else { + // Otherwise, continue the current attribution + attributionForTab[details.tabId].currentPageEngine = engine + tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] = attributionForTab[details.tabId].attributionID + } + }); +} + +/** + * Registers a listener for page attribution messages from content scripts that sends a response to the + * messaging content scripts with the attribution ID, attribution, and if the sequence of searches + * started on a SERP page (as opposed to a different page on the search engine) + */ +async function registerGetPageAttributionListener(): Promise { + webScience.messaging.onMessage.addListener((message, sender, sendResponse) => { + if (sender.tab.id in attributionForTab && attributionForTab[sender.tab.id].currentPageEngine === message.searchEngine) { + const attributionID = attributionForTab[sender.tab.id].attributionID + const attribution = attributionIdDetails[attributionID].attribution + sendResponse({ attributionID: attributionID, attribution: attribution }) + } else { + sendResponse({ attributionID: null, attribution: null }) + } + }, { + type: "GetPageAttribution", + schema: { + searchEngine: "string", + } + }); +} + + +/** + * Creates an attribution ID that will be shared by all SERP pages that can be attributed + * to the same navigation + * @returns {string} An attribution ID + */ +function createAttributionID() { + const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".split(""); + + let str = ""; + for (let i = 0; i < 10; i++) { + str += chars[Math.floor(Math.random() * chars.length)]; + } + return str; +} + + +/** + * Returns the search engine that the URL page is part of + * @param {string} stringUrl - the URL of the page that is being checked + * @returns {string} The name of the search engine that the URL belongs to or + * null if the URL does not belong to any of the tracked engines + */ +function getEngineFromURL(stringUrl: string) { + let url: URL = null; + try { + url = new URL(stringUrl) + } catch (error) { + console.error(error) + return null + } + + if (url) { + for (const searchEngine of searchEngines) { + if (url.hostname.toLowerCase().includes(searchEngine.toLowerCase())) { + return searchEngine + } + } + } + return null +} \ No newline at end of file diff --git a/src-ts/background.ts b/src-ts/background.ts new file mode 100644 index 0000000..4754bc2 --- /dev/null +++ b/src-ts/background.ts @@ -0,0 +1,54 @@ +// /* This Source Code Form is subject to the terms of the Mozilla Public +// * License, v. 2.0. If a copy of the MPL was not distributed with this +// * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// import "webextension-polyfill"; + +// import { Rally, runStates } from "@mozilla/rally"; + +// // Example: import a module. +// import { startStudy } from "./StudyModule"; + +// const rally = new Rally(); + +// async function runStudy() { +// await startStudy(rally); +// } + +// rally.initialize( +// // A sample key id used for encrypting data. +// "sample-invalid-key-id", +// // A sample *valid* JWK object for the encryption. +// { +// "kty": "EC", +// "crv": "P-256", +// "x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", +// "y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", +// "kid": "Public key used in JWS spec Appendix A.3 example" +// }, +// // The following constant is automatically provided by +// // the build system. +// // @ts-expect-error: Provided by build system +// __ENABLE_DEVELOPER_MODE__, +// (newState) => { +// if (newState === runStates.RUNNING) { +// console.log("The study can run."); +// } else { +// console.log("The study must stop."); +// } +// } +// ).then(_resolve => { +// // Initialize the study and start it. +// // Example: initialize the example module. +// runStudy(); +// }, _reject => { +// // Do not start the study in this case. Something +// // went wrong. +// }); + + +import { startStudy } from "./StudyModule"; +async function runStudy() { + await startStudy(null); +} +runStudy() \ No newline at end of file diff --git a/src/content-script.js b/src-ts/content-script.ts similarity index 87% rename from src/content-script.js rename to src-ts/content-script.ts index 163db1a..d3673f5 100644 --- a/src/content-script.js +++ b/src-ts/content-script.ts @@ -6,4 +6,4 @@ import "webextension-polyfill"; // ... Add more implementation here! -console.debug("Running content script"); +console.log("Running content script"); diff --git a/src-ts/content-scripts-import.ts b/src-ts/content-scripts-import.ts new file mode 100755 index 0000000..ba4d4d8 --- /dev/null +++ b/src-ts/content-scripts-import.ts @@ -0,0 +1,89 @@ +/** + * This file contains js objects that detail which content scripts should be loaded for which pages, along with whether they are enabled or not + + */ + +export const preLoadScripts = [ + { + file: "src/content-scripts/common.js" + }, + { + file: "src/content-scripts/reporting.js" + } +] + +/** + * The following objects contain: + * -- enabled: whether this content script should be loaded + * -- matches/exclude matches: which URL fragments to match + * -- js: content script to load + * The objects prefixed by "testing" are only loaded when the module is being tested. + * + * TODO: don't even register the testing objects when not being tested + */ +export const serpScripts = [ + { + enabled: true, + args: { + matches: ["*://*.google.com/search?*"], + js: [{ file: "src/content-scripts/serp-scripts/google.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.duckduckgo.com/*"], + js: [{ file: "src/content-scripts/serp-scripts/duckduckgo.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.bing.com/search?*"], + js: [{ file: "src/content-scripts/serp-scripts/bing.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.search.yahoo.com/search*"], + js: [{ file: "src/content-scripts/serp-scripts/yahoo.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.ecosia.org/search*"], + js: [{ file: "src/content-scripts/serp-scripts/ecosia.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.yandex.com/search*", "*://*.yandex.ru/search*"], + js: [{ file: "src/content-scripts/serp-scripts/yandex.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.ask.com/web?*"], + js: [{ file: "src/content-scripts/serp-scripts/ask.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.baidu.com/*"], + js: [{ file: "src/content-scripts/serp-scripts/baidu.js" }] + } + }, + { + enabled: true, + args: { + matches: ["*://*.google.com/afs/ads*"], + js: [{ file: "src/content-scripts/serp-scripts/askgoogleads.js" }], + "allFrames": true, + } + }, +] \ No newline at end of file diff --git a/src-ts/content-scripts/common.ts b/src-ts/content-scripts/common.ts new file mode 100644 index 0000000..a5c57c6 --- /dev/null +++ b/src-ts/content-scripts/common.ts @@ -0,0 +1,548 @@ +/** + * Functions for content scripts + */ + +let pageLoaded = false + +let organicDetails: Array<{ + TopHeight: number, + BottomHeight: number, + PageNum: number, +}> = [] + +let numAdResults: number = null + +let pageNum: number = null + +let pageIsCorrect = null + +let timestamp = Date.now() + +let searchAreaTopHeight: number = null +let searchAreaBottomHeight: number = null + +let lastClickTime: number = null + +/** + * The attribution of the current page + * @type {string} + */ +let attribution: string = null + +/** + * The attribution ID of the current page + * @type {string} + */ +let attributionID: string = null + +let isInternalLinkFunction: (urlString: string) => boolean = null; + + +/** + * The total attention time of the page except for time since the page has most recently + * received attention if the page currently has attention + * @type {number} + */ +let totalAttentionTime = 0; + +/** + * The previous start time of the page having attention. + * Is null if there has not been such a start time yet. + * @type {number} + */ +let previousAttentionStart = null; + + + +/** + * A map object that maps the URLs of clicked organic elements to their respective organic element and the index + * of the organic element within the list of organic elements + * @type {Map} + */ +const mousedownOrganicLinksMap = new Map(); + +/** + * The set of URLs of clicked ad elements. We do not map to any details as we do with mousedownOrganicLinksMap + * because we only track the number of ad clicks + * @type {string} + */ +const mousedownAdLinks = new Set() + + +const mousedownInternalLinks = new Set() + +/** + * The number of advertisement clicks + * @type {number} + */ +let numAdClicks = 0; + +/** + * The number of internal clicks + * @type {number} + */ +let numInternalClicks = 0; + +/** + * An array of details for each organic link click + * @type {Array} + */ +const organicClicks: Array<{ + Ranking: number, + AttentionTime: number, + Loaded: boolean, +}> = []; + +interface LinkListenerDetails { + element: Element; + mousedownListener: (_event: Event) => void; + clickListener: (_event: Event) => void; +} + +const elementsWithInternalClickListeners: LinkListenerDetails[] = [] + +/** + * An array of organic elements with listeners that have been added to determine organic element clicks + * This array is used to remove these listeners if we would like to refresh the listeners (ie. because of a page change) + * @type {Array} + */ +const organicLinksWithListeners: LinkListenerDetails[] = [] + +/** + * An array of ad elements with listeners that have been added to determine ad element clicks + * This array is used to remove these listeners if we would like to refresh the listeners (ie. because of a page change) + * @type {Array} + */ +const adLinksWithListeners: LinkListenerDetails[] = [] + +/** + * Retrieves the first matching element given an xpath query + * @param {string} xpath - The xpath query + * @param {Node} contextNode - The context node for the query + * @returns {Element} The first element matching the xpath + */ +function getXPathElement(xpath: string, contextNode: Node = document): Element { + const matchingElement = document.evaluate( + xpath, contextNode, + null, XPathResult.FIRST_ORDERED_NODE_TYPE, null + ).singleNodeValue + return (matchingElement as Element) +} + +/** + * Retrieves an array of all elements matching a given xpath query + * @param {string} xpath - The xpath query + * @param {Node} contextNode - The context node for the query + * @returns {Element} An array of all elements matching the xpath query + */ +function getXPathElements(xpath: string, contextNode: Node = document): Element[] { + const results: Element[] = []; + const query = document.evaluate(xpath, contextNode, + null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); + let element = query.iterateNext() + while (element) { + results.push(element as Element) + element = query.iterateNext() + } + return results; +} + +/** + * Determines the offset from the top of the document for the element + * @param {string} element - The element + * @returns {number} The offset from the top + */ +function getElementTopHeight(element: Element) { + if (!element) return null + return window.pageYOffset + element.getBoundingClientRect().top +} + + +/** + * Determines the offset from the top of the document for the next element + * @param {string} element - The element + * @returns {number} The offset from the top + */ +function getNextElementTopHeight(element: Element) { + return getElementTopHeight(getNextElement(element)) +} + +/** + * Sends a message to the background script and receives page attribution information as a response + * @param {string} searchEngine - The search engine of the SERP content script, used for validation in the background + */ +function getAttributionDetailsFromBackground(searchEngine: string) { + if (!attributionID) { + browser.runtime.sendMessage({ type: "GetPageAttribution", searchEngine: searchEngine }).then( + response => { + if (response) { + if ("attribution" in response) { + attribution = response["attribution"]; + } + if ("attributionID" in response) { + attributionID = response["attributionID"]; + } + } + }, + error => { + console.error(`Error: ${error}`); + }); + } +} + +/** + * Initializes the PageManager listeners and variables + */ +function initPageManagerListeners(asyncLoads = true) { + function initModule() { + registerAttentionListener(); + if (asyncLoads) { + registerPageVisitEndListener(); + registerPageVisitStartListener(); + } + } + + if (("webScience" in window) && ("pageManager" in window.webScience)) { + initModule(); + } + else { + if (!("pageManagerHasLoaded" in window)) { + window.pageManagerHasLoaded = []; + } + window.pageManagerHasLoaded.push(initModule); + } +} + + +function pageVisitEndListener() { + if (lastClickTime && Date.now() - lastClickTime < 500) { + console.log("unload because of internal click!") + numInternalClicks++; + } + reportResults(); +} +/** + * Registers a listener for page visit end events that reports results + * and resets attention tracking + */ +function registerPageVisitEndListener() { + webScience.pageManager.onPageVisitStop.addListener(pageVisitEndListener); +} + +function pageVisitStartListener({ timeStamp }) { + timestamp = timeStamp + resetAttentionTracking(); +} + +/** + * Registers a listener for page visit start events + */ +function registerPageVisitStartListener() { + webScience.pageManager.onPageVisitStart.addListener(pageVisitStartListener); + + // In case we miss an initial pageVisitStart event + if (webScience.pageManager.pageVisitStarted) { + pageVisitStartListener({ timeStamp: webScience.pageManager.pageVisitStartTime }); + } +} + +/** + * Retrieves the total attention time of the page + * @returns {number} The total attention time of the page + */ +function getAttentionTime() { + if (webScience.pageManager.pageHasAttention && previousAttentionStart) { + return totalAttentionTime + (performance.now() - previousAttentionStart) + } + else { + return totalAttentionTime; + } +} + +/** + * Registers the page attention listener that updates total attention time + */ +function registerAttentionListener() { + // Update previous start on registration because we might have missed + // the initial pageAttentionUpdate event + if (webScience.pageManager.pageHasAttention) { + previousAttentionStart = performance.now() + } + webScience.pageManager.onPageAttentionUpdate.addListener(() => { + // If the update is for the page gaining attention, update the previous attention start time. + // Otherwise, update total attention time with the time since the previous attention start + if (webScience.pageManager.pageHasAttention) { + previousAttentionStart = performance.now() + } else if (previousAttentionStart) { + totalAttentionTime = totalAttentionTime + (performance.now() - previousAttentionStart) + console.log(totalAttentionTime) + } + }); +} + +/** + * Resets attention tracking for new page visits. + */ +function resetAttentionTracking() { + totalAttentionTime = 0 + if (webScience.pageManager.pageHasAttention) { + previousAttentionStart = performance.now() + } else { + previousAttentionStart = false + } +} + +/** + * Retrieve a query string variable from a URL + * @param {string} url - the URL to retrieve the query string variable from + * @param {string} parameter - the parameter of the variable in the URL you want to retrieve + * @returns {string} The query string variable in url for the given parameter. If the parameter + * does not exist in the URL, returns null. + */ +function getQueryVariable(url, variable) { + url = url ? url : window.location.href + variable = variable.replace(/[[\]]/g, "\\$&"); + const regex = new RegExp("[?&]" + variable + "(=([^&#]*)|&|#|$)"), + results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ""; + return decodeURIComponent(results[2].replace(/\+/g, " ")); +} + +/** + * Gets a query from the URL and sends it to the background page to save + * @param {string} engine - The search engine that the query was made to + * @param {string[]} urlKeys - A list of parameters that the query variable could associated with in the URL + */ +function sendQueryToBackground(engine, urlKeys: Array) { + for (const key of urlKeys) { + const query = getQueryVariable(window.location.href, key); + if (query) { + browser.runtime.sendMessage({ type: "SERPQuery", engine: engine, query: query }); + return; + } + } +} + +function getAdLinksDefault(adResults: Element[]): Element[] { + const adLinks: Element[] = [] + for (const adResult of adResults) { + adLinks.concat(Array.from(adResult.querySelectorAll("[href]"))) + } + return adLinks +} + +function determineOrganicElementsAndAddListeners( + organicResults: Element[], + getPageNumForElement: (Element) => number = () => { return pageNum }) { + + // Removes any existing listeners from organic elements that we previously added + for (const organicLinkWithListeners of organicLinksWithListeners) { + organicLinkWithListeners.element.removeEventListener("mousedown", organicLinkWithListeners.mousedownListener); + organicLinkWithListeners.element.removeEventListener("click", organicLinkWithListeners.clickListener); + } + + organicDetails = [] + + // For each organic element, adds mousedown and click listeners to any elements with an href attribute + // Also adds the listeners to a list so that we can later remove them if we want to refresh these listeners + for (let i = 0; i < organicResults.length; i++) { + const organicResult = organicResults[i] + organicDetails.push({ TopHeight: getElementTopHeight(organicResult), BottomHeight: getNextElementTopHeight(organicResult), PageNum: getPageNumForElement(organicResult) }) + + organicResult.querySelectorAll("[href]").forEach(organicLinkElement => { + function organicMousedownListener(_event: Event) { + // console.log((organicLinkElement as any).href) + if ((organicLinkElement as any).href) { + const organicLinkElementHref = urlFilter(encodeURI((organicLinkElement as any).href)) + mousedownOrganicLinksMap.set(organicLinkElementHref, { element: organicLinkElement, index: i }) + } + } + + function organicClickListener(event: MouseEvent) { + if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { + console.log(event.currentTarget) + console.log(event.target) + console.log("") + organicClicks.push({ Ranking: i, AttentionTime: getAttentionTime(), Loaded: pageLoaded }) + } + } + + organicLinkElement.addEventListener("mousedown", organicMousedownListener); + organicLinkElement.addEventListener("click", organicClickListener); + organicLinksWithListeners.push({ element: organicLinkElement, mousedownListener: organicMousedownListener, clickListener: organicClickListener }) + }); + } +} + +/** + * Get organic and ad results and add listeners for clicks + * @param {callback} getOrganicResults - Callback to get the organic results of the SERP + * @param {callback} getAdResults - Callback to get the ad results of the SERP + */ +function determineAdElementsAndAddListeners( + adResults: Element[], + getAdLinks: (adResults: Element[]) => Element[] = getAdLinksDefault) { + // Removes any existing listeners from ad elements that we previously added + for (const adLinkWithListeners of adLinksWithListeners) { + adLinkWithListeners.element.removeEventListener("mousedown", adLinkWithListeners.mousedownListener); + adLinkWithListeners.element.removeEventListener("click", adLinkWithListeners.clickListener); + } + + + + numAdResults = adResults.length + + + const adLinks = getAdLinks(adResults) + + // For each ad element, adds mousedown and click listeners to any elements with an href attribute + // Also adds the listeners to a list so that we can later remove them if we want to refresh these listeners + for (const adLinkElement of adLinks) { + const fnAdMousedownListener = function adMousedownListener(_event: Event) { + if ((adLinkElement as any).href) { + const adLinkElementHref = urlFilter(encodeURI((adLinkElement as any).href)) + mousedownAdLinks.add(encodeURI(adLinkElementHref)) + } + } + + const fnAdClickListener = function adClickListener(event: MouseEvent) { + if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { + console.log("AD CLICK!!!") + numAdClicks++; + } + } + + adLinkElement.addEventListener("mousedown", fnAdMousedownListener); + adLinkElement.addEventListener("click", fnAdClickListener); + adLinksWithListeners.push({ element: adLinkElement, mousedownListener: fnAdMousedownListener, clickListener: fnAdClickListener }) + } + +} + +function isValidURL(url: string): boolean { + const res = url.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g); + return (res !== null) +} + + +function addInternalClickListeners( + exclude: string, + isInternalLink: (urlString: string) => boolean, + searchAreaElements: NodeListOf) { + + // Removes any existing listeners for internal clicks that we previously added + for (const elementWithInternalClickListeners of elementsWithInternalClickListeners) { + elementWithInternalClickListeners.element.removeEventListener("mousedown", elementWithInternalClickListeners.mousedownListener, true); + elementWithInternalClickListeners.element.removeEventListener("click", elementWithInternalClickListeners.clickListener, true); + } + + function resultsAreaMousedownListener(event: Event) { + if ((event.target as Element).matches(exclude)) { + return + } + + const linkElement = (event.target as Element).closest("[href]") + const link = linkElement ? (linkElement as any).href : null + + if (!linkElement || !isValidURL(link) || (linkElement as any).getAttribute("href")[0] === "#") { + return + } + + if (isInternalLink(link)) { + mousedownInternalLinks.add(urlFilter(encodeURI(link))) + } + } + + function resultsAreaClickListener(event: MouseEvent) { + if ((event.target as Element).matches(exclude)) { + return + } + + const linkElement = (event.target as Element).closest("[href]") + const link = linkElement ? (linkElement as any).href : null + + if (linkElement && isValidURL(link) && (linkElement as any).getAttribute("href")[0] !== "#") { + if (isInternalLink(link)) { + if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { + console.log("INTERNAL CLICK!!!!!!!") + } else { + lastClickTime = Date.now() + } + } + } else { + lastClickTime = Date.now() + } + } + + for (const searchAreaElement of searchAreaElements) { + searchAreaElement.addEventListener("mousedown", resultsAreaMousedownListener, true); + searchAreaElement.addEventListener("click", resultsAreaClickListener, true); + elementsWithInternalClickListeners.push({ element: searchAreaElement, mousedownListener: resultsAreaMousedownListener, clickListener: resultsAreaClickListener }) + } +} + + +/** + * A default URL filter for matching against URLs of new tabs opened from a SERP page + * @param {string} url - The URL to filter + * @return {string} The filtered URL + */ +function urlFilter(url: string) { + return url.substring(0, 60) +} + +/** + * Registers listener that will receive the target of navigation of tabs opened from the tab of the SERP page and match the URL + * with clicked elements from the SERP page to determine if an element link was opened in a tab + */ +function registerNewTabListener() { + browser.runtime.onMessage.addListener((message) => { + if (message.type === "NewTabURL") { + console.log(message) + // console.log(mousedownAdLinks) + console.log(mousedownInternalLinks) + const encodedMessageURL = urlFilter(encodeURI(message.url)) + if (mousedownAdLinks.has(encodedMessageURL)) { + console.log("AD CLICK!!!") + numAdClicks++; + return + } + if (mousedownInternalLinks.has(encodedMessageURL)) { + console.log("Internal Click!!!") + numInternalClicks++; + return + } + if (mousedownOrganicLinksMap.has(encodedMessageURL)) { + const mousedownOrganicLinkValue = mousedownOrganicLinksMap.get(encodedMessageURL) + const x = { Ranking: mousedownOrganicLinkValue.index, AttentionTime: getAttentionTime(), Loaded: pageLoaded } + console.log(x) + organicClicks.push(x) + return; + } + } + }); +} + +function getNextElement(element: Element) { + while (element) { + while (element.nextElementSibling && ( + !(element.nextElementSibling as HTMLElement).offsetParent || + !(element.nextElementSibling as HTMLElement).offsetHeight || + !(element.nextElementSibling as HTMLElement).offsetWidth + )) { + element = element.nextElementSibling + } + + if (element.nextElementSibling) { + break + } + + element = element.parentElement + } + + return element.nextElementSibling +} diff --git a/src-ts/content-scripts/interfaces.ts b/src-ts/content-scripts/interfaces.ts new file mode 100644 index 0000000..9814845 --- /dev/null +++ b/src-ts/content-scripts/interfaces.ts @@ -0,0 +1,20 @@ +declare let webScience: { + pageManager: { + pageId, + url, + referrer, + onPageVisitStart, + onPageVisitStop, + onPageAttentionUpdate, + onPageAudioUpdate, + pageHasAttention, + pageHasAudio, + pageVisitStarted, + pageVisitStartTime + } +} + +interface Window { + webScience, + pageManagerHasLoaded: any; +} diff --git a/src-ts/content-scripts/reporting.ts b/src-ts/content-scripts/reporting.ts new file mode 100755 index 0000000..2e8f24a --- /dev/null +++ b/src-ts/content-scripts/reporting.ts @@ -0,0 +1,70 @@ +/** + * This file contains functions related to reporting results that need to be accessible to content scripts and thus must be loaded prior + */ + +// An array of registered search engines +const registeredSearchEngines: string[] = [] + +// A callback executed just before reporting +let preReportCallback = null + +/** + * Called by individual search engine modules to register themselves. + * @param {string} searchEngineName - The search engine of the registering module + * @param {callback} preReportCallbackIn - A function to call immediately before reporting + */ +function registerModule(searchEngineName: string, preReportCallbackIn: () => void = null) { + console.log("Registering " + searchEngineName) + + preReportCallback = preReportCallbackIn + registeredSearchEngines.push(searchEngineName) +} + +/** + * Reports SERP visit data to the background script + */ +function reportResults() { + if (registeredSearchEngines.length === 0) { + console.log("No registered search engines") + return + } else if (registeredSearchEngines.length > 1) { + console.log("More than one search engine registered!") + return + } + + const searchEngine = registeredSearchEngines[0] + + if (preReportCallback) preReportCallback(); + + // If pageIsCorrect is false, we do not report + if (!pageIsCorrect) { + console.log( + "Loaded module " + searchEngine + " is not passing page correctness test" + ) + return + } + + const serpVisitData = { + SearchEngine: searchEngine, + AttentionTime: getAttentionTime(), + PageNum: pageNum, + Attribution: attribution, + AttributionID: attributionID, + OrganicDetails: organicDetails, + OrganicClickDetails: organicClicks, + NumAdResults: numAdResults, + NumAdClicks: numAdClicks, + NumInternalClicks: numInternalClicks, + SearchAreaTopHeight: searchAreaTopHeight, + SearchAreaBottomHeight: searchAreaBottomHeight, + Time: timestamp, + TimeOffset: new Date().getTimezoneOffset(), + } + + // Send data to background page + browser.runtime.sendMessage({ + type: "SerpVisitData", + data: serpVisitData, + }) +} + diff --git a/src-ts/content-scripts/serp-scripts/ask.ts b/src-ts/content-scripts/serp-scripts/ask.ts new file mode 100644 index 0000000..01b7e47 --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/ask.ts @@ -0,0 +1,167 @@ +/** + * Content Scripts for Ask SERP + */ + +(async function () { + const moduleName = "Ask" + + const askFrameToNumAdsObject = {} + let numAskDisplayAds = 0 + + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + // Do not need to determine if it is web search, Ask does not + // have other searches + pageIsCorrect = true + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return Array.from(document.querySelectorAll(".PartialSearchResults-item")); + } + + /** + * @returns {Array} An array of the ad results on the page not in iFrames + */ + function getAdResults() { + return Array.from(document.querySelectorAll(".display-ad-block")) + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + searchAreaTopHeight = getElementTopHeight(document.querySelector(".main")) + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + searchAreaBottomHeight = getElementTopHeight(document.querySelector(".PartialWebPagination ")) + } + + /** + * Determine the page number + */ + function determinePageNum() { + const url = webScience.pageManager.url + const pageNumberFromUrl = getQueryVariable(url, "page"); + if (pageNumberFromUrl) { + pageNum = Number(pageNumberFromUrl) + } else { + pageNum = 1 + } + } + + /** + * @return {Number} the number of ads on page including those within iFrames + */ + function getNumAdResultsAsk() { + let total = 0; + for (const frame in askFrameToNumAdsObject) { + total += askFrameToNumAdsObject[frame] + } + numAdResults = total + numAskDisplayAds; + } + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + try { + const url = new URL(urlString) + return url.hostname.includes("ask.com") + } catch (error) { + return false + } + } + + function determinePageValues(): void { + determinePageIsCorrect(); + determinePageNum(); + + determineSearchAreaTopHeight() + determineSearchAreaBottomHeight(); + + determineOrganicElementsAndAddListeners(getOrganicResults()); + determineAdElementsAndAddListeners(getAdResults()); + + addInternalClickListeners( + ".PartialWebPagination *, .PartialPageFooter *, .PartialSearchResults-item *, .TopAdsPartial *, .BottomAdsPartial *, .PartialRtkAdSlot-ads *", + isInternalLink, + document.querySelectorAll(".main")); + + getAttributionDetailsFromBackground(moduleName); + + if (pageIsCorrect) { + sendQueryToBackground(moduleName, ["q", "query"]); + } + + numAskDisplayAds = document.querySelectorAll(".display-ad-block").length + } + + /** + * Initializes a listener that will get messages from the iFrames containing ads + */ + function initializeFrameListener() { + window.addEventListener("message", (event) => { + try { + if ("type" in event.data && event.data.type === "numAds") { + console.log(`${event.data.frameID}: ${event.data.numAds}`) + askFrameToNumAdsObject[event.data.frameID] = event.data.numAds + } else if ("type" in event.data && event.data.type === "adClick") { + numAdClicks += 1 + console.log(numAdClicks) + } + } catch (error) { + // console.log("Wrong message type") + } + + }, false); + } + + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageLoaded = true + }); + + /** + * Initializes a listener for new tabs that will determine if they correspond to ad clicks + * on the current page + */ + function registerAskNewTabAdListener() { + browser.runtime.onMessage.addListener((message) => { + if (message.type === "NewTabURL") { + if ((message.url as string).includes("g.doubleclick.net") || + (message.url as string).includes("google.com/aclk?") || + (message.url as string).includes("revjet") || + (message.url as string).includes("googleadservices.com")) { + numAdClicks++; + } + } + }); + } + + // Functionality to be executed immediately before reporting + function preReportCallbackAsk() { + getNumAdResultsAsk(); + } + + registerAskNewTabAdListener(); + initializeFrameListener(); + + isInternalLinkFunction = isInternalLink; + initPageManagerListeners(); + registerNewTabListener(); + registerModule(moduleName, preReportCallbackAsk) +})() \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/askgoogleads.ts b/src-ts/content-scripts/serp-scripts/askgoogleads.ts new file mode 100644 index 0000000..9788d8b --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/askgoogleads.ts @@ -0,0 +1,93 @@ +/** + * Content Scripts for Ask SERP + */ + +(async function () { + const id = randomStringID(10); + const bodyObserver = new MutationObserver(_mutations => { + reportAds(); + const adBlocks = document.querySelectorAll("#adBlock"); + + adBlockObserver.disconnect(); + for (let i = 0; i < adBlocks.length; i++) { + adBlockObserver.observe(adBlocks[i], { childList: true }); + } + }); + + const adBlockObserver = new MutationObserver(_mutations => { + reportAds(); + }); + + window.addEventListener("load", function () { + reportAds(); + bodyObserver.observe(document.body, { childList: true }); + }); + + function reportAds() { + const adResults = getAds(); + const count = adResults.length + parent.postMessage({ + type: "numAds", + numAds: count, + frameID: id, + }, "*"); + addElementsAndListeners(adResults); + } + + function randomStringID(length) { + const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".split(""); + + let str = ""; + for (let i = 0; i < length; i++) { + str += chars[Math.floor(Math.random() * chars.length)]; + } + return str; + } + + function getAds() { + const adList: Element[] = [] + const adBlocks = document.querySelectorAll("#adBlock"); + for (let i = 0; i < adBlocks.length; i++) { + const adBlock = adBlocks[i] as HTMLElement; + if (adBlock && adBlock.style.flexDirection === "row") { + adList.push(adBlock) + } else { + for (const adBlockChild of adBlock.children) { + if ((adBlockChild as HTMLElement).offsetParent) { + adList.push((adBlockChild as HTMLElement)) + } + } + } + } + return adList.concat(Array.from(document.querySelectorAll("#google_image_div"))) + } + + const adLinksWithListeners = [] + + function addElementsAndListeners( + adResults: Element[]) { + // Removes any existing listeners from ad elements that we previously added + for (const adLinkWithListeners of adLinksWithListeners) { + adLinkWithListeners.element.removeEventListener("click", adLinkWithListeners.clickListener); + } + + // For each ad element, adds mousedown and click listeners to any elements with an href attribute + // Also adds the listeners to a list so that we can later remove them if we want to refresh these listeners + for (const adResult of adResults) { + adResult.querySelectorAll("[href]").forEach(adLinkElement => { + + function adClickListener(event: MouseEvent) { + if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { + parent.postMessage({ + type: "adClick", + }, "*"); + } + } + + adLinkElement.addEventListener("click", adClickListener); + adLinksWithListeners.push({ element: adLinkElement, clickListener: adClickListener }) + }); + } + } + +})() \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/baidu.ts b/src-ts/content-scripts/serp-scripts/baidu.ts new file mode 100644 index 0000000..6472645 --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/baidu.ts @@ -0,0 +1,153 @@ +/** + * Content Scripts for Baidu SERP + */ + +(async function () { + const moduleName = "Baidu" + + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + const url = new URL(window.location.href) + if (url.hostname === "baidu.com" || url.hostname === "www.baidu.com") { + const tn = getQueryVariable(window.location.href, "tn") + if (!tn || (tn === "baidu")) { + pageIsCorrect = true + return + } + } + pageIsCorrect = false + + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return Array.from(document.querySelectorAll("#content_left > .result")); + } + + /** + * @returns {Array} An array of all the ad results on the page + */ + function getAdResults() { + return getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]") + } + + /** + * @param {string} adResults - an array of the ad results on the page + * @returns {Array} An array of all the ad links in the ad results + */ + function getAdLinks(adResults: Element[]): Element[] { + const adLinks: Element[] = [] + for (const adResult of adResults) { + adLinks.push(...Array.from(adResult.querySelectorAll("[href]")).filter(adLinkElement => { + if ("href" in adLinkElement && !((adLinkElement as any).href as string).includes("javascript")) { + return true + } else { + return false + } + })) + } + return adLinks + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + const element = (document.querySelector("#s_tab") as HTMLElement) + searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + const element = (document.querySelector("#container") as HTMLElement) + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the page number + */ + function determinePageNum(): void { + const pageNumElement = document.querySelector("strong > .pc") + pageNum = pageNumElement ? Number(pageNumElement.textContent) : -1; + } + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + try { + const url = new URL(urlString) + if (url.hostname.includes("baidu.com")) { + if (urlString.includes("baidu.com/other.php")) { + return false + } else { + return true + } + } else { + return false + } + } catch (error) { + return false + } + } + + /** + * Determine all the page values and send the query to the background page + */ + function determinePageValues(): void { + determinePageIsCorrect(); + determinePageNum(); + + determineSearchAreaTopHeight() + determineSearchAreaBottomHeight(); + + determineOrganicElementsAndAddListeners(getOrganicResults()); + determineAdElementsAndAddListeners(getAdResults(), getAdLinks) + + addInternalClickListeners( + "#content_left > .result *", + isInternalLink, + document.querySelectorAll("#container")); + + getAttributionDetailsFromBackground(moduleName); + + if (pageIsCorrect) { + sendQueryToBackground(moduleName, ["wd", "word"]); + } + } + + const bodyObserver = new MutationObserver(function (_, observer) { + const container = document.querySelector("#wrapper_wrapper") + if (container) { + const domObserver = new MutationObserver(function () { + determinePageValues(); + }); + const config = { childList: true }; + domObserver.observe(container, config); + observer.disconnect() + console.log("tracking") + } + }); + const bodyConfig = { childList: true, subtree: true }; + bodyObserver.observe(document, bodyConfig); + + + + // TODO: do we need this? + webScience.pageManager.onPageVisitStart.addListener(() => { + console.debug("We hit this") + determinePageValues(); + }); + + isInternalLinkFunction = isInternalLink; + initPageManagerListeners(); + registerNewTabListener(); + registerModule(moduleName) +})() \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/bing.ts b/src-ts/content-scripts/serp-scripts/bing.ts new file mode 100644 index 0000000..84af9f8 --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/bing.ts @@ -0,0 +1,125 @@ +/** + * Content Scripts for Bing SERP + */ + +(async function () { + const moduleName = "Bing" + + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + // Don't need to determine if it is web search, this is handled by + // content script URL matching + pageIsCorrect = true + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return Array.from(document.querySelectorAll("#b_results > li.b_algo")); + } + + /** + * @returns {Array} An array of all the ad results on the page + */ + function getAdResults() { + return Array.from(document.querySelectorAll(".b_ad > ul > li, .b_adLastChild")) + } + + /** + * @param {string} adResults - an array of the ad results on the page + * @returns {Array} An array of all the ad links in the ad results + */ + function getAdLinks(adResults: Element[]): Element[] { + const adLinks: Element[] = [] + for (const adResult of adResults) { + adLinks.push(...adResult.querySelectorAll("[href]:not(.b_adinfo):not(.b_adinfo [href])")) + } + return adLinks + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + searchAreaTopHeight = (document.querySelector("#b_header") as HTMLElement).offsetHeight + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + const element = (document.querySelector(".b_pag") as HTMLElement) + searchAreaBottomHeight = getElementTopHeight(element) + } + + /** + * Determine the page number + */ + function determinePageNum(): void { + const pageElement = document.querySelector(".sb_pagS_bp") + if (pageElement) { + pageNum = Number(pageElement.textContent) + } else { + pageNum = -1 + } + } + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + try { + const url = new URL(urlString) + if (url.hostname.includes("bing.com")) { + return true + } else { + return false + } + } catch (error) { + return false + } + } + + /** + * Determine all the page values and send the query to the background page + */ + function determinePageValues(): void { + determinePageIsCorrect(); + determinePageNum(); + + determineSearchAreaTopHeight() + determineSearchAreaBottomHeight() + + determineOrganicElementsAndAddListeners(getOrganicResults()); + determineAdElementsAndAddListeners(getAdResults(), getAdLinks); + + addInternalClickListeners( + ".b_pag *, #b_results > li.b_algo *, .b_ad > ul > li *, .b_adLastChild *", + isInternalLink, + document.querySelectorAll("#b_content")); + + getAttributionDetailsFromBackground(moduleName); + + if (pageIsCorrect) { + sendQueryToBackground(moduleName, ["q"]); + } + } + + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageLoaded = true + }); + + isInternalLinkFunction = isInternalLink; + initPageManagerListeners(); + registerNewTabListener(); + registerModule(moduleName) +})() \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/duckduckgo.ts b/src-ts/content-scripts/serp-scripts/duckduckgo.ts new file mode 100644 index 0000000..4ecbdd2 --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/duckduckgo.ts @@ -0,0 +1,194 @@ +/** + * Content Scripts for DuckDuckGo SERP + */ +(async function () { + const moduleName = "DuckDuckGo" + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + pageIsCorrect = !!document.querySelector("#duckbar_static li:first-child .is-active, #duckbar_new .is-active") && !!getQueryVariable(window.location.href, "ia") + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return Array.from(document.querySelectorAll("#links > div[id^='r1-']")); + } + + /** + * @returns {Array} An array of all the ad results on the page + */ + function getAdResults() { + return Array.from(document.querySelectorAll("#ads > div, .result--ad")).filter(adElement => { + return !!adElement.innerHTML && adElement.querySelector(".badge--ad") + }); + } + + /** + * @param {string} adResults - an array of the ad results on the page + * @returns {Array} An array of all the ad links in the ad results + */ + function getAdLinks(adResults: Element[]): Element[] { + const adLinks: Element[] = [] + for (const adResult of adResults) { + adLinks.push(...adResult.querySelectorAll("[href]:not(.report-ad):not(.feedback-prompt [href]):not(.badge--ad__tooltip [href])")) + } + return adLinks + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + try { + searchAreaTopHeight = (document.querySelector("#header_wrapper") as HTMLElement).offsetHeight + } catch (error) { + searchAreaTopHeight = null + } + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + try { + const resultElements = document.querySelectorAll("#links > div:not(.js-result-hidden-el):not(.is-hidden):not(.result--more)") + + const element = resultElements[resultElements.length - 1] as HTMLElement + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + } catch (error) { + searchAreaBottomHeight = null + } + } + + /** + * Determine the page number + * Note: DDG pagination occurs through continuous scroll rather than loading + * a new page for each page of results + */ + function determinePageNum(): void { + const pageElement = getXPathElement("(//div[contains(@class, 'result__pagenum')])[last()]") + if (pageElement) { + pageNum = Number(pageElement.textContent) + } else { + pageNum = 1 + } + } + + /** + * Determine the page number of the given element + */ + function getPageNumForElement(element: Element) { + while (element) { + if (element.classList.contains("has-pagenum")) { + return Number(element.querySelector(".result__pagenum").textContent) + } + element = element.previousElementSibling + } + return 1 + } + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + const url = new URL(urlString) + return url.hostname.includes("duckduckgo.com") + } + + const domObserver = new MutationObserver(function () { + determinePageValues(); + }); + + /** + * Determine all the page values and send the query to the background page + */ + function determinePageValues(): void { + determinePageIsCorrect(); + + if (pageIsCorrect) { + determinePageNum(); + + determineSearchAreaTopHeight(); + determineSearchAreaBottomHeight(); + + determineOrganicElementsAndAddListeners(getOrganicResults(), getPageNumForElement); + determineAdElementsAndAddListeners(getAdResults(), getAdLinks) + + addInternalClickListeners( + ".result--more *, #ads > div *, .result--ad *, #links > div[id^='r1-'] *", + isInternalLink, + document.querySelectorAll("#zero_click_wrapper, #vertical_wrapper, #web_content_wrapper")); + + getAttributionDetailsFromBackground(moduleName); + + if (getQueryVariable(window.location.href, "q")) { + sendQueryToBackground(moduleName, ["q"]); + } else { + const url = new URL(window.location.href) + const query = decodeURIComponent(url.pathname.substr(1).replace(/_/g, " ")); + if (query) { + browser.runtime.sendMessage({ type: "SERPQuery", engine: moduleName, query: query }); + } + } + + domObserver.disconnect(); + const container = document.querySelector("#links") + if (container) { + domObserver.observe(container, { childList: true }); + } + } + } + + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageLoaded = true + }); + + function initPageManagerListenersDDG() { + function initModuleDDG() { + registerAttentionListener(); + webScience.pageManager.onPageVisitStart.addListener((timeStamp) => { + if (!pageIsCorrect) { + reportResults(); + timestamp = timeStamp; + resetAttentionTracking(); + } + determinePageValues(); + }); + + // In case we miss an initial pageVisitStart event + if (webScience.pageManager.pageVisitStarted) { + timestamp = webScience.pageManager.pageVisitStartTime + resetAttentionTracking(); + determinePageValues(); + } + } + + if (("webScience" in window) && ("pageManager" in window.webScience)) { + initModuleDDG(); + } + else { + if (!("pageManagerHasLoaded" in window)) { + window.pageManagerHasLoaded = []; + } + window.pageManagerHasLoaded.push(initModuleDDG); + } + } + + window.addEventListener("unload", () => { + pageVisitEndListener(); + }); + + isInternalLinkFunction = isInternalLink; + initPageManagerListenersDDG(); + registerNewTabListener(); + registerModule(moduleName) +})() diff --git a/src-ts/content-scripts/serp-scripts/ecosia.ts b/src-ts/content-scripts/serp-scripts/ecosia.ts new file mode 100644 index 0000000..6daf7e5 --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/ecosia.ts @@ -0,0 +1,120 @@ +/** + * Content Scripts for Ecosia SERP + */ + +(async function () { + const moduleName = "Ecosia" + + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + // Don't need to determine if it is web search, this is handled by + // content script URL matching + pageIsCorrect = true + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return Array.from(document.querySelectorAll("div.card-web > div.result")); + } + + /** + * @returns {Array} An array of all the ad results on the page + */ + function getAdResults() { + return Array.from(document.querySelectorAll(".card-ad > div, .card-productads > div")); + } + + /** + * @param {string} adResults - an array of the ad results on the page + * @returns {Array} An array of all the ad links in the ad results + */ + function getAdLinks(adResults: Element[]): Element[] { + const adLinks: Element[] = [] + for (const adResult of adResults) { + adLinks.push(...adResult.querySelectorAll("[href]:not(.ad-hint-wrapper [href])")) + } + return adLinks + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + const element = document.querySelector(".navbar-row") as HTMLElement + searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + const element = document.querySelector(".pagination").previousElementSibling as HTMLElement + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the page number + */ + function determinePageNum(): void { + const url = webScience.pageManager.url + const pageNumberFromUrl = getQueryVariable(url, "p"); + if (pageNumberFromUrl) { + pageNum = Number(pageNumberFromUrl) + 1 + } else { + pageNum = 1 + } + } + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + const url = new URL(urlString) + return url.hostname.includes("ecosia.org") + } + + /** + * Determine all the page values and send the query to the background page + */ + function determinePageValues(): void { + console.debug("DETERMINING") + determinePageIsCorrect(); + determinePageNum(); + + determineSearchAreaTopHeight() + determineSearchAreaBottomHeight() + + determineOrganicElementsAndAddListeners(getOrganicResults()); + determineAdElementsAndAddListeners(getAdResults(), getAdLinks); + + addInternalClickListeners( + ".pagination *, div.card-web > div.result *, .card-ad > div, .card-productads > div *", + isInternalLink, + document.querySelectorAll(".results-wrapper")) + + getAttributionDetailsFromBackground(moduleName); + + if (pageIsCorrect) { + sendQueryToBackground(moduleName, ["q"]); + } + } + + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageLoaded = true + }); + + isInternalLinkFunction = isInternalLink; + initPageManagerListeners(); + registerNewTabListener(); + registerModule(moduleName) +})() \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/google.ts b/src-ts/content-scripts/serp-scripts/google.ts new file mode 100644 index 0000000..691e11c --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/google.ts @@ -0,0 +1,160 @@ +/** + * Content Scripts for Google SERP + */ + +(async function () { + const moduleName = "Google" + + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + const tbm = getQueryVariable(window.location.href, "tbm") + if (!tbm) { + const tbs = getQueryVariable(window.location.href, "tbs") + if (!tbs || tbs.startsWith("qdr") || tbs.startsWith("li") || tbs.startsWith("cdr")) { + pageIsCorrect = true + return + } + } + pageIsCorrect = false + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return Array.from(document.querySelectorAll("div[class='g']:not(.related-question-pair div[class='g'])")) + } + + /** + * @returns {Array} An array of all the ad results on the page + */ + function getAdResults() { + // gets all basic keyword ads + const keywordAds = document.querySelectorAll("[aria-label='Ads'] > div") + + // gets all text tags on page that are "Ad" or "Ads" + const adTagElements = getXPathElements("//*[(normalize-space(text()) = 'Ad' or normalize-space(text()) = 'Ads') and not(ancestor::*[@aria-label='Ads'])]/../../../../.."); + + // Creates a list from the non-keyword ads making sure that none of these non-keyword ads contain each other. + // Is necessary because some ads on Google contain multiple ad tags + const nonKeywordAds: Element[] = [] + for (let i = 0; i < adTagElements.length; i++) { + let add = true + for (let j = i + 1; j < adTagElements.length; j++) { + if (adTagElements[i].contains(adTagElements[j]) || adTagElements[j].contains(adTagElements[i])) { + add = false + break; + } + } + if (add === true) { + nonKeywordAds.push(adTagElements[i]) + } + } + + return Array.from(keywordAds).concat(nonKeywordAds) + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + const element = (document.querySelector("#top_nav") as HTMLElement) + searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + let element = document.querySelector("#botstuff") as HTMLElement + if (element.offsetHeight !== 0) { + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + return + } + + element = document.querySelector("#bottomads") as HTMLElement + if (element.offsetHeight !== 0) { + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + return + } + + element = document.querySelector("#res") as HTMLElement + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the page number + */ + function determinePageNum(): void { + const pageElement = getXPathElement("//div[@role='navigation']//tbody/tr/td[normalize-space(text())]") + if (pageElement) { + pageNum = Number(pageElement.textContent) + } else { + pageNum = -1 + } + } + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + try { + const url = new URL(urlString) + if (url.hostname.includes("google.com")) { + if (urlString.includes("google.com/url")) { + const newUrlString = getQueryVariable(urlString, "url") + const newUrl = new URL(newUrlString) + return newUrl.hostname.includes("google.com") + } else if (urlString.includes("google.com/aclk")) { + return false + } else { + return true + } + } else { + return false + } + } catch (error) { + return false + } + } + + /** + * Determine all the page values and send the query to the background page + */ + function determinePageValues(): void { + determinePageIsCorrect(); + determinePageNum(); + determineSearchAreaTopHeight() + determineSearchAreaBottomHeight() + determineOrganicElementsAndAddListeners(getOrganicResults()); + determineAdElementsAndAddListeners(getAdResults()); + + addInternalClickListeners( + "[role=navigation] *, div[class='g']:not(.related-question-pair div[class='g']) *", + isInternalLink, + document.querySelectorAll("#rcnt, #appbar, #atvcap")); + + getAttributionDetailsFromBackground(moduleName); + + if (pageIsCorrect) { + sendQueryToBackground(moduleName, ["q", "query"]); + } + } + + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageLoaded = true + }); + + isInternalLinkFunction = isInternalLink; + initPageManagerListeners(); + registerNewTabListener(); + registerModule(moduleName) +})() \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/yahoo.ts b/src-ts/content-scripts/serp-scripts/yahoo.ts new file mode 100644 index 0000000..d990102 --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/yahoo.ts @@ -0,0 +1,126 @@ +/** + * Content Scripts for Yahoo SERP + */ + +(async function () { + const moduleName = "Yahoo" + + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + const url = new URL(window.location.href) + pageIsCorrect = url.hostname === "search.yahoo.com" || url.hostname === "www.search.yahoo.com" + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return Array.from(document.querySelectorAll("#web > .searchCenterMiddle > li > .algo")); + } + + /** + * @returns {Array} An array of all the ad results on the page + */ + function getAdResults() { + return Array.from(document.querySelectorAll("ol.searchCenterTopAds > li > .ads, ol.searchCenterBottomAds > li > .ads, ol.searchRightTopAds > li, ol.searchRightMiddleAds > li, ol.searchRightBottomAds > li")) + } + + /** + * @param {string} adResults - an array of the ad results on the page + * @returns {Array} An array of all the ad links in the ad results + */ + function getAdLinks(adResults: Element[]): Element[] { + const adLinks: Element[] = [] + for (const adResult of adResults) { + adLinks.push(...adResult.querySelectorAll("[href]:not(.p-abs [href])")) + } + return adLinks + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + const element = (document.querySelector("#ys") as HTMLElement) + searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + const element = (document.querySelector("#main") as HTMLElement) + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the page number + */ + function determinePageNum(): void { + const pageElement = document.querySelector(".pages strong") + if (pageElement) { + pageNum = Number(pageElement.textContent) + } else { + pageNum = -1 + } + } + + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + try { + const url = new URL(urlString) + if (url.hostname.includes("yahoo.com")) { + return true + } else { + return false + } + } catch (error) { + return false + } + } + + /** + * Determine all the page values and send the query to the background page + */ + function determinePageValues(): void { + determinePageIsCorrect(); + determinePageNum(); + + determineSearchAreaTopHeight() + determineSearchAreaBottomHeight() + + determineOrganicElementsAndAddListeners(getOrganicResults()); + determineAdElementsAndAddListeners(getAdResults(), getAdLinks); + + addInternalClickListeners( + ".pagination *, #web > .searchCenterMiddle > li > .algo *, ol.searchCenterTopAds > li > .ads *, ol.searchCenterBottomAds > li > .ads *, ol.searchRightTopAds > li *, ol.searchRightMiddleAds > li *, ol.searchRightBottomAds > li *", + isInternalLink, + document.querySelectorAll("#bd")); + + getAttributionDetailsFromBackground(moduleName); + + if (pageIsCorrect) { + sendQueryToBackground(moduleName, ["p", "q", "query"]); + } + } + + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageLoaded = true + }); + + isInternalLinkFunction = isInternalLink; + initPageManagerListeners(); + registerNewTabListener(); + registerModule(moduleName) +})() \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/yandex.ts b/src-ts/content-scripts/serp-scripts/yandex.ts new file mode 100644 index 0000000..19081d1 --- /dev/null +++ b/src-ts/content-scripts/serp-scripts/yandex.ts @@ -0,0 +1,117 @@ +/** + * Content Scripts for Yandex SERP + */ + +(async function () { + const moduleName = "Yandex" + + /** + * Determine whether the page is a web search results page + */ + function determinePageIsCorrect(): void { + const url = new URL(window.location.href) + pageIsCorrect = !url.pathname.includes("direct") + } + + /** + * @returns {Array} An array of all the organic results on the page + */ + function getOrganicResults() { + return getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]") + } + + /** + * @returns {Array} An array of all the ad results on the page + */ + function getAdResults() { + return getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]"); + } + + /** + * Determine the height of the top of the search results area + */ + function determineSearchAreaTopHeight(): void { + searchAreaTopHeight = (document.querySelector(".serp-header") as HTMLElement).offsetHeight + (document.querySelector(".navigation") as HTMLElement).offsetHeight + } + + /** + * Determine the height of the bottom of the search results area + */ + function determineSearchAreaBottomHeight(): void { + const contentElements = document.querySelectorAll(".main__content .content__left > *:not([class*='pager'])") + const element = contentElements[contentElements.length - 1] as HTMLElement + searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + } + + /** + * Determine the page number + */ + function determinePageNum(): void { + const url = webScience.pageManager.url + const pageNumberFromUrl = getQueryVariable(url, "p"); + if (pageNumberFromUrl) { + pageNum = Number(pageNumberFromUrl) + 1 + } else { + pageNum = 1 + } + } + + /** + * @param {string} urlString - A url + * @returns {boolean} Whether the url links to another page on the search engine + */ + function isInternalLink(urlString: string): boolean { + try { + const url = new URL(urlString) + if (url.hostname.includes("yandex.ru") || url.hostname.includes("yandex.com")) { + return true + } else { + return false + } + } catch (error) { + return false + } + } + + /** + * Determine all the page values and send the query to the background page + */ + function determinePageValues(): void { + determinePageIsCorrect(); + determinePageNum(); + + determineSearchAreaTopHeight() + determineSearchAreaBottomHeight() + + determineOrganicElementsAndAddListeners(getOrganicResults()); + determineAdElementsAndAddListeners(getAdResults()); + + addInternalClickListeners( + ".pager *, .serp-item > .organic *", + isInternalLink, + document.querySelectorAll(".main")); + + getAttributionDetailsFromBackground(moduleName); + + if (pageIsCorrect) { + sendQueryToBackground(moduleName, ["text"]); + } + } + + window.addEventListener("DOMContentLoaded", function () { + console.log("DOMContentLoaded") + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageLoaded = true + }); + + window.addEventListener("unload", pageVisitEndListener); + + isInternalLinkFunction = isInternalLink; + initPageManagerListeners(false); + registerNewTabListener(); + registerModule(moduleName) +})() \ No newline at end of file diff --git a/src-ts/decs.d.ts b/src-ts/decs.d.ts new file mode 100644 index 0000000..067faa4 --- /dev/null +++ b/src-ts/decs.d.ts @@ -0,0 +1 @@ +declare module "@mozilla/web-science" \ No newline at end of file diff --git a/src-ts/types.d.ts b/src-ts/types.d.ts new file mode 100644 index 0000000..dc5abd4 --- /dev/null +++ b/src-ts/types.d.ts @@ -0,0 +1 @@ +declare const browser; \ No newline at end of file diff --git a/src/ExampleModule.js b/src/ExampleModule.js deleted file mode 100644 index b08abd2..0000000 --- a/src/ExampleModule.js +++ /dev/null @@ -1,7 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -export function initialize() { - console.log("example module initialized."); -} diff --git a/src/background.js b/src/background.js deleted file mode 100644 index 527ec73..0000000 --- a/src/background.js +++ /dev/null @@ -1,43 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -import "webextension-polyfill"; - -import { Rally, runStates } from "@mozilla/rally"; - -// Example: import a module. -import { - initialize as exampleInitialize -} from './ExampleModule'; - -const rally = new Rally(); -rally.initialize( - // A sample key id used for encrypting data. - "sample-invalid-key-id", - // A sample *valid* JWK object for the encryption. - { - "kty":"EC", - "crv":"P-256", - "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", - "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", - "kid":"Public key used in JWS spec Appendix A.3 example" - }, - // The following constant is automatically provided by - // the build system. - __ENABLE_DEVELOPER_MODE__, - (newState) => { - if (newState === runStates.RUNNING) { - console.log("The study can run."); - } else { - console.log("The study must stop."); - } - } -).then(resolve => { - // Initialize the study and start it. - // Example: initialize the example module. - exampleInitialize(); -}, reject =>{ - // Do not start the study in this case. Something - // went wrong. -}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..ac870c1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "noUnusedLocals": true, + "noUnusedParameters": true, + "module": "ES2020", + "moduleResolution": "node", + "target": "ES2020", + "lib": [ + "DOM", + "DOM.Iterable" + ], + "noImplicitAny": false, + "sourceMap": false, + "allowJs": false, + "outDir": "src" + }, + "include": [ + "src-ts/**/*.ts" + ] +} \ No newline at end of file From d66c28075dda30d1d204d7f563070e52b97f7662 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Wed, 21 Apr 2021 15:28:00 -0400 Subject: [PATCH 101/399] Update to description of ballot group completion details in QA plan --- searchEngineQA.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/searchEngineQA.md b/searchEngineQA.md index c988b80..84636bb 100644 --- a/searchEngineQA.md +++ b/searchEngineQA.md @@ -74,7 +74,7 @@ View this (and other) output by going to `about:debugging`, then "This Firefox", - Criteria for completion of interventions: - Control group: the intervention is immediately complete. - Notice groups: the intervention is complete when the notice page unloads or upon the next restart of the study extension, whichever occurs first. - - Ballot groups: A ballot page is loaded upon study extension startup if the user has not completed the intervention. The intervention is complete when the participant selects an option on the ballot. If a ballot is loaded three times with no selection from the participant, then the intervention is complete upon the fourth study extension startup. + - Ballot groups: A ballot page is loaded upon study extension startup if the user has not completed the intervention. The intervention is complete when the participant selects an option on the ballot or upon study extension startup if a ballot has already been loaded 3 times for the participant. - Upon the start of the study, complete the randomly chosen intervention and check that the intervention data appears in the output. - Here's an example of the output for the `BallotExtended` group: ```json From bcbcdbd9e298aa636d966d909f7d771aa72886e9 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Wed, 21 Apr 2021 15:33:46 -0400 Subject: [PATCH 102/399] Updated name, author, description in manifest.json and deleted template README --- README.md | 87 --------------------------------------------------- manifest.json | 15 +++++---- 2 files changed, 7 insertions(+), 95 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 8090fca..0000000 --- a/README.md +++ /dev/null @@ -1,87 +0,0 @@ -# Mozilla Rally study template. -The purpose of this repository is to provide a starting point to build a Rally study. It contains: - -1. an example [`manifest.json`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) file. -2. an example background and content script in `src/`. -3. a rollup config file that builds the files needed for the web extension using the source files in `src/` (the background & content scripts). -4. an example integration test that launches a browser & installs the add-on. -5. a `web-ext-config.js` file & an eslint configuration. - -## Getting started - -1. Fork this repository. -2. Customize the [manifest.json](./manifest.json) file: - * change the `name`, `author`, and `description` properties; - * swap the value of `application.gecko.id` (e.g. `ion-basic-study@mozilla.org`) with the one provided you by the Rally team; -3. Customize the [package.json](./package.json) file. At a bare minimum, change the `name`,`description`, `version`, `author`, `repository`, `bugs`, and `homepage` properties; -4. Provide the encryption data to the `Rally` class constructor in the [src/background.js](./src/background.js) file: - -```js -rally.initialize( - // A sample key id used for encrypting data. - "sample-invalid-key-id", - // A sample *valid* JWK object for the encryption. - { - "kty":"EC", - "crv":"P-256", - "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", - "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", - "kid":"Public key used in JWS spec Appendix A.3 example" - }, - // ... other required arguments ... -); -``` - -4. From the forked repository directory, install all the NPM dependencies: - -```bash -fork-dir> npm install . -``` - -5. Test the customized study in Firefox and commit your changes: doing this right after the initial fork provides a nice and clean cutting point with the original repository, which will simplify future updates (if needed). - -## Building upon this template -This template uses [rollup.js](https://rollupjs.org/) as a module bundler and NPM for dependency management. The [manifest.json](./manifest.json) file already includes a sample background scripts. - -Dependencies can be added using the [`npm install`](https://docs.npmjs.com/cli/v6/commands/npm-install) command, using the appropriate `--save-dev` or `--save-prod` switch. This command will take care of automatically updating the [package.json](./package.json) file. - -New modules can be added in the `src/` directory. Modules need to expose the exported functions using the `module.exports` syntax. For example, a class can be exported as follows in a `MyClass.js` file: - -```js -module.exports = class MyClass { - myFunc() { - console.log("Testing!"); - } -} -``` - -And then be imported in another file with `const MyClass = require("./MyClass.js");`. - -Plain functions can be exposed as follows in a `MyFuncs.js` file: - -```js -module.exports = { - myTest() { - //... something! - }, - otherFunc() { - // ... other function! - } -}; -``` - -And then be imported in another file with `const {myTest, otherFunc} = require("./MyFuncs.js");`. - -## Supported NPM commands -The template comes with a set of pre-defined NPM commands (to run as `npm run `) to help study authors: - -* `build`: assembles the final addon. The bundler generated code is saved in the `dist/` directory. -* `dev`: assembles the addon in _developer mode_. In this mode data doesn't get submitted but, instead, is dumped to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). This mode allows for a smoother development process. -* `lint`: run linting on the add-on code. -* `package`: packages the final archive containing the bundled addon, is saved in the `web-ext-artifacts` directory. -* `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. -* `test-integration`: perform the provided integration test for the final addon. -* `watch`: assembles the addon in _developer mode_, then runs the browser and watches the source code for changes, automatically reloading the extension when needed. - -## Manual testing in the browser -To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `npm run start`. diff --git a/manifest.json b/manifest.json index 558705b..c25deae 100644 --- a/manifest.json +++ b/manifest.json @@ -1,21 +1,20 @@ { - "description": "A basic template for a Mozilla Rally Study.", - "author": "Mozilla", + "description": "A study to assess how individuals interact with their search engines.", + "author": "Kartikeya Kandula", "manifest_version": 2, - "name": "Rally Basic Study Template", + "name": "Search Engine Usage Study", "version": "0.3.1", "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", - "applications": { "gecko": { "id": "ion-basic-study@mozilla.org", "strict_min_version": "77.0a1" } }, - "permissions": [], - "background": { - "scripts": ["dist/background.js"] + "scripts": [ + "dist/background.js" + ] } -} +} \ No newline at end of file From 46ce2c3a7fe56f9d2bbc27b587a97d554c04ef08 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Wed, 21 Apr 2021 16:01:59 -0400 Subject: [PATCH 103/399] Added README.md study --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..9e7aa2b --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Search Engine Usage Study +A study to assess how individuals interact with their search engines. + +## Requirements +* [Node.js](https://nodejs.org/en/), available via [Homebrew](https://brew.sh/) on macOS +* [Mozilla web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) + +## Supported NPM commands +The repo comes with a set of pre-defined NPM commands (to run as `npm run `): + +* `compile-typescript`: Compiles the Typescript source code. The compiled code is saved in the `src/` directory. +* `build`: assembles the final addon. The bundler generated code is saved in the `dist/` directory. +* `dev`: assembles the addon in _developer mode_. In this mode data doesn't get submitted but, instead, is dumped to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). This mode allows for a smoother development process. +* `lint`: run linting on the add-on code. +* `package`: packages the final archive containing the bundled addon, is saved in the `web-ext-artifacts` directory. +* `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. +* `test-integration`: perform the provided integration test for the final addon. +* `watch`: assembles the addon in _developer mode_, then runs the browser and watches the source code for changes, automatically reloading the extension when needed. + +## Manual testing in the browser +To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `npm run start`. + +Debugging output is available in Tools → Web Developer → Browser Console. Make sure that the Show Content Messages option is checked. You might find it helpful to set a filter for debugging messages of interest. \ No newline at end of file From 9a5130830188fdd8e0ef4f84f7e5f6f7eb74acf3 Mon Sep 17 00:00:00 2001 From: Robert Helmer Date: Mon, 10 May 2021 09:44:46 -0700 Subject: [PATCH 104/399] Firefox changed the addon install dialog and broke our integration test --- tests/integration/study.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/study.js b/tests/integration/study.js index 902639b..f9781ae 100644 --- a/tests/integration/study.js +++ b/tests/integration/study.js @@ -45,6 +45,6 @@ describe("Study Template integration test example", function () { // switch to browser UI context to interact with Firefox add-on install prompts. await this.driver.setContext(firefox.Context.CHROME); await findAndAct(this.driver, By.css(`[label="Add"]`), e => e.click()); - await findAndAct(this.driver, By.css(`[label="Okay, Got It"]`), e => e.click()); + await findAndAct(this.driver, By.css(`[label="Okay"]`), e => e.click()); }); }); From 7fd50073e634ac6603652b09d6e9fb724d37b02b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:44:34 +0000 Subject: [PATCH 105/399] Bump eslint from 7.22.0 to 7.26.0 Bumps [eslint](https://github.com/eslint/eslint) from 7.22.0 to 7.26.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.22.0...v7.26.0) Signed-off-by: dependabot[bot] --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e29b41..036b351 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.22.0", + "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", @@ -199,9 +199,9 @@ "dev": true }, "node_modules/@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2701,13 +2701,13 @@ } }, "node_modules/eslint": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", - "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -9112,9 +9112,9 @@ } }, "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -11109,13 +11109,13 @@ "dev": true }, "eslint": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", - "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", diff --git a/package.json b/package.json index adb51dc..2d83a5d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.22.0", + "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", From 2921f961b2dbcd185e1b38ca90e493f477e12b48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:48:23 +0000 Subject: [PATCH 106/399] Bump rollup from 2.41.4 to 2.47.0 Bumps [rollup](https://github.com/rollup/rollup) from 2.41.4 to 2.47.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.41.4...v2.47.0) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 036b351..ff44fa8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.4", + "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" @@ -7288,9 +7288,9 @@ } }, "node_modules/rollup": { - "version": "2.41.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", - "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", + "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -14679,9 +14679,9 @@ } }, "rollup": { - "version": "2.41.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", - "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", + "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index 2d83a5d..d20d838 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "geckodriver": "^1.22.2", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.4", + "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", "webextension-polyfill": "^0.7.0" From a1be1b7e0cefe8f7920f474c3d8b43e416c5a54d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:48:27 +0000 Subject: [PATCH 107/399] Bump @rollup/plugin-commonjs from 17.1.0 to 19.0.0 Bumps [@rollup/plugin-commonjs](https://github.com/rollup/plugins/tree/HEAD/packages/commonjs) from 17.1.0 to 19.0.0. - [Release notes](https://github.com/rollup/plugins/releases) - [Changelog](https://github.com/rollup/plugins/blob/master/packages/commonjs/CHANGELOG.md) - [Commits](https://github.com/rollup/plugins/commits/commonjs-v19.0.0/packages/commonjs) Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 036b351..11ecf7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "devDependencies": { "@mozilla/rally": "^0.5.0", - "@rollup/plugin-commonjs": "^17.1.0", + "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.26.0", @@ -237,9 +237,9 @@ "dev": true }, "node_modules/@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", + "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -254,7 +254,7 @@ "node": ">= 8.0.0" }, "peerDependencies": { - "rollup": "^2.30.0" + "rollup": "^2.38.3" } }, "node_modules/@rollup/plugin-node-resolve": { @@ -9144,9 +9144,9 @@ "dev": true }, "@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", + "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", diff --git a/package.json b/package.json index 2d83a5d..d79f7f2 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@mozilla/rally": "^0.5.0", - "@rollup/plugin-commonjs": "^17.1.0", + "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.26.0", From f63e2cd21f8dbbf9b74034fafd72a52ee9a31541 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:51:31 +0000 Subject: [PATCH 108/399] Bump @rollup/plugin-node-resolve from 11.2.0 to 13.0.0 Bumps [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/tree/HEAD/packages/node-resolve) from 11.2.0 to 13.0.0. - [Release notes](https://github.com/rollup/plugins/releases) - [Changelog](https://github.com/rollup/plugins/blob/master/packages/node-resolve/CHANGELOG.md) - [Commits](https://github.com/rollup/plugins/commits/commonjs-v13.0.0/packages/node-resolve) Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e122f31..5275237 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@mozilla/rally": "^0.5.0", "@rollup/plugin-commonjs": "^19.0.0", - "@rollup/plugin-node-resolve": "^11.2.0", + "@rollup/plugin-node-resolve": "^13.0.0", "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", @@ -258,9 +258,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", - "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", + "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -274,7 +274,7 @@ "node": ">= 10.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^2.42.0" } }, "node_modules/@rollup/plugin-replace": { @@ -9159,9 +9159,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", - "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", + "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", diff --git a/package.json b/package.json index 4cdac50..04d5a2c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@mozilla/rally": "^0.5.0", "@rollup/plugin-commonjs": "^19.0.0", - "@rollup/plugin-node-resolve": "^11.2.0", + "@rollup/plugin-node-resolve": "^13.0.0", "@rollup/plugin-replace": "^2.4.1", "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", From 907865dddb83fab365bda3aab24710dc24f88395 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:51:46 +0000 Subject: [PATCH 109/399] Bump @mozilla/rally from 0.5.0 to 0.6.0 Bumps [@mozilla/rally](https://github.com/mozilla-rally/rally-core-addon/tree/HEAD/support) from 0.5.0 to 0.6.0. - [Release notes](https://github.com/mozilla-rally/rally-core-addon/releases) - [Changelog](https://github.com/mozilla-rally/rally-core-addon/blob/master/support/CHANGELOG.md) - [Commits](https://github.com/mozilla-rally/rally-core-addon/commits/HEAD/support) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e122f31..2f3ddd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.3.1", "license": "MPL-2.0", "devDependencies": { - "@mozilla/rally": "^0.5.0", + "@mozilla/rally": "^0.6.0", "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", @@ -231,9 +231,9 @@ } }, "node_modules/@mozilla/rally": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.5.0.tgz", - "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.6.0.tgz", + "integrity": "sha512-NrbQqb7ihocktqeLz4FXmVIb8I7ppfYisFguNnVnndVPVXSXrgXQi/BJnpO6LsXQ8bJE+L62JvDdOsSRlEYx2g==", "dev": true }, "node_modules/@rollup/plugin-commonjs": { @@ -9138,9 +9138,9 @@ } }, "@mozilla/rally": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.5.0.tgz", - "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.6.0.tgz", + "integrity": "sha512-NrbQqb7ihocktqeLz4FXmVIb8I7ppfYisFguNnVnndVPVXSXrgXQi/BJnpO6LsXQ8bJE+L62JvDdOsSRlEYx2g==", "dev": true }, "@rollup/plugin-commonjs": { diff --git a/package.json b/package.json index 4cdac50..a9a7265 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "^0.5.0", + "@mozilla/rally": "^0.6.0", "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^11.2.0", "@rollup/plugin-replace": "^2.4.1", From 03f890e8e49a7cfe9c5f9daffefd8f2182ab4c2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:52:03 +0000 Subject: [PATCH 110/399] Bump webextension-polyfill from 0.7.0 to 0.8.0 Bumps [webextension-polyfill](https://github.com/mozilla/webextension-polyfill) from 0.7.0 to 0.8.0. - [Release notes](https://github.com/mozilla/webextension-polyfill/releases) - [Commits](https://github.com/mozilla/webextension-polyfill/compare/0.7.0...0.8.0) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e122f31..74d5ab8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", - "webextension-polyfill": "^0.7.0" + "webextension-polyfill": "^0.8.0" }, "engines": { "node": ">=14.0.0" @@ -8607,9 +8607,9 @@ } }, "node_modules/webextension-polyfill": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", - "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", + "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", "dev": true }, "node_modules/when": { @@ -15752,9 +15752,9 @@ } }, "webextension-polyfill": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", - "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", + "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", "dev": true }, "when": { diff --git a/package.json b/package.json index 4cdac50..37a8221 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", - "webextension-polyfill": "^0.7.0" + "webextension-polyfill": "^0.8.0" }, "engines": { "node": ">=14.0.0" From ccf234cf1a196012670c326ec354d773abf10ae6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:54:59 +0000 Subject: [PATCH 111/399] Bump geckodriver from 1.22.2 to 1.22.3 Bumps [geckodriver](https://github.com/vladikoff/node-geckodriver) from 1.22.2 to 1.22.3. - [Release notes](https://github.com/vladikoff/node-geckodriver/releases) - [Commits](https://github.com/vladikoff/node-geckodriver/compare/v1.22.2...v1.22.3) Signed-off-by: dependabot[bot] --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 6 +++--- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 11ecf7f..8342baa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,13 +17,13 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.22.2", + "geckodriver": "^1.22.3", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.4", + "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", - "webextension-polyfill": "^0.7.0" + "webextension-polyfill": "^0.8.0" }, "engines": { "node": ">=14.0.0" @@ -3739,9 +3739,9 @@ } }, "node_modules/geckodriver": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", - "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.3.tgz", + "integrity": "sha512-HJvImEC5m/2J7aIn+AdiZml1yTOSFZAb8h8lmZBSUgGSCPdNTd0/6YxBVBsvzpaTuaDQHbMUr+8ikaFKF+Sj/A==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -7288,9 +7288,9 @@ } }, "node_modules/rollup": { - "version": "2.41.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", - "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", + "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -8607,9 +8607,9 @@ } }, "node_modules/webextension-polyfill": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", - "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", + "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", "dev": true }, "node_modules/when": { @@ -11950,9 +11950,9 @@ } }, "geckodriver": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", - "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.3.tgz", + "integrity": "sha512-HJvImEC5m/2J7aIn+AdiZml1yTOSFZAb8h8lmZBSUgGSCPdNTd0/6YxBVBsvzpaTuaDQHbMUr+8ikaFKF+Sj/A==", "dev": true, "requires": { "adm-zip": "0.5.3", @@ -14679,9 +14679,9 @@ } }, "rollup": { - "version": "2.41.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", - "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", + "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", "dev": true, "requires": { "fsevents": "~2.3.1" @@ -15752,9 +15752,9 @@ } }, "webextension-polyfill": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", - "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", + "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", "dev": true }, "when": { diff --git a/package.json b/package.json index d79f7f2..9fab4ce 100644 --- a/package.json +++ b/package.json @@ -21,13 +21,13 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.22.2", + "geckodriver": "^1.22.3", "mocha": "^8.3.2", "npm-run-all": "^4.1.5", - "rollup": "^2.41.4", + "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", "web-ext": "^6.0.0", - "webextension-polyfill": "^0.7.0" + "webextension-polyfill": "^0.8.0" }, "engines": { "node": ">=14.0.0" From 36138886729bb76a62845cd25345b9a0d5055f5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:55:23 +0000 Subject: [PATCH 112/399] Bump @rollup/plugin-replace from 2.4.1 to 2.4.2 Bumps [@rollup/plugin-replace](https://github.com/rollup/plugins) from 2.4.1 to 2.4.2. - [Release notes](https://github.com/rollup/plugins/releases) - [Commits](https://github.com/rollup/plugins/compare/replace-v2.4.1...replace-v2.4.2) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a11cbf..3051241 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@mozilla/rally": "^0.6.0", "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^13.0.0", - "@rollup/plugin-replace": "^2.4.1", + "@rollup/plugin-replace": "^2.4.2", "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", @@ -278,9 +278,9 @@ } }, "node_modules/@rollup/plugin-replace": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz", - "integrity": "sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -9173,9 +9173,9 @@ } }, "@rollup/plugin-replace": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz", - "integrity": "sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", diff --git a/package.json b/package.json index fb8ebe3..713a39f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@mozilla/rally": "^0.6.0", "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^13.0.0", - "@rollup/plugin-replace": "^2.4.1", + "@rollup/plugin-replace": "^2.4.2", "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", From 64c6462f293d642f375c63cfbf490120d33fd508 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:56:18 +0000 Subject: [PATCH 113/399] Bump web-ext from 6.0.0 to 6.1.0 Bumps [web-ext](https://github.com/mozilla/web-ext) from 6.0.0 to 6.1.0. - [Release notes](https://github.com/mozilla/web-ext/releases) - [Commits](https://github.com/mozilla/web-ext/compare/6.0.0...6.1.0) Signed-off-by: dependabot[bot] --- package-lock.json | 1228 +++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 351 insertions(+), 879 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a11cbf..0887453 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "npm-run-all": "^4.1.5", "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", - "web-ext": "^6.0.0", + "web-ext": "^6.1.0", "webextension-polyfill": "^0.8.0" }, "engines": { @@ -219,9 +219,9 @@ } }, "node_modules/@mdn/browser-compat-data": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.1.3.tgz", - "integrity": "sha512-Qdqeox4APsYwAQQSO68D1p75DL9an1wS8b/51m+nH98unN4jbS5bvg22WQrg+TMq2/3Mg/E5zprqfUzJD84qgw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.2.4.tgz", + "integrity": "sha512-jEUurwoeiHOB7SceVnsg3ULxNlf9XxqMfcKNM+eJduPgCcoCnbLi/6og+e764fTAZCcBkqGcWUMhLQXwcqpbJQ==", "dev": true, "dependencies": { "extend": "3.0.2" @@ -451,37 +451,36 @@ } }, "node_modules/addons-linter": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.21.0.tgz", - "integrity": "sha512-1XfqeVbvaEpjRlWJq/Ti0W6bH3RszaIDPeKl+4ZmXCx+C8ovRqy4CJmitqNffLr+2KpY4h5ei2eRygbvJYDyrw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-3.2.0.tgz", + "integrity": "sha512-b6oViLOBgXWsld5L3DJiJSt77DYjVrk2Yam2/gD5e2bsj5xfNvavugwhlJP/MIF0j5yetYT/XFQDXY1Hs0flOA==", "dev": true, "dependencies": { - "@babel/runtime": "7.13.9", - "@mdn/browser-compat-data": "3.1.3", - "addons-scanner-utils": "4.2.0", + "@mdn/browser-compat-data": "3.2.4", + "addons-scanner-utils": "4.4.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", - "cheerio": "1.0.0-rc.5", + "cheerio": "1.0.0-rc.6", "columnify": "1.5.4", "common-tags": "1.8.0", "deepmerge": "4.2.2", - "dispensary": "0.61.0", - "eslint": "7.21.0", + "dispensary": "0.62.0", + "eslint": "7.24.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", "espree": "7.3.1", "esprima": "4.0.1", "fluent-syntax": "0.13.0", "glob": "7.1.6", + "image-size": "0.9.7", "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.11.1", - "postcss": "8.2.7", - "probe-image-size": "6.0.0", + "pino": "6.11.2", + "postcss": "8.2.10", "relaxed-json": "1.0.3", - "semver": "7.3.4", + "semver": "7.3.5", "source-map-support": "0.5.19", "tosource": "1.0.0", "upath": "2.0.1", @@ -492,16 +491,13 @@ "addons-linter": "bin/addons-linter" }, "engines": { - "node": ">=10.13" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=12.21.0" } }, "node_modules/addons-linter/node_modules/eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", @@ -521,7 +517,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -529,7 +525,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -552,10 +548,37 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/addons-linter/node_modules/globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/addons-linter/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/addons-scanner-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.2.0.tgz", - "integrity": "sha512-VKLYNlKg2RCMvmOKmbWlu14hjdyk2vcTHscQGmDlnHfWcf6fAb8E7vY9/ajWdLykVVKZEUiGOoD5EIkIp1FyUA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.4.0.tgz", + "integrity": "sha512-fEUGQIqLYeLl5cV6FFSHU+XFlOYETXqm8jxmYGsVayjZaAqWEkIjTXNu4+pDEiqIkrqjPYP2izjrnhBpHRsyog==", "dev": true, "dependencies": { "@types/yauzl": "2.9.1", @@ -757,92 +780,6 @@ "node": ">=4" } }, - "node_modules/archiver": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", - "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.4" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver/node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "node_modules/archiver/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1036,7 +973,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -1199,6 +1137,7 @@ "url": "https://feross.org/support" } ], + "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -1392,35 +1331,33 @@ } }, "node_modules/cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "version": "1.0.0-rc.6", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz", + "integrity": "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==", "dev": true, "dependencies": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" + "cheerio-select": "^1.3.0", + "dom-serializer": "^1.3.1", + "domhandler": "^4.1.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1" }, "engines": { "node": ">= 0.12" } }, - "node_modules/cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", - "deprecated": "Use cheerio-select instead", + "node_modules/cheerio-select": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", + "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", "dev": true, "dependencies": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" + "css-select": "^4.1.2", + "css-what": "^5.0.0", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0" }, "funding": { "url": "https://github.com/sponsors/fb55" @@ -1626,35 +1563,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/compress-commons": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", - "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1783,49 +1691,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dev": true, - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", @@ -1862,15 +1727,15 @@ } }, "node_modules/css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", + "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" }, "funding": { @@ -1878,9 +1743,9 @@ } }, "node_modules/css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.0.tgz", + "integrity": "sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA==", "dev": true, "engines": { "node": ">= 6" @@ -2251,14 +2116,14 @@ } }, "node_modules/dispensary": { - "version": "0.61.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.61.0.tgz", - "integrity": "sha512-5BK13jrYQ+0bHgZBv7IOQsff5ydeNcnp87w3c7T8x5im21RDFQyiHrTlH0DoouZDyAVHILpat4Ytf7gRuhMRgw==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", + "integrity": "sha512-x8vqPX7owhzDp3Y6t/iOuTuNoWx5hlZKITlzlybETsZoY05cYDubGpwt0soLfRLAWLuxX1lq0lTc/vXtk/CDCw==", "dev": true, "dependencies": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", - "pino": "~6.9.0", + "pino": "~6.11.0", "request": "~2.88.0", "sha.js": "~2.4.4", "source-map-support": "~0.5.4", @@ -2277,29 +2142,6 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, - "node_modules/dispensary/node_modules/pino": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.9.0.tgz", - "integrity": "sha512-9RrRJsKOsgj50oGoR/y4EEVyUjMb/eRu8y4hjwPqM6q214xsxSxY/IKB+aEEv0slqNd4U0RVRfivKfy83UxgUQ==", - "dev": true, - "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", - "flatstr": "^1.0.12", - "pino-std-serializers": "^2.4.2", - "quick-format-unescaped": "^4.0.1", - "sonic-boom": "^1.0.2" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/dispensary/node_modules/pino-std-serializers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", - "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", - "dev": true - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2313,9 +2155,9 @@ } }, "node_modules/dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", + "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", @@ -2327,9 +2169,9 @@ } }, "node_modules/domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ { @@ -2339,12 +2181,12 @@ ] }, "node_modules/domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" @@ -2354,14 +2196,14 @@ } }, "node_modules/domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "dependencies": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -2587,9 +2429,9 @@ } }, "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -3183,15 +3025,6 @@ "node": ">=8" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -3330,9 +3163,9 @@ "dev": true }, "node_modules/fast-redact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", - "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz", + "integrity": "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==", "dev": true, "engines": { "node": ">=6" @@ -3465,18 +3298,15 @@ } }, "node_modules/firefox-profile": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.1.0.tgz", - "integrity": "sha512-n+0jsWhW57i7cAmdHg67W6u5vVSoIJN9D+d7M3w1MzhFLE5X/QxBfP80ksjNvNQDFXGdJQAnW9YupLkzgCxaFQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.0.tgz", + "integrity": "sha512-Z+/6GQ0JEW2eqgj63EYNbgKSgoIz7w1yXlkOWAIRkCNnj50rkfnQIz8uYwJkobxwYQM8vjFIbYiVtYuQV8US2A==", "dev": true, "dependencies": { "adm-zip": "~0.5.x", - "archiver": "~5.2.0", "fs-extra": "~9.0.1", "ini": "~2.0.0", - "lazystream": "~1.0.0", "minimist": "^1.2.5", - "uuid": "^8.3.2", "xml2js": "~0.4.23" }, "bin": { @@ -3617,7 +3447,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "peer": true }, "node_modules/fs-extra": { "version": "9.1.0", @@ -3679,9 +3510,9 @@ "dev": true }, "node_modules/fx-runner": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", - "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.1.0.tgz", + "integrity": "sha512-v/Eo69DDFW30zPdvjCYVXddjVvLy2xGeRbg0S18bPd8kEc0q9VsDoDkjyOxY5lTZsAqcQGy0OWjs3HCfRVBNSg==", "dev": true, "dependencies": { "commander": "2.9.0", @@ -4034,9 +3865,9 @@ "dev": true }, "node_modules/htmlparser2": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", - "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -4048,7 +3879,7 @@ "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.4.4", + "domutils": "^2.5.2", "entities": "^2.0.0" } }, @@ -4125,6 +3956,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4150,7 +3982,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/ignore": { "version": "4.0.6", @@ -4161,6 +3994,21 @@ "node": ">= 4" } }, + "node_modules/image-size": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.9.7.tgz", + "integrity": "sha512-KRVgLNZkr00YGN0qn9MlIrmlxbRhsCcEb1Byq3WKGnIV4M48iD185cprRtaoK4t5iC+ym2Q5qlArxZ/V1yzDgA==", + "dev": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=10.18.0" + } + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -4916,18 +4764,6 @@ "node": ">=8" } }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, "node_modules/lcid": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", @@ -5042,24 +4878,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -5102,12 +4920,6 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, "node_modules/log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -5593,32 +5405,6 @@ "ncp": "bin/ncp" } }, - "node_modules/needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "dev": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6525,16 +6311,16 @@ } }, "node_modules/pino": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", - "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.2.tgz", + "integrity": "sha512-bmzxwbrIPxQUlAuMkF4PWVErUGERU4z37HazlhflKFg08crsNE3fACGN6gPwg5xtKOK47Ux5cZm8YCuLV4wWJg==", "dev": true, "dependencies": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.7", "flatstr": "^1.0.12", "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.1", + "quick-format-unescaped": "4.0.1", "sonic-boom": "^1.0.2" }, "bin": { @@ -6618,13 +6404,13 @@ } }, "node_modules/postcss": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", - "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", + "version": "8.2.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", + "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", "dev": true, "dependencies": { "colorette": "^1.2.2", - "nanoid": "^3.1.20", + "nanoid": "^3.1.22", "source-map": "^0.6.1" }, "engines": { @@ -6635,6 +6421,18 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6653,29 +6451,6 @@ "node": ">=0.10.0" } }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "dev": true, - "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/probe-image-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-6.0.0.tgz", - "integrity": "sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==", - "dev": true, - "dependencies": { - "deepmerge": "^4.0.0", - "needle": "^2.5.2", - "stream-parser": "~0.3.1" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6767,10 +6542,19 @@ "node": ">=0.10.0" } }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, "node_modules/quick-format-unescaped": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.2.tgz", - "integrity": "sha512-HNPqtTHgal9dBpJxibFGgOEmlaTbwEbplrR+oOiWp9aNFlFKBYfkbvvF8VrJPK65okrZuGOwHKLfe7/gT6NWuw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", "dev": true }, "node_modules/ramda": { @@ -7007,15 +6791,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, "node_modules/readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", @@ -7379,9 +7154,9 @@ } }, "node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7592,9 +7367,9 @@ } }, "node_modules/sonic-boom": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", - "integrity": "sha512-/B4tAuK2+hIlR94GhhWU1mJHWk5lt0CEuBvG0kvk1qIAzQc4iB1TieMio8DCZxY+Y7tsuzOxSUDOGmaUm3vXMg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", "dev": true, "dependencies": { "atomic-sleep": "^1.0.0", @@ -7734,43 +7509,19 @@ "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", - "dev": true, - "dependencies": { - "debug": "2" - } - }, - "node_modules/stream-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/stream-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/stream-to-array": { "version": "2.3.0", @@ -8502,14 +8253,14 @@ } }, "node_modules/web-ext": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.0.0.tgz", - "integrity": "sha512-djjTY89kM5ULdKYQo+6TYJSlT+0zNkanW5hQJNybOqGyovUYpH7C3Ns9Pd1cy6ApbmG2VV4Gds9u4yCSuRfHUw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.1.0.tgz", + "integrity": "sha512-f9sBuysFoCJAuS03wRtSBH8dPKQUZvCVT+AoqBW3tBBN6a92P0PyGF2lTwZJ5wrOOvXu7w2DvuAFOU6CnBugFw==", "dev": true, "dependencies": { "@babel/runtime": "7.13.9", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.21.0", + "addons-linter": "3.2.0", "bunyan": "1.8.15", "camelcase": "6.2.0", "chrome-launcher": "0.13.4", @@ -8517,9 +8268,9 @@ "decamelize": "5.0.0", "es6-error": "4.1.1", "event-to-promise": "0.8.0", - "firefox-profile": "4.1.0", + "firefox-profile": "4.2.0", "fs-extra": "9.1.0", - "fx-runner": "1.0.13", + "fx-runner": "1.1.0", "import-fresh": "3.3.0", "mkdirp": "1.0.4", "multimatch": "5.0.0", @@ -8543,7 +8294,7 @@ }, "engines": { "node": ">=12.0.0", - "npm": ">=5.6.0 <7.0.0" + "npm": ">=6.9.0 <7.0.0" } }, "node_modules/web-ext/node_modules/decamelize": { @@ -8934,34 +8685,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } } }, "dependencies": { @@ -9129,9 +8852,9 @@ } }, "@mdn/browser-compat-data": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.1.3.tgz", - "integrity": "sha512-Qdqeox4APsYwAQQSO68D1p75DL9an1wS8b/51m+nH98unN4jbS5bvg22WQrg+TMq2/3Mg/E5zprqfUzJD84qgw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.2.4.tgz", + "integrity": "sha512-jEUurwoeiHOB7SceVnsg3ULxNlf9XxqMfcKNM+eJduPgCcoCnbLi/6og+e764fTAZCcBkqGcWUMhLQXwcqpbJQ==", "dev": true, "requires": { "extend": "3.0.2" @@ -9322,38 +9045,36 @@ "requires": {} }, "addons-linter": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.21.0.tgz", - "integrity": "sha512-1XfqeVbvaEpjRlWJq/Ti0W6bH3RszaIDPeKl+4ZmXCx+C8ovRqy4CJmitqNffLr+2KpY4h5ei2eRygbvJYDyrw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-3.2.0.tgz", + "integrity": "sha512-b6oViLOBgXWsld5L3DJiJSt77DYjVrk2Yam2/gD5e2bsj5xfNvavugwhlJP/MIF0j5yetYT/XFQDXY1Hs0flOA==", "dev": true, "requires": { - "@babel/runtime": "7.13.9", - "@mdn/browser-compat-data": "3.1.3", - "addons-scanner-utils": "4.2.0", + "@mdn/browser-compat-data": "3.2.4", + "addons-scanner-utils": "4.4.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", - "cheerio": "1.0.0-rc.5", + "cheerio": "1.0.0-rc.6", "columnify": "1.5.4", "common-tags": "1.8.0", "deepmerge": "4.2.2", - "dispensary": "0.61.0", - "eslint": "7.21.0", + "dispensary": "0.62.0", + "eslint": "7.24.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", "espree": "7.3.1", "esprima": "4.0.1", "fluent-syntax": "0.13.0", - "fsevents": "2.3.2", "glob": "7.1.6", + "image-size": "0.9.7", "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.11.1", - "postcss": "8.2.7", - "probe-image-size": "6.0.0", + "pino": "6.11.2", + "postcss": "8.2.10", "relaxed-json": "1.0.3", - "semver": "7.3.4", + "semver": "7.3.5", "source-map-support": "0.5.19", "tosource": "1.0.0", "upath": "2.0.1", @@ -9362,9 +9083,9 @@ }, "dependencies": { "eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -9384,7 +9105,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -9392,7 +9113,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -9405,13 +9126,28 @@ "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" } + }, + "globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, "addons-scanner-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.2.0.tgz", - "integrity": "sha512-VKLYNlKg2RCMvmOKmbWlu14hjdyk2vcTHscQGmDlnHfWcf6fAb8E7vY9/ajWdLykVVKZEUiGOoD5EIkIp1FyUA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.4.0.tgz", + "integrity": "sha512-fEUGQIqLYeLl5cV6FFSHU+XFlOYETXqm8jxmYGsVayjZaAqWEkIjTXNu4+pDEiqIkrqjPYP2izjrnhBpHRsyog==", "dev": true, "requires": { "@types/yauzl": "2.9.1", @@ -9564,82 +9300,6 @@ } } }, - "archiver": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", - "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.4" - }, - "dependencies": { - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -9783,7 +9443,8 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "peer": true }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -9915,6 +9576,7 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "peer": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -10065,31 +9727,30 @@ } }, "cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "version": "1.0.0-rc.6", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz", + "integrity": "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==", "dev": true, "requires": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" + "cheerio-select": "^1.3.0", + "dom-serializer": "^1.3.1", + "domhandler": "^4.1.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1" } }, - "cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", + "cheerio-select": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", + "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", "dev": true, "requires": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" + "css-select": "^4.1.2", + "css-what": "^5.0.0", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0" } }, "chokidar": { @@ -10258,31 +9919,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compress-commons": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", - "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -10381,39 +10017,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dev": true, - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", @@ -10441,22 +10044,22 @@ "dev": true }, "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", + "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" } }, "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.0.tgz", + "integrity": "sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA==", "dev": true }, "dashdash": { @@ -10747,14 +10350,14 @@ "dev": true }, "dispensary": { - "version": "0.61.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.61.0.tgz", - "integrity": "sha512-5BK13jrYQ+0bHgZBv7IOQsff5ydeNcnp87w3c7T8x5im21RDFQyiHrTlH0DoouZDyAVHILpat4Ytf7gRuhMRgw==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", + "integrity": "sha512-x8vqPX7owhzDp3Y6t/iOuTuNoWx5hlZKITlzlybETsZoY05cYDubGpwt0soLfRLAWLuxX1lq0lTc/vXtk/CDCw==", "dev": true, "requires": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", - "pino": "~6.9.0", + "pino": "~6.11.0", "request": "~2.88.0", "sha.js": "~2.4.4", "source-map-support": "~0.5.4", @@ -10766,26 +10369,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true - }, - "pino": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.9.0.tgz", - "integrity": "sha512-9RrRJsKOsgj50oGoR/y4EEVyUjMb/eRu8y4hjwPqM6q214xsxSxY/IKB+aEEv0slqNd4U0RVRfivKfy83UxgUQ==", - "dev": true, - "requires": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", - "flatstr": "^1.0.12", - "pino-std-serializers": "^2.4.2", - "quick-format-unescaped": "^4.0.1", - "sonic-boom": "^1.0.2" - } - }, - "pino-std-serializers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", - "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", - "dev": true } } }, @@ -10799,9 +10382,9 @@ } }, "dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", + "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -10810,29 +10393,29 @@ } }, "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "requires": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "dot-prop": { @@ -11022,9 +10605,9 @@ } }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "error-ex": { @@ -11484,12 +11067,6 @@ } } }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "dev": true - }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -11617,9 +11194,9 @@ "dev": true }, "fast-redact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", - "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz", + "integrity": "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==", "dev": true }, "fast-safe-stringify": { @@ -11727,18 +11304,15 @@ } }, "firefox-profile": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.1.0.tgz", - "integrity": "sha512-n+0jsWhW57i7cAmdHg67W6u5vVSoIJN9D+d7M3w1MzhFLE5X/QxBfP80ksjNvNQDFXGdJQAnW9YupLkzgCxaFQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.0.tgz", + "integrity": "sha512-Z+/6GQ0JEW2eqgj63EYNbgKSgoIz7w1yXlkOWAIRkCNnj50rkfnQIz8uYwJkobxwYQM8vjFIbYiVtYuQV8US2A==", "dev": true, "requires": { "adm-zip": "~0.5.x", - "archiver": "~5.2.0", "fs-extra": "~9.0.1", "ini": "~2.0.0", - "lazystream": "~1.0.0", "minimist": "^1.2.5", - "uuid": "^8.3.2", "xml2js": "~0.4.23" }, "dependencies": { @@ -11848,7 +11422,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "peer": true }, "fs-extra": { "version": "9.1.0", @@ -11897,9 +11472,9 @@ "dev": true }, "fx-runner": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", - "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.1.0.tgz", + "integrity": "sha512-v/Eo69DDFW30zPdvjCYVXddjVvLy2xGeRbg0S18bPd8kEc0q9VsDoDkjyOxY5lTZsAqcQGy0OWjs3HCfRVBNSg==", "dev": true, "requires": { "commander": "2.9.0", @@ -12171,14 +11746,14 @@ "dev": true }, "htmlparser2": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", - "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.4.4", + "domutils": "^2.5.2", "entities": "^2.0.0" } }, @@ -12244,6 +11819,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "peer": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -12252,7 +11828,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "peer": true }, "ignore": { "version": "4.0.6", @@ -12260,6 +11837,15 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "image-size": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.9.7.tgz", + "integrity": "sha512-KRVgLNZkr00YGN0qn9MlIrmlxbRhsCcEb1Byq3WKGnIV4M48iD185cprRtaoK4t5iC+ym2Q5qlArxZ/V1yzDgA==", + "dev": true, + "requires": { + "queue": "6.0.2" + } + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -12833,15 +12419,6 @@ "package-json": "^6.3.0" } }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, "lcid": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", @@ -12942,24 +12519,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -13002,12 +12561,6 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -13383,28 +12936,6 @@ "dev": true, "optional": true }, - "needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -14082,16 +13613,16 @@ } }, "pino": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", - "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.2.tgz", + "integrity": "sha512-bmzxwbrIPxQUlAuMkF4PWVErUGERU4z37HazlhflKFg08crsNE3fACGN6gPwg5xtKOK47Ux5cZm8YCuLV4wWJg==", "dev": true, "requires": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.7", "flatstr": "^1.0.12", "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.1", + "quick-format-unescaped": "4.0.1", "sonic-boom": "^1.0.2" } }, @@ -14156,14 +13687,22 @@ } }, "postcss": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", - "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", + "version": "8.2.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", + "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", "dev": true, "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.20", + "nanoid": "^3.1.22", "source-map": "^0.6.1" + }, + "dependencies": { + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + } } }, "prelude-ls": { @@ -14178,23 +13717,6 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "dev": true - }, - "probe-image-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-6.0.0.tgz", - "integrity": "sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==", - "dev": true, - "requires": { - "deepmerge": "^4.0.0", - "needle": "^2.5.2", - "stream-parser": "~0.3.1" - } - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -14268,10 +13790,19 @@ "strict-uri-encode": "^1.0.0" } }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "requires": { + "inherits": "~2.0.3" + } + }, "quick-format-unescaped": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.2.tgz", - "integrity": "sha512-HNPqtTHgal9dBpJxibFGgOEmlaTbwEbplrR+oOiWp9aNFlFKBYfkbvvF8VrJPK65okrZuGOwHKLfe7/gT6NWuw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", "dev": true }, "ramda": { @@ -14464,15 +13995,6 @@ "util-deprecate": "~1.0.1" } }, - "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", @@ -14756,9 +14278,9 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -14939,9 +14461,9 @@ } }, "sonic-boom": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", - "integrity": "sha512-/B4tAuK2+hIlR94GhhWU1mJHWk5lt0CEuBvG0kvk1qIAzQc4iB1TieMio8DCZxY+Y7tsuzOxSUDOGmaUm3vXMg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", "dev": true, "requires": { "atomic-sleep": "^1.0.0", @@ -15071,32 +14593,6 @@ "dev": true, "peer": true }, - "stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", - "dev": true, - "requires": { - "debug": "2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -15681,14 +15177,14 @@ } }, "web-ext": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.0.0.tgz", - "integrity": "sha512-djjTY89kM5ULdKYQo+6TYJSlT+0zNkanW5hQJNybOqGyovUYpH7C3Ns9Pd1cy6ApbmG2VV4Gds9u4yCSuRfHUw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.1.0.tgz", + "integrity": "sha512-f9sBuysFoCJAuS03wRtSBH8dPKQUZvCVT+AoqBW3tBBN6a92P0PyGF2lTwZJ5wrOOvXu7w2DvuAFOU6CnBugFw==", "dev": true, "requires": { "@babel/runtime": "7.13.9", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.21.0", + "addons-linter": "3.2.0", "bunyan": "1.8.15", "camelcase": "6.2.0", "chrome-launcher": "0.13.4", @@ -15696,9 +15192,9 @@ "decamelize": "5.0.0", "es6-error": "4.1.1", "event-to-promise": "0.8.0", - "firefox-profile": "4.1.0", + "firefox-profile": "4.2.0", "fs-extra": "9.1.0", - "fx-runner": "1.0.13", + "fx-runner": "1.1.0", "import-fresh": "3.3.0", "mkdirp": "1.0.4", "multimatch": "5.0.0", @@ -16005,30 +15501,6 @@ "dev": true } } - }, - "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } } } } diff --git a/package.json b/package.json index fb8ebe3..441836b 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "npm-run-all": "^4.1.5", "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.2", - "web-ext": "^6.0.0", + "web-ext": "^6.1.0", "webextension-polyfill": "^0.8.0" }, "engines": { From c6c53f37476564fd4350ced2ec549bf633830393 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 17:59:32 +0000 Subject: [PATCH 114/399] Bump selenium-webdriver from 4.0.0-beta.2 to 4.0.0-beta.3 Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.0.0-beta.2 to 4.0.0-beta.3. - [Release notes](https://github.com/SeleniumHQ/selenium/releases) - [Commits](https://github.com/SeleniumHQ/selenium/commits) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index eeee7fc..5411234 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "mocha": "^8.3.2", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", - "selenium-webdriver": "^4.0.0-beta.2", + "selenium-webdriver": "^4.0.0-beta.3", "web-ext": "^6.1.0", "webextension-polyfill": "^0.8.0" }, @@ -7127,9 +7127,9 @@ } }, "node_modules/selenium-webdriver": { - "version": "4.0.0-beta.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.2.tgz", - "integrity": "sha512-uuNl3T1JjhrXCO4UAAy+iIIgZ/PqgYNiYvy+yfWCY+x2vHH9y7tIdD9a/q1rwbf/5jD/ENwYlVuNj46uIngknA==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.3.tgz", + "integrity": "sha512-R0mGHpQkSKgIWiPgcKDcckh4A6aaK0KTyWxs5ieuiI7zsXQ+Kb6neph+dNoeqq3jSBGyv3ONo2w3oohoL4D/Rg==", "dev": true, "dependencies": { "jszip": "^3.5.0", @@ -14255,9 +14255,9 @@ } }, "selenium-webdriver": { - "version": "4.0.0-beta.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.2.tgz", - "integrity": "sha512-uuNl3T1JjhrXCO4UAAy+iIIgZ/PqgYNiYvy+yfWCY+x2vHH9y7tIdD9a/q1rwbf/5jD/ENwYlVuNj46uIngknA==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.3.tgz", + "integrity": "sha512-R0mGHpQkSKgIWiPgcKDcckh4A6aaK0KTyWxs5ieuiI7zsXQ+Kb6neph+dNoeqq3jSBGyv3ONo2w3oohoL4D/Rg==", "dev": true, "requires": { "jszip": "^3.5.0", diff --git a/package.json b/package.json index e850992..7d0640c 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "mocha": "^8.3.2", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", - "selenium-webdriver": "^4.0.0-beta.2", + "selenium-webdriver": "^4.0.0-beta.3", "web-ext": "^6.1.0", "webextension-polyfill": "^0.8.0" }, From c7d4df155f497d596e409600fd78f95fc4f4cba0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 May 2021 18:01:43 +0000 Subject: [PATCH 115/399] Bump mocha from 8.3.2 to 8.4.0 Bumps [mocha](https://github.com/mochajs/mocha) from 8.3.2 to 8.4.0. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v8.3.2...v8.4.0) Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06fa32f..b075a37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.3", - "mocha": "^8.3.2", + "mocha": "^8.4.0", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.3", @@ -5178,9 +5178,9 @@ } }, "node_modules/mocha": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -12755,9 +12755,9 @@ "dev": true }, "mocha": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", diff --git a/package.json b/package.json index ae6cbb1..81e39f5 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.3", - "mocha": "^8.3.2", + "mocha": "^8.4.0", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", "selenium-webdriver": "^4.0.0-beta.3", From 1b82c69edefd79a824e77755e5a102d6a542d808 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Thu, 13 May 2021 17:39:29 -0400 Subject: [PATCH 116/399] Renaming the example module --- src/ExampleModule.js | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 src/ExampleModule.js diff --git a/src/ExampleModule.js b/src/ExampleModule.js deleted file mode 100644 index b08abd2..0000000 --- a/src/ExampleModule.js +++ /dev/null @@ -1,7 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -export function initialize() { - console.log("example module initialized."); -} From c38d03fea6a0ebb0655f970cfe70921ac00fb69d Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Thu, 13 May 2021 17:39:40 -0400 Subject: [PATCH 117/399] Renaming the example module --- src/exampleModule.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/exampleModule.js diff --git a/src/exampleModule.js b/src/exampleModule.js new file mode 100644 index 0000000..b08abd2 --- /dev/null +++ b/src/exampleModule.js @@ -0,0 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +export function initialize() { + console.log("example module initialized."); +} From 38a70b087eb4335f5e6b20fa36d4b36dfeb0965c Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Thu, 13 May 2021 17:40:46 -0400 Subject: [PATCH 118/399] background.js updates --- src/background.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/background.js b/src/background.js index 80e0900..8641d97 100644 --- a/src/background.js +++ b/src/background.js @@ -11,8 +11,9 @@ import * as webScience from "@mozilla/web-science"; // Example: import a module. import { initialize as exampleInitialize -} from './ExampleModule'; +} from './exampleModule'; +// Initialize the Rally API. const rally = new Rally(); rally.initialize( // A sample key id used for encrypting data. @@ -28,6 +29,7 @@ rally.initialize( // The following constant is automatically provided by // the build system. __ENABLE_DEVELOPER_MODE__, + // A sample callback with the study state. (newState) => { if (newState === runStates.RUNNING) { console.log("The study can run."); @@ -36,9 +38,14 @@ rally.initialize( } } ).then(resolve => { + // The Rally API has been initialized. // Initialize the study and start it. // Example: initialize the example module. exampleInitialize(); + // Example: set a listener for WebScience page navigation events. + webScience.pageNavigation.onPageData.addListener(pageData => { + console.log("WebScience page navigation event fired."); + }); }, reject =>{ // Do not start the study in this case. Something // went wrong. From de43f1e5c97c0036d9b74f49275490fd8007f5f4 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Thu, 13 May 2021 20:50:14 -0400 Subject: [PATCH 119/399] Build system and documentation improvements --- manifest.json | 12 +- package-lock.json | 339 +++++++++++++++++- package.json | 7 +- rollup.config.js | 93 +++-- src/background.js | 42 ++- ...ipt.js => exampleContentScript.content.js} | 0 src/exampleWorkerScript.worker.js | 7 + web-ext-config.js | 3 + 8 files changed, 449 insertions(+), 54 deletions(-) rename src/{content-script.js => exampleContentScript.content.js} (100%) create mode 100644 src/exampleWorkerScript.worker.js diff --git a/manifest.json b/manifest.json index 46f4bec..cc2109a 100644 --- a/manifest.json +++ b/manifest.json @@ -1,9 +1,9 @@ { - "description": "A basic template for a Mozilla Rally Study.", + "description": "A basic template for a Mozilla Rally study.", "author": "Mozilla", "manifest_version": 2, "name": "Rally Study Template", - "version": "0.4.0", + "version": "0.5.0", "homepage_url": "https://github.com/mozilla-rally/study-template", "applications": { @@ -13,11 +13,15 @@ } }, - "permissions": [], + "permissions": [ + "idle", + "webNavigation", + "*://*.mozilla.org/*" + ], "background": { "scripts": ["dist/background.js"] }, - + "incognito": "not_allowed" } diff --git a/package-lock.json b/package-lock.json index b9d8d15..bd6baa8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.3", + "globby": "^11.0.3", "mocha": "^8.4.0", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", @@ -259,6 +260,41 @@ "node": ">=14.0.0" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@rollup/plugin-commonjs": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", @@ -2147,6 +2183,27 @@ "node": ">=0.3.1" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dispensary": { "version": "0.62.0", "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", @@ -3164,6 +3221,23 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fast-json-patch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", @@ -3209,6 +3283,15 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3730,6 +3813,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/got": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", @@ -5092,6 +5204,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -5102,6 +5223,19 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -6289,9 +6423,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true, "engines": { "node": ">=8.6" @@ -6583,6 +6717,26 @@ "inherits": "~2.0.3" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-format-unescaped": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", @@ -7079,6 +7233,16 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -7109,6 +7273,29 @@ "fsevents": "~2.3.1" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -7381,6 +7568,15 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -8914,6 +9110,32 @@ "dexie": "^3.0.3" } }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, "@rollup/plugin-commonjs": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", @@ -10403,6 +10625,23 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "dispensary": { "version": "0.62.0", "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", @@ -11218,6 +11457,20 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, "fast-json-patch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", @@ -11259,6 +11512,15 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -11673,6 +11935,28 @@ "type-fest": "^0.8.1" } }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, "got": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", @@ -12727,6 +13011,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -12734,6 +13024,16 @@ "dev": true, "peer": true }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -13634,9 +13934,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true }, "pidtree": { @@ -13853,6 +14153,12 @@ "inherits": "~2.0.3" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quick-format-unescaped": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", @@ -14245,6 +14551,12 @@ "lowercase-keys": "^1.0.0" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -14263,6 +14575,15 @@ "fsevents": "~2.3.1" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -14503,6 +14824,12 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", diff --git a/package.json b/package.json index 787747f..01beb04 100644 --- a/package.json +++ b/package.json @@ -13,12 +13,6 @@ "watch-bundled": "web-ext run --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "^0.5.0", - "@mozilla/web-science": "^0.1.0", - "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.22.0", "@mozilla/rally": "^0.6.0", "@mozilla/web-science": "^0.1.0", "@rollup/plugin-commonjs": "^19.0.0", @@ -29,6 +23,7 @@ "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", "geckodriver": "^1.22.3", + "globby": "^11.0.3", "mocha": "^8.4.0", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", diff --git a/rollup.config.js b/rollup.config.js index fe9d396..e3ba1be 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -2,9 +2,13 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +// This is the Rollup configuration for the study template. It is +// part of the build system, and you should not have to modify it. + import commonjs from "@rollup/plugin-commonjs"; import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; +import globby from "globby"; /** * Helper to detect developer mode. @@ -16,37 +20,58 @@ function isDevMode(cliArgs) { return Boolean(cliArgs["config-enable-developer-mode"]); } -export default (cliArgs) => [ - { - input: "src/background.js", - output: { - file: "dist/background.js", - sourcemap: isDevMode(cliArgs) ? "inline" : false, - }, - plugins: [ - replace({ - // In Developer Mode, the study does not submit data and - // gracefully handles communication errors with the Core - // Add-on. - __ENABLE_DEVELOPER_MODE__: isDevMode(cliArgs), - }), - resolve({ - browser: true, - }), - commonjs(), - ], - }, - { - input: "src/content-script.js", - output: { - file: "dist/content-script.js", - sourcemap: isDevMode(cliArgs) ? "inline" : false, - }, - plugins: [ - resolve({ - browser: true, - }), - commonjs(), - ], - }, -]; +export default (cliArgs) => { + // Configuration for the main background script, src/background.js. + // The script will be output to dist/background.js with any module + // dependencies (your own modules or modules from NPM) bundled in. + const rollupConfig = [ + { + input: "src/background.js", + output: { + file: "dist/background.js", + sourcemap: isDevMode(cliArgs) ? "inline" : false, + }, + plugins: [ + replace({ + // In Developer Mode, the study does not submit data and + // gracefully handles communication errors with the Core + // Add-on. + __ENABLE_DEVELOPER_MODE__: isDevMode(cliArgs), + }), + resolve({ + browser: true, + }), + commonjs(), + ], + } + ]; + + // Configuration for content scripts (src/**/*.content.js) and + // worker scripts (src/**/*.worker.js). These files will be + // output to dist/ with the same relative path they have in + // src/, but with any module dependencies (your own modules or + // modules from npm) bundled in. We provide this configuration + // because content scripts and worker scripts have separate + // execution environments from background scripts, and a + // background script might want to reference the bundled + // scripts (e.g., browser.contentScripts.register() or new + // Worker()). + const scriptPaths = globby.sync([ `src/**/*.content.js`, `src/**/*.worker.js` ]); + for(const scriptPath of scriptPaths) { + rollupConfig.push({ + input: scriptPath, + output: { + file: `dist/${scriptPath.slice("src/".length)}`, + format: "iife" + }, + plugins: [ + commonjs(), + resolve({ + browser: true + }) + ] + }); + } + + return rollupConfig; +} diff --git a/src/background.js b/src/background.js index 8641d97..37677c6 100644 --- a/src/background.js +++ b/src/background.js @@ -2,15 +2,23 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +// This is the main background script for the study template. +// The build system will bundle dependencies into this script +// and output the bundled scripr to dist/background.js. + +// Import the WebExtensions polyfill, for cross-browser compatibility. +// Note that Rally and WebScience currently only support Firefox. import "webextension-polyfill"; +// Import the Rally API. import { Rally, runStates } from "@mozilla/rally"; +// Import the WebScience API. import * as webScience from "@mozilla/web-science"; // Example: import a module. import { - initialize as exampleInitialize + initialize as exampleModuleInitialize } from './exampleModule'; // Initialize the Rally API. @@ -40,13 +48,39 @@ rally.initialize( ).then(resolve => { // The Rally API has been initialized. // Initialize the study and start it. + // Example: initialize the example module. - exampleInitialize(); - // Example: set a listener for WebScience page navigation events. + exampleModuleInitialize(); + + // Example: set a listener for WebScience page navigation events on + // *://*.mozilla.org/* pages. Note that the manifest origin + // permissions currently only include *://*.mozilla.org/*. You should + // update the manifest permissions as needed for your study. webScience.pageNavigation.onPageData.addListener(pageData => { console.log("WebScience page navigation event fired."); + }, { + matchPatterns: [ "*://*.mozilla.org/*" ] }); -}, reject =>{ + + // Example: register a content script for *://*.mozilla.org/* pages + // Note that the content script has the same relative path in dist/ + // that it has in src/. The content script can include module + // dependencies (either your own modules or modules from npm), and + // they will be automatically bundled into the content script by + // the build system. + browser.contentScripts.register({ + js: [ { file: "dist/exampleContentScript.content.js" } ], + matches: [ "*://*.mozilla.org/*" ] + }); + + // Example: launch a Web Worker, which can handle tasks on another + // thread. Note that the worker script has the same relative path in + // dist/ that it has in src/. The worker script can include module + // dependencies (either your own modules or modules from npm), and + // they will be automatically bundled into the worker script by the + // build system. + new Worker(browser.runtime.getURL("dist/exampleWorkerScript.worker.js")); +}, reject => { // Do not start the study in this case. Something // went wrong. }); diff --git a/src/content-script.js b/src/exampleContentScript.content.js similarity index 100% rename from src/content-script.js rename to src/exampleContentScript.content.js diff --git a/src/exampleWorkerScript.worker.js b/src/exampleWorkerScript.worker.js new file mode 100644 index 0000000..07ed66d --- /dev/null +++ b/src/exampleWorkerScript.worker.js @@ -0,0 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// ... Add more implementation here! + +console.debug("Running worker script"); diff --git a/web-ext-config.js b/web-ext-config.js index 946535d..b121856 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -2,6 +2,9 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +// This is the web-ext configuration for the study template. It is +// part of the build system, and you should not have to modify it. + module.exports = { // Global options: verbose: true, From 4533c45be680c997ccbba53a466baed8ea29d9bf Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 18:16:18 -0400 Subject: [PATCH 120/399] Adding start-dev command --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 01beb04..b3c6601 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "lint": "eslint . && web-ext lint", "package": "npm run build && web-ext build --overwrite-dest --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", "start": "npm run build && web-ext run", + "start-dev": "npm run dev && web-ext run", "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"", "watch": "npm-run-all --parallel watch-raw watch-bundled", "watch-raw": "npm run dev -- -w", From 89035082e1d5a855f2b58beefccb11445a6c15a1 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 18:27:11 -0400 Subject: [PATCH 121/399] Update README.md --- README.md | 155 ++++++++++++++++++++++++------------------------------ 1 file changed, 68 insertions(+), 87 deletions(-) diff --git a/README.md b/README.md index 8090fca..226ca45 100644 --- a/README.md +++ b/README.md @@ -1,87 +1,68 @@ -# Mozilla Rally study template. -The purpose of this repository is to provide a starting point to build a Rally study. It contains: - -1. an example [`manifest.json`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) file. -2. an example background and content script in `src/`. -3. a rollup config file that builds the files needed for the web extension using the source files in `src/` (the background & content scripts). -4. an example integration test that launches a browser & installs the add-on. -5. a `web-ext-config.js` file & an eslint configuration. - -## Getting started - -1. Fork this repository. -2. Customize the [manifest.json](./manifest.json) file: - * change the `name`, `author`, and `description` properties; - * swap the value of `application.gecko.id` (e.g. `ion-basic-study@mozilla.org`) with the one provided you by the Rally team; -3. Customize the [package.json](./package.json) file. At a bare minimum, change the `name`,`description`, `version`, `author`, `repository`, `bugs`, and `homepage` properties; -4. Provide the encryption data to the `Rally` class constructor in the [src/background.js](./src/background.js) file: - -```js -rally.initialize( - // A sample key id used for encrypting data. - "sample-invalid-key-id", - // A sample *valid* JWK object for the encryption. - { - "kty":"EC", - "crv":"P-256", - "x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", - "y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", - "kid":"Public key used in JWS spec Appendix A.3 example" - }, - // ... other required arguments ... -); -``` - -4. From the forked repository directory, install all the NPM dependencies: - -```bash -fork-dir> npm install . -``` - -5. Test the customized study in Firefox and commit your changes: doing this right after the initial fork provides a nice and clean cutting point with the original repository, which will simplify future updates (if needed). - -## Building upon this template -This template uses [rollup.js](https://rollupjs.org/) as a module bundler and NPM for dependency management. The [manifest.json](./manifest.json) file already includes a sample background scripts. - -Dependencies can be added using the [`npm install`](https://docs.npmjs.com/cli/v6/commands/npm-install) command, using the appropriate `--save-dev` or `--save-prod` switch. This command will take care of automatically updating the [package.json](./package.json) file. - -New modules can be added in the `src/` directory. Modules need to expose the exported functions using the `module.exports` syntax. For example, a class can be exported as follows in a `MyClass.js` file: - -```js -module.exports = class MyClass { - myFunc() { - console.log("Testing!"); - } -} -``` - -And then be imported in another file with `const MyClass = require("./MyClass.js");`. - -Plain functions can be exposed as follows in a `MyFuncs.js` file: - -```js -module.exports = { - myTest() { - //... something! - }, - otherFunc() { - // ... other function! - } -}; -``` - -And then be imported in another file with `const {myTest, otherFunc} = require("./MyFuncs.js");`. - -## Supported NPM commands -The template comes with a set of pre-defined NPM commands (to run as `npm run `) to help study authors: - -* `build`: assembles the final addon. The bundler generated code is saved in the `dist/` directory. -* `dev`: assembles the addon in _developer mode_. In this mode data doesn't get submitted but, instead, is dumped to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). This mode allows for a smoother development process. -* `lint`: run linting on the add-on code. -* `package`: packages the final archive containing the bundled addon, is saved in the `web-ext-artifacts` directory. -* `start`: build the addon and run a Firefox instance and side-load the add-on for manual testing or debugging purposes. -* `test-integration`: perform the provided integration test for the final addon. -* `watch`: assembles the addon in _developer mode_, then runs the browser and watches the source code for changes, automatically reloading the extension when needed. - -## Manual testing in the browser -To test, either load as a temporary add-on in Firefox (`about:debugging`) or Chrome ("developer mode" in `chrome://extensions`) or use `npm run start`. +# Rally + WebScience Study Template +This repository provides a template for building browser-based research studies with the [Rally](https://rally.mozilla.org/) platform and the [WebScience](https://github.com/mozilla-rally/web-science/) library. + +## Background Material + +Before working with this template, we recommend familiarizing yourself with the following concepts. + +* Implementing Research Studies as Browser Extensions + * [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Introduction) - The scripting language commonly used for web applications, including browser extensions. Studies on Rally are implemented in JavaScript. If you haven't worked with JavaScript in awhile, we especially recommend catching up on [modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), [promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), and [web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers), since those features are used in Rally, WebScience, and this template. + * [WebExtensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions) - An API for building browser extensions. Each study on Rally is a separate extension. If you haven't worked with WebExtensions in awhile, we recommend reviewing the [structure of browser extensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension), including [manifests](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json), [background scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#background_scripts), and [content scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts). + * [WebScience](https://github.com/mozilla-rally/web-science/) - A library for building browser-based research studies. WebScience provides production-quality functionality that is commonly required, difficult to implement correctly, and difficult to maintain. + * [Rally.js](https://github.com/mozilla-rally/rally-core-addon/tree/master/support) - A library for integrating your study with the Rally platform. Rally.js communicates with a separate Rally core extension, which manages user enrollment and submits telemetry pings. +* Building and Testing Research Study Browser Extensions + * [ESLint](https://eslint.org/) - A linter for JavaScript. This template invokes ESLint with Node.js commands; you should not have to manually run ESLint or modify the ESLint configuration. + * [Node.js](https://nodejs.org/) - A JavaScript runtime for web applications. This template uses Node.js in two primary ways. First, Node.js provides a convenient toolkit for managing JavaScript library dependencies (see [`npm`](https://docs.npmjs.com/cli/v7/commands/npm) and [`package.json`](https://docs.npmjs.com/cli/v7/configuring-npm/package-json)). You can easily integrate Node.js packages from the [npm public registry](https://www.npmjs.com/). Second, Node.js enables running build and test commands that are similar to makefile targets (see [package scripts](https://docs.npmjs.com/cli/v7/using-npm/scripts) and [`npm run`](https://docs.npmjs.com/cli/v7/commands/npm-run-script)). You should not have to modify these Node.js commands. Note that this template does _not_ use Node.js as a runtime for research studies. + * [Rollup](https://rollupjs.org/) - A module bundler for JavaScript. This template uses Rollup to merge module dependencies (either your own modules or npm modules) into a study extension and to remove unused code from dependencies. The template also enables using module depencies in content and worker scripts. You should not have to modify the Rollup configuration of the template. + * [web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) - A toolkit for building and testing browser extensions. This template invokes web-ext with Node.js commands; you should not have to modify the web-ext configuration. + +## Template Contents + +This template includes the following files. + +* `.eslintignore` and `.eslintrc` - ESLint configuration. You should not have to modify these files. +* `.gitignore` - Git configuration. You should not not have to modify this file. +* `CODE_OF_CONDUCT.md` - The [code of conduct](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-code-of-conduct-to-your-project) for the study extension. You should update this file to reflect your code of conduct. +* `LICENSE` - The [license](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository) for the study extension. You can use the provided license or your own license, so long as your license is compatible with Rally requirements and the licenses of dependencies. +* `README.md` - A [README](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-readmes) for the study extension. You should update this file to describe your study and its implementation. +* `manifest.json` - A WebExtensions [manifest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) for the study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields for your study. You can also update [`permissions`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) as necessary for implementing your study. The Rally team will provide a value for the `application.gecko.id` field. +* `package.json` - A Node.js [package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) for the study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. You should not have to update the `scripts` field, which specifies a set of commands that function like makefile targets. You can add `dependencies` for your study implementation, either manually or with `npm install`. Note that you must use [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install dependencies and [`npm update`](https://docs.npmjs.com/cli/v7/commands/npm-update) to update dependencies. +* `package-lock.json` - A file automatically generated by Node.js package management that [describes package dependencies](https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json). You should not have to manually edit this file. +* `rollup.config` - A Rollup configuration for the study. You should not have to modify this file. +* `web-ext.config` - A web-ext configuration for the study. You should not have to modify this file. +* `.circleci/` + * `config.yml` - A basic CircleCI configuration for the study template. You can use this file as a starting point for your own tests, or you can safely remove the file. +* `.github/` + * `dependabot.yml` - A GitHub dependency update configuration. You can use this file for managing dependency updates, or you can safely remove the file. +* `src/` + * `background.js` - The main background script for the study. The build system will bundle this script and output to `dist/background.js`. Note that the WebExtensions manifest already specifies `dist/background.js` as a background script for the extension. + * `exampleContentScript.content.js` - An example content script for the study. The build system automatically recognizes a `*.content.js` file as a content script, bundles it separately from the main background script, and outputs to the same relative path in `dist/` that the file has in `src/`. The build system will output this content script file, for example, to `dist/exampleContentScript.content.js`. We provide this functionality so that study content scripts can include module dependencies. + * `exampleModule.js` - An example module for the study. The build system will bundle this module into the main background script; there is no separate output in `dist/`. + * `exampleWorkerScript.worker.js` - An example web worker script for the study. The build system treats `*.worker.js` files the same way as `*.content.js` files. +* `tests/integration/` - A basic integration test for the study template. You can use these files as a starting point for your own tests, or you can safely remove the files. + +## Getting Started + +1. Install Node.js, optionally using a [package manager](https://nodejs.org/en/download/package-manager/) such as [Homebrew](https://brew.sh/) on macOS or `apt-get` on Ubuntu Linux. Check that the `npm` command runs. +2. Use the `npm` command to install the ESLint, Rollup, and web-ext command-line tools (`npm install -g eslint`, `npm install -g rollup`, and `npm install -g web-ext`). Check that the `eslint`, `rollup`, and `web-ext` commands run. +3. Fork this repository. +4. Update the WebExtensions manifest ([manifest.json](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the `application.gecko.id` field. +5. Update the Node.js package configuration [package.json](./package.json) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. +6. In the forked repository, run `npm install` to install Node.js package dependencies. A new `node_modules/` folder will be automatically populated with these dependencies. +7. Run `npm run start`. The build system will build your study extension and launch Firefox with the study extension installed. +8. Commit your study extension to a repository! You now have a clean and functional starting point for implementing your study. If this template is updated in future, you can also easily merge those updates into your study. + +## Build System Commands +This template comes with a set of predefined Node.js commands, which function similar to makefile targets. These commands should help you with study implementation, debugging, testing, and deployment. You run each command with `npm run `. + +* `build` - Bundles the study extension. Output is in the `dist/` directory. +* `dev` - Bundles the study extension in _developer mode_. In developer mode, Rally.js ignores whether the Rally core extension is installed and outputs telemetry pings to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). You should typically use developer mode when implementing and testing your study. +* `lint`: Run linting on the study extension. +* `package`: Build the study extension (`build`), then package the built study into an archive for distribution. Output is in the `web-ext-artifacts/` directory. +* `start`: Build the study extension (`build`), then launch Firefox with the study extension installed. +* `start-dev`: Build the study extension in _developer mode_ (`dev`), then launch Firefox with the study extension installed. +* `test-integration`: Packages the study extension (`package`), then runs the provided integration test. +* `watch`: Build the study extension in _developer mode_ (`dev`), launch Firefox with the study extension installed, automatically rebuild the study if a file changes, and automatically reload the study in Firefox if the study is rebuilt. You should typically use `watch` for study extension testing and debugging. + +## Debugging the Study Extension +In Firefox, navigate to the debugging page (`about:debugging`), click This Firefox, then click Inspect on the study extension. You can now debug the study extension's background script with the full set of Firefox debugging tools. If you'd like to debug a study content script, open Web Developer Tools on a page where the content script is running. From 3549bbc23d9949cc9521ca92af8a3e1fc7fa86f4 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 20:44:31 -0400 Subject: [PATCH 122/399] Removing Nightly and experiments from web-ext config --- web-ext-config.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web-ext-config.js b/web-ext-config.js index b121856..257036f 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -12,10 +12,6 @@ module.exports = { build: { overwriteDest: true, }, - run: { - firefox: "nightly", - pref: ["extensions.experiments.enabled=true"], - }, ignoreFiles: [ "bin", "docs", From 4ed72ee348115fb42da6629718f296708b0df7d7 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 20:59:05 -0400 Subject: [PATCH 123/399] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 226ca45..9d09f3b 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ This template includes the following files. 3. Fork this repository. 4. Update the WebExtensions manifest ([manifest.json](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the `application.gecko.id` field. 5. Update the Node.js package configuration [package.json](./package.json) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. -6. In the forked repository, run `npm install` to install Node.js package dependencies. A new `node_modules/` folder will be automatically populated with these dependencies. -7. Run `npm run start`. The build system will build your study extension and launch Firefox with the study extension installed. +6. In the forked repository, run `npm install` to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. +7. Run `npm run start-dev`. The build system will build your study extension and launch Firefox with the study extension installed. 8. Commit your study extension to a repository! You now have a clean and functional starting point for implementing your study. If this template is updated in future, you can also easily merge those updates into your study. ## Build System Commands @@ -64,5 +64,6 @@ This template comes with a set of predefined Node.js commands, which function si * `test-integration`: Packages the study extension (`package`), then runs the provided integration test. * `watch`: Build the study extension in _developer mode_ (`dev`), launch Firefox with the study extension installed, automatically rebuild the study if a file changes, and automatically reload the study in Firefox if the study is rebuilt. You should typically use `watch` for study extension testing and debugging. -## Debugging the Study Extension -In Firefox, navigate to the debugging page (`about:debugging`), click This Firefox, then click Inspect on the study extension. You can now debug the study extension's background script with the full set of Firefox debugging tools. If you'd like to debug a study content script, open Web Developer Tools on a page where the content script is running. +## Debugging the Study Extension in Firefox +* Debugging the Background Script - Navigate to the debugging page (`about:debugging`), click This Firefox, then click Inspect on the study extension. You can now debug the study extension's background script with the full set of Firefox debugging tools, including a console and debugger. +* Debugging a Content Script - On a page where the content script is running, open Web Developer tools. The console will include output from the content script and you can also select the content script in the debugger. From 1aefb6b814dc4c70650c02430dbf804633dc2cef Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 21:11:51 -0400 Subject: [PATCH 124/399] Adding browser console and about:debugging to web-ext config --- web-ext-config.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web-ext-config.js b/web-ext-config.js index 257036f..6a8201f 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -12,6 +12,12 @@ module.exports = { build: { overwriteDest: true, }, + run: { + browserConsole: true, + startUrl: [ + "about:debugging#/runtime/this-firefox" + ] + }, ignoreFiles: [ "bin", "docs", From 0079eb279c2bc47b618b0dd07f2f951c9fe6e5b3 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 21:30:26 -0400 Subject: [PATCH 125/399] Easier debugging in web-ext config --- web-ext-config.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/web-ext-config.js b/web-ext-config.js index 6a8201f..65e74c4 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -5,6 +5,17 @@ // This is the web-ext configuration for the study template. It is // part of the build system, and you should not have to modify it. +// Try to read the extension ID from the WebExtensions manifest. +let extensionID = null; +try { + const fs = require("fs"); + const manifestJSON = fs.readFileSync("./manifest.json"); + const manifestObj = JSON.parse(manifestJSON); + extensionID = manifestObj.applications.gecko.id; +} +catch(error) { +} + module.exports = { // Global options: verbose: true, @@ -15,7 +26,7 @@ module.exports = { run: { browserConsole: true, startUrl: [ - "about:debugging#/runtime/this-firefox" + extensionID !== null ? `about:devtools-toolbox?id=${extensionID}&type=extension`: "about:debugging#/runtime/this-firefox" ] }, ignoreFiles: [ From 1c2ca2ca1079064a922ab0c7fe92902d323f7924 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 21:36:30 -0400 Subject: [PATCH 126/399] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9d09f3b..650991b 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ This template includes the following files. * `package.json` - A Node.js [package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) for the study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. You should not have to update the `scripts` field, which specifies a set of commands that function like makefile targets. You can add `dependencies` for your study implementation, either manually or with `npm install`. Note that you must use [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install dependencies and [`npm update`](https://docs.npmjs.com/cli/v7/commands/npm-update) to update dependencies. * `package-lock.json` - A file automatically generated by Node.js package management that [describes package dependencies](https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json). You should not have to manually edit this file. * `rollup.config` - A Rollup configuration for the study. You should not have to modify this file. -* `web-ext.config` - A web-ext configuration for the study. You should not have to modify this file. +* `web-ext.config` - A web-ext configuration for the study, which will automatically open the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and background script debugging page on browser startup. You should not have to modify this file. * `.circleci/` * `config.yml` - A basic CircleCI configuration for the study template. You can use this file as a starting point for your own tests, or you can safely remove the file. * `.github/` @@ -65,5 +65,5 @@ This template comes with a set of predefined Node.js commands, which function si * `watch`: Build the study extension in _developer mode_ (`dev`), launch Firefox with the study extension installed, automatically rebuild the study if a file changes, and automatically reload the study in Firefox if the study is rebuilt. You should typically use `watch` for study extension testing and debugging. ## Debugging the Study Extension in Firefox -* Debugging the Background Script - Navigate to the debugging page (`about:debugging`), click This Firefox, then click Inspect on the study extension. You can now debug the study extension's background script with the full set of Firefox debugging tools, including a console and debugger. -* Debugging a Content Script - On a page where the content script is running, open Web Developer tools. The console will include output from the content script and you can also select the content script in the debugger. +* Debugging the Background Script - Navigate to the browser debugging page (`about:debugging`), click This Firefox, then click Inspect on the study extension. You are now on a background script debugging page where you can use the full set of [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools), including a [Web Console](https://developer.mozilla.org/en-US/docs/Tools/Web_Console), [JavaScript Debugger](https://developer.mozilla.org/en-US/docs/Tools/Debugger), and [Network Monitor](https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor). Background script console output will also appear on the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). The template's web-ext configuration will automatically open both the background script debugging page and the Browser Console on browser startup. +* Debugging a Content Script - On a page where the content script is running, open [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools). The [Web Console](https://developer.mozilla.org/en-US/docs/Tools/Web_Console) will include output from the content script, and you can select the content script in the [JavaScript Debugger](https://developer.mozilla.org/en-US/docs/Tools/Debugger). Content script console output will also appear on the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). From a54f9a838fd098430bf35ea3f72cd886e008aa35 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 21:39:35 -0400 Subject: [PATCH 127/399] Linter fix --- web-ext-config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web-ext-config.js b/web-ext-config.js index 65e74c4..d7a4f71 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -14,6 +14,8 @@ try { extensionID = manifestObj.applications.gecko.id; } catch(error) { + // If this block is empty, there is a linter error. + extensionID = null; } module.exports = { From a5d44351d35e5a3677fb97dd33c567bf0bf9cc19 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sat, 15 May 2021 21:45:11 -0400 Subject: [PATCH 128/399] Update README.md --- README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 650991b..21120c3 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Before working with this template, we recommend familiarizing yourself with the * Implementing Research Studies as Browser Extensions * [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Introduction) - The scripting language commonly used for web applications, including browser extensions. Studies on Rally are implemented in JavaScript. If you haven't worked with JavaScript in awhile, we especially recommend catching up on [modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), [promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), and [web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers), since those features are used in Rally, WebScience, and this template. - * [WebExtensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions) - An API for building browser extensions. Each study on Rally is a separate extension. If you haven't worked with WebExtensions in awhile, we recommend reviewing the [structure of browser extensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension), including [manifests](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json), [background scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#background_scripts), and [content scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts). + * [WebExtensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions) - An API for building browser extensions. Each study on Rally is a separate extension. If you haven't worked with WebExtensions in awhile, we recommend reviewing the [structure of browser extensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension), including [manifests](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json), [background scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#background_scripts) which run in a background page, and [content scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts) which run on ordinary pages. * [WebScience](https://github.com/mozilla-rally/web-science/) - A library for building browser-based research studies. WebScience provides production-quality functionality that is commonly required, difficult to implement correctly, and difficult to maintain. * [Rally.js](https://github.com/mozilla-rally/rally-core-addon/tree/master/support) - A library for integrating your study with the Rally platform. Rally.js communicates with a separate Rally core extension, which manages user enrollment and submits telemetry pings. * Building and Testing Research Study Browser Extensions @@ -44,13 +44,12 @@ This template includes the following files. ## Getting Started 1. Install Node.js, optionally using a [package manager](https://nodejs.org/en/download/package-manager/) such as [Homebrew](https://brew.sh/) on macOS or `apt-get` on Ubuntu Linux. Check that the `npm` command runs. -2. Use the `npm` command to install the ESLint, Rollup, and web-ext command-line tools (`npm install -g eslint`, `npm install -g rollup`, and `npm install -g web-ext`). Check that the `eslint`, `rollup`, and `web-ext` commands run. -3. Fork this repository. -4. Update the WebExtensions manifest ([manifest.json](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the `application.gecko.id` field. -5. Update the Node.js package configuration [package.json](./package.json) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. -6. In the forked repository, run `npm install` to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. -7. Run `npm run start-dev`. The build system will build your study extension and launch Firefox with the study extension installed. -8. Commit your study extension to a repository! You now have a clean and functional starting point for implementing your study. If this template is updated in future, you can also easily merge those updates into your study. +2. Fork this repository. +3. Update the WebExtensions manifest ([manifest.json](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the `application.gecko.id` field. +4. Update the Node.js package configuration [package.json](./package.json) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. +5. In the forked repository, run `npm install` to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. +6. Run `npm run start-dev`. The build system will build your study extension, launch Firefox with the study extension installed, and automatically open both the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page. +7. Commit your study extension to a repository! You now have a clean and functional starting point for implementing your study. If this template is updated in future, you can also easily merge those updates into your study. ## Build System Commands This template comes with a set of predefined Node.js commands, which function similar to makefile targets. These commands should help you with study implementation, debugging, testing, and deployment. You run each command with `npm run `. @@ -65,5 +64,5 @@ This template comes with a set of predefined Node.js commands, which function si * `watch`: Build the study extension in _developer mode_ (`dev`), launch Firefox with the study extension installed, automatically rebuild the study if a file changes, and automatically reload the study in Firefox if the study is rebuilt. You should typically use `watch` for study extension testing and debugging. ## Debugging the Study Extension in Firefox -* Debugging the Background Script - Navigate to the browser debugging page (`about:debugging`), click This Firefox, then click Inspect on the study extension. You are now on a background script debugging page where you can use the full set of [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools), including a [Web Console](https://developer.mozilla.org/en-US/docs/Tools/Web_Console), [JavaScript Debugger](https://developer.mozilla.org/en-US/docs/Tools/Debugger), and [Network Monitor](https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor). Background script console output will also appear on the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). The template's web-ext configuration will automatically open both the background script debugging page and the Browser Console on browser startup. +* Debugging the Background Script - Navigate to the browser debugging page (`about:debugging`), click This Firefox, then click Inspect on the study extension. The page that opens is [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page, including a [Web Console](https://developer.mozilla.org/en-US/docs/Tools/Web_Console), [JavaScript Debugger](https://developer.mozilla.org/en-US/docs/Tools/Debugger), and [Network Monitor](https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor). Background script console output will also appear on the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). The template's web-ext configuration will automatically open both Firefox Developer Tools for the background page and the Browser Console on browser startup. * Debugging a Content Script - On a page where the content script is running, open [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools). The [Web Console](https://developer.mozilla.org/en-US/docs/Tools/Web_Console) will include output from the content script, and you can select the content script in the [JavaScript Debugger](https://developer.mozilla.org/en-US/docs/Tools/Debugger). Content script console output will also appear on the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). From 7d27bbd3fee76db8acb17608924d70ddbbcc2b97 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 13:03:20 -0400 Subject: [PATCH 129/399] Update README.md --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 21120c3..19990f7 100644 --- a/README.md +++ b/README.md @@ -20,42 +20,42 @@ Before working with this template, we recommend familiarizing yourself with the This template includes the following files. -* `.eslintignore` and `.eslintrc` - ESLint configuration. You should not have to modify these files. -* `.gitignore` - Git configuration. You should not not have to modify this file. -* `CODE_OF_CONDUCT.md` - The [code of conduct](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-code-of-conduct-to-your-project) for the study extension. You should update this file to reflect your code of conduct. -* `LICENSE` - The [license](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository) for the study extension. You can use the provided license or your own license, so long as your license is compatible with Rally requirements and the licenses of dependencies. -* `README.md` - A [README](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-readmes) for the study extension. You should update this file to describe your study and its implementation. -* `manifest.json` - A WebExtensions [manifest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) for the study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields for your study. You can also update [`permissions`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) as necessary for implementing your study. The Rally team will provide a value for the `application.gecko.id` field. -* `package.json` - A Node.js [package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) for the study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. You should not have to update the `scripts` field, which specifies a set of commands that function like makefile targets. You can add `dependencies` for your study implementation, either manually or with `npm install`. Note that you must use [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install dependencies and [`npm update`](https://docs.npmjs.com/cli/v7/commands/npm-update) to update dependencies. -* `package-lock.json` - A file automatically generated by Node.js package management that [describes package dependencies](https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json). You should not have to manually edit this file. -* `rollup.config` - A Rollup configuration for the study. You should not have to modify this file. -* `web-ext.config` - A web-ext configuration for the study, which will automatically open the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and background script debugging page on browser startup. You should not have to modify this file. -* `.circleci/` +* [`.eslintignore`](./eslintignore) and [`.eslintrc`](./eslintrc) - ESLint configuration. You should not have to modify these files. +* [`.gitignore`](./gitignore) - Git configuration. You should not not have to modify this file. +* [`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) - The [code of conduct](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-code-of-conduct-to-your-project) for the study extension. You should update this file to reflect your code of conduct. +* [`LICENSE`](./LICENSE) - The [license](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository) for the study extension. You can use the provided license or your own license, so long as your license is compatible with Rally requirements and the licenses of dependencies. +* [`README.md`](./README.md) - A [README](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-readmes) for the study extension. You should update this file to describe your study and its implementation. +* [`manifest.json`](./manifest.json) - A WebExtensions [manifest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) for the study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields for your study. You can also update [`permissions`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) as necessary for implementing your study. The Rally team will provide a value for the [`browser_specific_settings.gecko.id`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings) field. +* [`package.json`](./package.json) - A Node.js [package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) for the study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. You should not have to update the `scripts` field, which specifies a set of commands that function like makefile targets. You can add `dependencies` for your study implementation, either manually or with `npm install`. Note that you must use [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install dependencies and [`npm update`](https://docs.npmjs.com/cli/v7/commands/npm-update) to update dependencies. +* [`package-lock.json`](./package-lock.json) - A file automatically generated by Node.js package management that [describes package dependencies](https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json). You should not have to manually edit this file. +* [`rollup.config.js`](./rollup.config.js) - A [Rollup](https://rollupjs.org/) configuration for the study. You should not have to modify this file. +* [`web-ext-config.js`](./web-ext-config.js) - A [web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) configuration for the study. This configuration will, on browser startup, automatically open both the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page. You should not have to modify this file. +* `.circleci/` - CircleCI configuration. * `config.yml` - A basic CircleCI configuration for the study template. You can use this file as a starting point for your own tests, or you can safely remove the file. -* `.github/` - * `dependabot.yml` - A GitHub dependency update configuration. You can use this file for managing dependency updates, or you can safely remove the file. -* `src/` - * `background.js` - The main background script for the study. The build system will bundle this script and output to `dist/background.js`. Note that the WebExtensions manifest already specifies `dist/background.js` as a background script for the extension. - * `exampleContentScript.content.js` - An example content script for the study. The build system automatically recognizes a `*.content.js` file as a content script, bundles it separately from the main background script, and outputs to the same relative path in `dist/` that the file has in `src/`. The build system will output this content script file, for example, to `dist/exampleContentScript.content.js`. We provide this functionality so that study content scripts can include module dependencies. - * `exampleModule.js` - An example module for the study. The build system will bundle this module into the main background script; there is no separate output in `dist/`. +* `.github/` - GitHub configuration. + * `dependabot.yml` - A [GitHub dependency update](https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically) configuration. You can use this file for managing dependency updates, or you can safely remove the file. +* `src/` - The source for the study implementation. You should include all your study JavaScript files in this directory, and you can optionally include non-JavaScript assets. The build system will bundle JavaScript files to the `/dist` directory, as described below. The build system will also copy non-JavaScript assets (i.e., any files that do not end in `.js`) to the `dist/` directory. + * `background.js` - The main [background script](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#background_scripts) for the study. The build system will bundle this script and output to `dist/background.js`. Note that the WebExtensions manifest already specifies `dist/background.js` as a background script for the extension. + * `exampleContentScript.content.js` - An example [content script](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts) for the study. The build system automatically recognizes a `*.content.js` file as a content script, bundles it separately from the main background script, and outputs to the same relative path in `dist/` that the file has in `src/`. The build system will output this content script file, for example, to `dist/exampleContentScript.content.js`. We provide this functionality so that study content scripts can include module dependencies. + * `exampleModule.js` - An example module for the study. The build system will bundle this module into the main background script; there is no separate output in `dist/`. If you want to split your background script implementation into multiple files, we recommend using modules imported into `background.js` to benefit from performance optimizations in bundling, rather than using multiple background scripts specified in `manifest.json`. * `exampleWorkerScript.worker.js` - An example web worker script for the study. The build system treats `*.worker.js` files the same way as `*.content.js` files. -* `tests/integration/` - A basic integration test for the study template. You can use these files as a starting point for your own tests, or you can safely remove the files. +* `tests/integration/` - A basic [Selenium](https://www.selenium.dev/) integration test for the study template. You can use these files as a starting point for your own tests, or you can safely remove the files. ## Getting Started 1. Install Node.js, optionally using a [package manager](https://nodejs.org/en/download/package-manager/) such as [Homebrew](https://brew.sh/) on macOS or `apt-get` on Ubuntu Linux. Check that the `npm` command runs. 2. Fork this repository. -3. Update the WebExtensions manifest ([manifest.json](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the `application.gecko.id` field. -4. Update the Node.js package configuration [package.json](./package.json) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. -5. In the forked repository, run `npm install` to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. +3. Update the [WebExtensions manifest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) ([`manifest.json`](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the [`browser_specific_settings.gecko.id`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings) field. +4. Update the [Node.js package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) ([`package.json`](./package.json)) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. +5. In the forked repository, run [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. 6. Run `npm run start-dev`. The build system will build your study extension, launch Firefox with the study extension installed, and automatically open both the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page. 7. Commit your study extension to a repository! You now have a clean and functional starting point for implementing your study. If this template is updated in future, you can also easily merge those updates into your study. ## Build System Commands This template comes with a set of predefined Node.js commands, which function similar to makefile targets. These commands should help you with study implementation, debugging, testing, and deployment. You run each command with `npm run `. -* `build` - Bundles the study extension. Output is in the `dist/` directory. -* `dev` - Bundles the study extension in _developer mode_. In developer mode, Rally.js ignores whether the Rally core extension is installed and outputs telemetry pings to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). You should typically use developer mode when implementing and testing your study. +* `build` - Builds the study extension, by bundling JavaScript implementation in `src/` and copying non-JavaScript files. Output is in the `dist/` directory. +* `dev` - Bundles the study extension (like `build`), but in _developer mode_. In developer mode, Rally.js ignores whether the Rally core extension is installed and outputs telemetry pings to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). You should typically use developer mode when implementing and testing your study. * `lint`: Run linting on the study extension. * `package`: Build the study extension (`build`), then package the built study into an archive for distribution. Output is in the `web-ext-artifacts/` directory. * `start`: Build the study extension (`build`), then launch Firefox with the study extension installed. From 4f3b27142778956f36c8ee12a2a2aa7e28686e34 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 13:05:13 -0400 Subject: [PATCH 130/399] Version numbering --- manifest.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index cc2109a..99897d9 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "author": "Mozilla", "manifest_version": 2, "name": "Rally Study Template", - "version": "0.5.0", + "version": "0.4.0", "homepage_url": "https://github.com/mozilla-rally/study-template", "applications": { diff --git a/package.json b/package.json index b3c6601..c27b746 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rally-study-template", - "version": "0.3.1", + "version": "0.4.0", "scripts": { "build": "rollup -c", "dev": "rollup -c --config-enable-developer-mode", From f9a5bc96a44911bbe908345a0863092fcec63bf8 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 13:12:53 -0400 Subject: [PATCH 131/399] Using browser_specific_settings manifest key --- manifest.json | 2 +- web-ext-config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 99897d9..288773a 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "version": "0.4.0", "homepage_url": "https://github.com/mozilla-rally/study-template", - "applications": { + "browser_specific_settings": { "gecko": { "id": "rally-study-template@mozilla.org", "strict_min_version": "87.0" diff --git a/web-ext-config.js b/web-ext-config.js index d7a4f71..4ade9e2 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -11,7 +11,7 @@ try { const fs = require("fs"); const manifestJSON = fs.readFileSync("./manifest.json"); const manifestObj = JSON.parse(manifestJSON); - extensionID = manifestObj.applications.gecko.id; + extensionID = manifestObj.browser_specific_settings.gecko.id; } catch(error) { // If this block is empty, there is a linter error. From c76da70deb86d8512472bee9aff5089c76971b8f Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 13:18:52 -0400 Subject: [PATCH 132/399] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 19990f7..b4fecca 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ This template includes the following files. This template comes with a set of predefined Node.js commands, which function similar to makefile targets. These commands should help you with study implementation, debugging, testing, and deployment. You run each command with `npm run `. * `build` - Builds the study extension, by bundling JavaScript implementation in `src/` and copying non-JavaScript files. Output is in the `dist/` directory. -* `dev` - Bundles the study extension (like `build`), but in _developer mode_. In developer mode, Rally.js ignores whether the Rally core extension is installed and outputs telemetry pings to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). You should typically use developer mode when implementing and testing your study. +* `dev` - Bundles the study extension (like `build`), but in _developer mode_. In developer mode, Rally.js ignores whether the Rally core extension is installed and outputs telemetry pings to the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console). Developer mode also provides a [source map](https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Use_a_source_map) for bundled JavaScript, so you can use the [Debugger](https://developer.mozilla.org/en-US/docs/Tools/Debugger) as if the JavaScript were not bundled. You should typically use developer mode when implementing and testing your study. * `lint`: Run linting on the study extension. * `package`: Build the study extension (`build`), then package the built study into an archive for distribution. Output is in the `web-ext-artifacts/` directory. * `start`: Build the study extension (`build`), then launch Firefox with the study extension installed. From 10dfc2df83a2305a3eae2222c9a2a3d70b9f8bc2 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 13:20:51 -0400 Subject: [PATCH 133/399] Source maps for content and worker scripts --- rollup.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rollup.config.js b/rollup.config.js index e3ba1be..b72b9ec 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -62,7 +62,8 @@ export default (cliArgs) => { input: scriptPath, output: { file: `dist/${scriptPath.slice("src/".length)}`, - format: "iife" + format: "iife", + sourcemap: isDevMode(cliArgs) ? "inline" : false, }, plugins: [ commonjs(), From ec47b7248cbac1e2eaed9431fc98c484f0c19f66 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 13:25:09 -0400 Subject: [PATCH 134/399] Adding rollup-plugin-copy and updating dependencies --- package-lock.json | 1833 +++++++++++++++++++++++++-------------------- package.json | 1 + 2 files changed, 1019 insertions(+), 815 deletions(-) diff --git a/package-lock.json b/package-lock.json index bd6baa8..2fcfc0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rally-study-template", - "version": "0.3.1", + "version": "0.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "rally-study-template", - "version": "0.3.1", + "version": "0.4.0", "license": "MPL-2.0", "devDependencies": { "@mozilla/rally": "^0.6.0", @@ -23,6 +23,7 @@ "mocha": "^8.4.0", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", + "rollup-plugin-copy": "^3.4.0", "selenium-webdriver": "^4.0.0-beta.3", "web-ext": "^6.1.0", "webextension-polyfill": "^0.8.0" @@ -41,18 +42,18 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -220,6 +221,30 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@mdn/browser-compat-data": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.2.4.tgz", @@ -422,6 +447,25 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "node_modules/@types/fs-extra": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/got": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", @@ -439,15 +483,15 @@ "dev": true }, "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", "dev": true }, "node_modules/@types/node": { - "version": "14.14.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz", - "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", + "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", "dev": true }, "node_modules/@types/resolve": { @@ -553,6 +597,22 @@ "node": ">=12.21.0" } }, + "node_modules/addons-linter/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/addons-linter/node_modules/eslint": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", @@ -607,31 +667,33 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/addons-linter/node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "node_modules/addons-linter/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/addons-linter/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/addons-linter/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/addons-scanner-utils": { @@ -804,9 +866,9 @@ "dev": true }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -816,6 +878,15 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/archive-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", @@ -1009,9 +1080,9 @@ "dev": true }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/base64-js": { @@ -1116,9 +1187,9 @@ "dev": true }, "node_modules/boxen": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", - "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", "dev": true, "dependencies": { "ansi-align": "^3.0.0", @@ -1137,18 +1208,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1374,9 +1433,9 @@ "dev": true }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -1443,6 +1502,15 @@ "fsevents": "~2.3.1" } }, + "node_modules/chokidar/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -1685,10 +1753,14 @@ } }, "node_modules/contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-1.0.0.tgz", + "integrity": "sha1-NFizMhhWA+ju0Y9RjUoQiIo6vJE=", "dev": true, + "dependencies": { + "normalize-path": "^2.1.1", + "path-starts-with": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } @@ -1849,9 +1921,9 @@ } }, "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", + "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", "dev": true, "engines": { "node": ">=10" @@ -2195,15 +2267,6 @@ "node": ">=8" } }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/dispensary": { "version": "0.62.0", "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", @@ -2711,12 +2774,12 @@ "dev": true }, "node_modules/eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", "dev": true, "dependencies": { - "debug": "^2.6.9", + "debug": "^3.2.7", "pkg-dir": "^2.0.0" }, "engines": { @@ -2724,20 +2787,14 @@ } }, "node_modules/eslint-module-utils/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/eslint-plugin-es": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", @@ -2758,23 +2815,26 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "version": "2.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.2.tgz", + "integrity": "sha512-LmNoRptHBxOP+nb0PIKz1y6OSzCJlB+0g0IGS3XV4KaKk2q4szqQ6s6F1utVf5ZRkxk/QOTjdxe7v4VjS99Bsg==", "dev": true, "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "contains-path": "^1.0.0", "debug": "^2.6.9", - "doctrine": "1.5.0", + "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", + "eslint-module-utils": "^2.6.1", + "find-up": "^2.0.0", "has": "^1.0.3", + "is-core-module": "^2.4.0", "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", + "object.values": "^1.1.3", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" }, "engines": { @@ -2794,13 +2854,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" @@ -2913,39 +2972,12 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz", - "integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { @@ -3397,19 +3429,15 @@ "peer": true }, "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/firefox-profile": { @@ -3443,6 +3471,27 @@ "node": ">=10" } }, + "node_modules/firefox-profile/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/firefox-profile/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/firefox-profile/node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -3566,18 +3615,17 @@ "peer": true }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" } }, "node_modules/fs-minipass": { @@ -3746,9 +3794,9 @@ } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -3799,12 +3847,12 @@ } }, "node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -4003,9 +4051,9 @@ } }, "node_modules/hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/htmlparser2": { @@ -4298,9 +4346,9 @@ "dev": true }, "node_modules/is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4319,12 +4367,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4358,9 +4406,9 @@ } }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -4370,9 +4418,9 @@ } }, "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true, "engines": { "node": ">= 0.4" @@ -4382,9 +4430,9 @@ } }, "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "bin": { "is-docker": "cli.js" @@ -4495,9 +4543,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true, "engines": { "node": ">= 0.4" @@ -4543,6 +4591,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -4562,13 +4619,13 @@ } }, "node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4605,9 +4662,9 @@ } }, "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "dev": true, "engines": { "node": ">= 0.4" @@ -4617,12 +4674,12 @@ } }, "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4788,13 +4845,10 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -4803,10 +4857,7 @@ "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "engines": { - "node": "*" - } + "dev": true }, "node_modules/jsonwebtoken": { "version": "8.5.1", @@ -5002,18 +5053,16 @@ } }, "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/lodash": { @@ -5022,6 +5071,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -5064,6 +5119,12 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "node_modules/log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -5153,9 +5214,9 @@ } }, "node_modules/marky": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", - "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", "dev": true }, "node_modules/media-typer": { @@ -5250,21 +5311,21 @@ } }, "node_modules/mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "dependencies": { - "mime-db": "1.46.0" + "mime-db": "1.47.0" }, "engines": { "node": ">= 0.6" @@ -5393,6 +5454,42 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", @@ -5405,12 +5502,66 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -5641,10 +5792,13 @@ } }, "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, "engines": { "node": ">=0.10.0" } @@ -5893,9 +6047,9 @@ } }, "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6110,33 +6264,27 @@ } }, "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "p-try": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^1.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/p-timeout": { @@ -6359,12 +6507,12 @@ } }, "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/path-is-absolute": { @@ -6391,6 +6539,18 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "node_modules/path-starts-with": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-starts-with/-/path-starts-with-1.0.0.tgz", + "integrity": "sha1-soJDAV6LE43lcmgqxS2kLmRq2E4=", + "dev": true, + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -6399,15 +6559,12 @@ "peer": true }, "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/pend": { @@ -6511,64 +6668,18 @@ "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { + "node_modules/pkg-up": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "dev": true, "dependencies": { - "p-limit": "^1.1.0" + "find-up": "^2.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss": { "version": "8.2.10", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", @@ -6842,121 +6953,25 @@ } }, "node_modules/read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "dependencies": { "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" + "read-pkg": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { + "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "dependencies": { - "pify": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "pify": "^3.0.0" }, "engines": { "node": ">=4" @@ -7134,6 +7149,12 @@ "node": ">=4" } }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -7259,9 +7280,9 @@ } }, "node_modules/rollup": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", - "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", + "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -7273,6 +7294,50 @@ "fsevents": "~2.3.1" } }, + "node_modules/rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-copy/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7732,11 +7797,6 @@ "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, "engines": { "node": ">=0.10.0" } @@ -7963,24 +8023,26 @@ } }, "node_modules/table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "dependencies": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/table/node_modules/ajv": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", - "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", + "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -8224,12 +8286,15 @@ } }, "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { @@ -8262,15 +8327,18 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", - "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", - "has-bigints": "^1.0.0", - "has-symbols": "^1.0.0", - "which-boxed-primitive": "^1.0.1" + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/unbzip2-stream": { @@ -8297,12 +8365,12 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">= 4.0.0" } }, "node_modules/unpipe": { @@ -8525,16 +8593,31 @@ "npm": ">=6.9.0 <7.0.0" } }, - "node_modules/web-ext/node_modules/decamelize": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", - "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", + "node_modules/web-ext/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { "node": ">=10" + } + }, + "node_modules/web-ext/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, "node_modules/web-ext/node_modules/parse-json": { @@ -8564,6 +8647,15 @@ "node": ">=8" } }, + "node_modules/web-ext/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/web-ext/node_modules/ws": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", @@ -8749,9 +8841,9 @@ } }, "node_modules/ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", "dev": true, "engines": { "node": ">=8.3.0" @@ -8811,9 +8903,9 @@ } }, "node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" @@ -8867,6 +8959,18 @@ "node": ">=10" } }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -8926,18 +9030,18 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -9077,6 +9181,23 @@ "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, "@mdn/browser-compat-data": { @@ -9238,6 +9359,25 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/fs-extra": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/got": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", @@ -9255,15 +9395,15 @@ "dev": true }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", "dev": true }, "@types/node": { - "version": "14.14.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz", - "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", + "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", "dev": true }, "@types/resolve": { @@ -9352,6 +9492,16 @@ "yauzl": "2.10.0" }, "dependencies": { + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "eslint": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", @@ -9397,20 +9547,25 @@ "v8-compile-cache": "^2.0.3" } }, - "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "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" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, @@ -9542,13 +9697,21 @@ "dev": true }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } } }, "archive-type": { @@ -9704,9 +9867,9 @@ "dev": true }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { @@ -9793,9 +9956,9 @@ "dev": true }, "boxen": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz", - "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", "dev": true, "requires": { "ansi-align": "^3.0.0", @@ -9806,14 +9969,6 @@ "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } } }, "brace-expansion": { @@ -9987,9 +10142,9 @@ "dev": true }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -10037,6 +10192,14 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.5.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } } }, "chownr": { @@ -10239,10 +10402,14 @@ } }, "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-1.0.0.tgz", + "integrity": "sha1-NFizMhhWA+ju0Y9RjUoQiIo6vJE=", + "dev": true, + "requires": { + "normalize-path": "^2.1.1", + "path-starts-with": "^1.0.0" + } }, "content-disposition": { "version": "0.5.3", @@ -10357,9 +10524,9 @@ } }, "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", + "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", "dev": true }, "decode-uri-component": { @@ -10632,14 +10799,6 @@ "dev": true, "requires": { "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } } }, "dispensary": { @@ -11027,23 +11186,6 @@ "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "globals": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz", - "integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } } }, "eslint-import-resolver-node": { @@ -11074,29 +11216,23 @@ } }, "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", "dev": true, "requires": { - "debug": "^2.6.9", + "debug": "^3.2.7", "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -11111,23 +11247,26 @@ } }, "eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "version": "2.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.2.tgz", + "integrity": "sha512-LmNoRptHBxOP+nb0PIKz1y6OSzCJlB+0g0IGS3XV4KaKk2q4szqQ6s6F1utVf5ZRkxk/QOTjdxe7v4VjS99Bsg==", "dev": true, "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "contains-path": "^1.0.0", "debug": "^2.6.9", - "doctrine": "1.5.0", + "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", + "eslint-module-utils": "^2.6.1", + "find-up": "^2.0.0", "has": "^1.0.3", + "is-core-module": "^2.4.0", "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", + "object.values": "^1.1.3", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" }, "dependencies": { @@ -11141,13 +11280,12 @@ } }, "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "^2.0.2" } }, "ms": { @@ -11231,9 +11369,9 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { @@ -11610,13 +11748,12 @@ } }, "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^2.0.0" } }, "firefox-profile": { @@ -11644,6 +11781,24 @@ "universalify": "^1.0.0" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -11742,15 +11897,14 @@ "peer": true }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-minipass": { @@ -11889,9 +12043,9 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -11927,12 +12081,12 @@ } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "globby": { @@ -12078,9 +12232,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "htmlparser2": { @@ -12292,9 +12446,9 @@ "dev": true }, "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true }, "is-binary-path": { @@ -12307,12 +12461,12 @@ } }, "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "is-callable": { @@ -12331,24 +12485,24 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { @@ -12420,9 +12574,9 @@ "dev": true }, "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true }, "is-obj": { @@ -12450,6 +12604,12 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true + }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -12466,13 +12626,13 @@ } }, "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-relative": { @@ -12494,18 +12654,18 @@ "dev": true }, "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "dev": true }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-typedarray": { @@ -12653,13 +12813,12 @@ } }, "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -12843,12 +13002,13 @@ } }, "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^5.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -12857,6 +13017,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -12899,6 +13065,12 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -12969,9 +13141,9 @@ } }, "marky": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", - "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", "dev": true }, "media-typer": { @@ -13042,18 +13214,18 @@ "peer": true }, "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true }, "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "requires": { - "mime-db": "1.46.0" + "mime-db": "1.47.0" } }, "mimic-fn": { @@ -13147,6 +13319,30 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "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" + } + }, "js-yaml": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", @@ -13156,12 +13352,45 @@ "argparse": "^2.0.1" } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -13350,10 +13579,13 @@ } }, "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, "normalize-url": { "version": "2.0.1", @@ -13541,9 +13773,9 @@ "dev": true }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, "object-is": { @@ -13692,21 +13924,21 @@ "dev": true }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "p-try": "^1.0.0" } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^3.0.2" + "p-limit": "^1.1.0" } }, "p-timeout": { @@ -13882,9 +14114,9 @@ "peer": true }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-is-absolute": { @@ -13905,6 +14137,15 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-starts-with": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-starts-with/-/path-starts-with-1.0.0.tgz", + "integrity": "sha1-soJDAV6LE43lcmgqxS2kLmRq2E4=", + "dev": true, + "requires": { + "normalize-path": "^2.1.1" + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -13913,13 +14154,10 @@ "peer": true }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pend": { "version": "1.2.0", @@ -13993,51 +14231,15 @@ "dev": true, "requires": { "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" } }, "postcss": { @@ -14245,101 +14447,29 @@ "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" }, "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "pify": "^3.0.0" } } } }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -14472,6 +14602,12 @@ } } }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -14567,14 +14703,51 @@ } }, "rollup": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", - "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", + "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", "dev": true, "requires": { "fsevents": "~2.3.1" } }, + "rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "requires": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "dependencies": { + "globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -15137,21 +15310,23 @@ } }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ajv": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", - "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", + "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -15350,9 +15525,9 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -15382,15 +15557,15 @@ } }, "unbox-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", - "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { "function-bind": "^1.1.1", - "has-bigints": "^1.0.0", - "has-symbols": "^1.0.0", - "which-boxed-primitive": "^1.0.1" + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" } }, "unbzip2-stream": { @@ -15414,9 +15589,9 @@ } }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { @@ -15595,11 +15770,27 @@ "zip-dir": "2.0.0" }, "dependencies": { - "decamelize": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", - "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", - "dev": true + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, "parse-json": { "version": "5.2.0", @@ -15619,6 +15810,12 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, "ws": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", @@ -15761,9 +15958,9 @@ } }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", "dev": true, "requires": {} }, @@ -15797,9 +15994,9 @@ "peer": true }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { @@ -15841,6 +16038,12 @@ "is-plain-obj": "^2.1.0" }, "dependencies": { + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", diff --git a/package.json b/package.json index c27b746..a34bd13 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "mocha": "^8.4.0", "npm-run-all": "^4.1.5", "rollup": "^2.47.0", + "rollup-plugin-copy": "^3.4.0", "selenium-webdriver": "^4.0.0-beta.3", "web-ext": "^6.1.0", "webextension-polyfill": "^0.8.0" From f324f79362d7d1be853ab83593e39bd986253cf3 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 14:29:16 -0400 Subject: [PATCH 135/399] Rollup config for copying non-JS assets in src/ --- README.md | 4 ++-- rollup.config.js | 23 +++++++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b4fecca..00aadb1 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Before working with this template, we recommend familiarizing yourself with the * Implementing Research Studies as Browser Extensions * [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Introduction) - The scripting language commonly used for web applications, including browser extensions. Studies on Rally are implemented in JavaScript. If you haven't worked with JavaScript in awhile, we especially recommend catching up on [modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), [promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), and [web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers), since those features are used in Rally, WebScience, and this template. * [WebExtensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions) - An API for building browser extensions. Each study on Rally is a separate extension. If you haven't worked with WebExtensions in awhile, we recommend reviewing the [structure of browser extensions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension), including [manifests](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json), [background scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#background_scripts) which run in a background page, and [content scripts](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts) which run on ordinary pages. - * [WebScience](https://github.com/mozilla-rally/web-science/) - A library for building browser-based research studies. WebScience provides production-quality functionality that is commonly required, difficult to implement correctly, and difficult to maintain. + * [WebScience](https://github.com/mozilla-rally/web-science/) - A library for building browser-based research studies. WebScience provides production-quality functionality that is commonly required, difficult to implement correctly, and difficult to maintain. * [Rally.js](https://github.com/mozilla-rally/rally-core-addon/tree/master/support) - A library for integrating your study with the Rally platform. Rally.js communicates with a separate Rally core extension, which manages user enrollment and submits telemetry pings. * Building and Testing Research Study Browser Extensions * [ESLint](https://eslint.org/) - A linter for JavaScript. This template invokes ESLint with Node.js commands; you should not have to manually run ESLint or modify the ESLint configuration. @@ -29,7 +29,7 @@ This template includes the following files. * [`package.json`](./package.json) - A Node.js [package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) for the study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. You should not have to update the `scripts` field, which specifies a set of commands that function like makefile targets. You can add `dependencies` for your study implementation, either manually or with `npm install`. Note that you must use [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install dependencies and [`npm update`](https://docs.npmjs.com/cli/v7/commands/npm-update) to update dependencies. * [`package-lock.json`](./package-lock.json) - A file automatically generated by Node.js package management that [describes package dependencies](https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json). You should not have to manually edit this file. * [`rollup.config.js`](./rollup.config.js) - A [Rollup](https://rollupjs.org/) configuration for the study. You should not have to modify this file. -* [`web-ext-config.js`](./web-ext-config.js) - A [web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) configuration for the study. This configuration will, on browser startup, automatically open both the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page. You should not have to modify this file. +* [`web-ext-config.js`](./web-ext-config.js) - A [web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) configuration for the study. This configuration will, on browser startup, automatically open both the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page. You should not have to modify this file. * `.circleci/` - CircleCI configuration. * `config.yml` - A basic CircleCI configuration for the study template. You can use this file as a starting point for your own tests, or you can safely remove the file. * `.github/` - GitHub configuration. diff --git a/rollup.config.js b/rollup.config.js index b72b9ec..a0c657c 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -8,6 +8,7 @@ import commonjs from "@rollup/plugin-commonjs"; import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; +import copy from "rollup-plugin-copy"; import globby from "globby"; /** @@ -42,6 +43,20 @@ export default (cliArgs) => { browser: true, }), commonjs(), + // Configuration for non-JavaScript assets (src/**/*) that + // are not JavaScript files (i.e., do not end in .js). These + // files will be copied to dist/ with the same relative path + // they have in src/. + copy({ + targets: [{ + src: [ + "src/**/*", + "!src/**/*.js", + ], + dest: "dist/", + }], + flatten: false, + }), ], } ]; @@ -66,11 +81,11 @@ export default (cliArgs) => { sourcemap: isDevMode(cliArgs) ? "inline" : false, }, plugins: [ - commonjs(), resolve({ - browser: true - }) - ] + browser: true, + }), + commonjs(), + ], }); } From 7ea0786d2c2e27cfd401ebac112f75cdd962ed47 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Sun, 16 May 2021 22:11:42 -0400 Subject: [PATCH 136/399] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 00aadb1..e8372d2 100644 --- a/README.md +++ b/README.md @@ -43,13 +43,13 @@ This template includes the following files. ## Getting Started -1. Install Node.js, optionally using a [package manager](https://nodejs.org/en/download/package-manager/) such as [Homebrew](https://brew.sh/) on macOS or `apt-get` on Ubuntu Linux. Check that the `npm` command runs. -2. Fork this repository. -3. Update the [WebExtensions manifest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) ([`manifest.json`](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the [`browser_specific_settings.gecko.id`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings) field. -4. Update the [Node.js package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) ([`package.json`](./package.json)) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. -5. In the forked repository, run [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. -6. Run `npm run start-dev`. The build system will build your study extension, launch Firefox with the study extension installed, and automatically open both the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page. -7. Commit your study extension to a repository! You now have a clean and functional starting point for implementing your study. If this template is updated in future, you can also easily merge those updates into your study. +Prerequisites: current versions of [Firefox](https://www.mozilla.org/firefox/new/) and [Node.js](https://nodejs.org/). You might find it helpful to install Node.js with a [package manager](https://nodejs.org/en/download/package-manager/), such as [Scoop](https://scoop.sh/) on Windows, [Homebrew](https://brew.sh/) on macOS, or [`apt-get`](https://help.ubuntu.com/community/AptGet/Howto) on Ubuntu Linux. +1. [Fork](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) this repository. +2. Update the [WebExtensions manifest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) ([`manifest.json`](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the [`browser_specific_settings.gecko.id`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings) field. +3. Update the [Node.js package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) ([`package.json`](./package.json)) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. +4. In the forked repository, run [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. +5. Run `npm run start-dev`. The build system will build your study extension, launch Firefox with the study extension installed, and automatically open both the [Browser Console](https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) and [Firefox Developer Tools](https://developer.mozilla.org/en-US/docs/Tools) for the background page. +6. Commit your study extension to a repository! You now have a clean and functional starting point for implementing your study. If this template is updated in future, you can also easily merge those updates into your study. ## Build System Commands This template comes with a set of predefined Node.js commands, which function similar to makefile targets. These commands should help you with study implementation, debugging, testing, and deployment. You run each command with `npm run `. From 8ecdfa2328b7256ff276b2cafd5328a5e957e393 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 20 May 2021 15:24:43 -0400 Subject: [PATCH 137/399] updated tests for basic testing of extension console output --- tests/integration/study.js | 30 ++++++++++++++++++++++++++++-- tests/integration/utils.js | 15 ++++++++++----- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/tests/integration/study.js b/tests/integration/study.js index 902639b..88b3ecc 100644 --- a/tests/integration/study.js +++ b/tests/integration/study.js @@ -5,6 +5,8 @@ const utils = require("./utils.js"); const { By, until } = require("selenium-webdriver"); const firefox = require("selenium-webdriver/firefox"); +const fs = require("fs").promises; +const assert = require('assert'); // The number of milliseconds to wait for some // property to change in tests. This should be @@ -27,6 +29,26 @@ async function findAndAct(driver, element, action) { await driver.findElement(element).then(e => action(e)); } +async function getObjectsFromTestLog(objectType) { + + const fileContent = await fs.readFile('tests/output/stdout.out', 'utf8'); + const fileLines = fileContent.replace(/\\/g, '').split((/\r?\n/)); + + const rallyObjectKey = `rallyTestingOutput.${objectType}` + + const startString = `console.debug: "${rallyObjectKey}: ` + + const matchingLines = fileLines.filter(function (v) { return v.substring(0, startString.length) === startString }); + + const matchingObjects = [] + for(const matchingLine of matchingLines) { + // Cut off last character to remove trailing quotation mark + matchingObjects.push(JSON.parse(matchingLine.slice(startString.length, -1))) + } + + return matchingObjects +} + describe("Study Template integration test example", function () { // eslint-disable-next-line mocha/no-hooks-for-single-case beforeEach(async function () { @@ -45,6 +67,10 @@ describe("Study Template integration test example", function () { // switch to browser UI context to interact with Firefox add-on install prompts. await this.driver.setContext(firefox.Context.CHROME); await findAndAct(this.driver, By.css(`[label="Add"]`), e => e.click()); - await findAndAct(this.driver, By.css(`[label="Okay, Got It"]`), e => e.click()); + await findAndAct(this.driver, By.css(`[label="Okay"]`), e => e.click()); + + const initialDataObjects = await getObjectsFromTestLog("initialData"); + assert.strictEqual(initialDataObjects.length, 1); + assert.strictEqual(initialDataObjects[ 0 ][ "TimeOffset" ], 240) }); -}); +}); \ No newline at end of file diff --git a/tests/integration/utils.js b/tests/integration/utils.js index 59eeb50..dc9eb99 100644 --- a/tests/integration/utils.js +++ b/tests/integration/utils.js @@ -17,25 +17,26 @@ async function getFirefoxDriver(headless) { const firefoxOptions = new firefox.Options(); firefoxOptions.setPreference("xpinstall.signatures.required", false); firefoxOptions.setPreference("extensions.experiments.enabled", true); + firefoxOptions.setPreference("devtools.console.stdout.content", true); - if (headless) { + if(headless) { firefoxOptions.headless(); } - if (process.platform === "linux") { + if(process.platform === "linux") { // Look for the Firefox executable in different locations. const FIREFOX_PATHS = [ "/usr/bin/firefox-trunk", "/usr/bin/firefox", ]; - for (const path of FIREFOX_PATHS) { - if (fs.existsSync(path)) { + for(const path of FIREFOX_PATHS) { + if(fs.existsSync(path)) { firefoxOptions.setBinary(path); break; } } - } else if (process.platform === "darwin") { + } else if(process.platform === "darwin") { firefoxOptions.setBinary( "/Applications/Firefox Nightly.app/Contents/MacOS/firefox" ); @@ -44,6 +45,10 @@ async function getFirefoxDriver(headless) { return await new Builder() .forBrowser("firefox") .setFirefoxOptions(firefoxOptions) + .setFirefoxService( + new firefox.ServiceBuilder() + .setStdio([ fs.openSync('tests/output/stdin.out', 'w'), fs.openSync('tests/output/stdout.out', 'w'), fs.openSync('tests/output/err.out', 'w') ]) + ) .build(); } From ca032dd445aa2dffb26fd1f2b30f58a6ae0304a2 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Fri, 21 May 2021 16:22:06 -0400 Subject: [PATCH 138/399] Updates for basic test --- .gitignore | 5 ++++- src-ts/TestLogging.ts | 31 +++++++++++++++++++++++++++++++ tests/integration/study.js | 7 ++++++- tests/integration/utils.js | 2 ++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100755 src-ts/TestLogging.ts diff --git a/.gitignore b/.gitignore index 584d460..940a40a 100644 --- a/.gitignore +++ b/.gitignore @@ -109,4 +109,7 @@ web-ext-artifacts/ # Compiled Typescript .js src/ -.DS_Store \ No newline at end of file +.DS_Store + +# Testing output files +tests/output/ \ No newline at end of file diff --git a/src-ts/TestLogging.ts b/src-ts/TestLogging.ts new file mode 100755 index 0000000..ff743db --- /dev/null +++ b/src-ts/TestLogging.ts @@ -0,0 +1,31 @@ +/** + * Whether to log testing events. + * @private + * @type {boolean} + * @default + */ +let testing = false; + +/** + * Enable logging for testing events. + */ +export function enableTesting() { + testing = true; +} + +/** + * A function that outputs a message to `console.log` in a consistent format. + * @callback testingLogger + * @param {string} type - An identifying type of the object being output. + * @param {string} object - The object to output to `console.log`. + */ + +/** + * Create a testing logger, a function that logs events to be tested (as strings). + * @returns {testingLogger} - A testing logger. + */ +export function getTestingLog() { + return ((type, object) => { + if (testing) console.log("rallyTestingOutput." + type + ":" + JSON.stringify(object)); + }); +} \ No newline at end of file diff --git a/tests/integration/study.js b/tests/integration/study.js index 88b3ecc..85a75d8 100644 --- a/tests/integration/study.js +++ b/tests/integration/study.js @@ -29,8 +29,13 @@ async function findAndAct(driver, element, action) { await driver.findElement(element).then(e => action(e)); } +/** +* Returns all objects of a particularly type logged by the study extension for testing. +* @param type +* The type of the objects to return. This is specified in the extension +* through the 'type' parameter passed to the testingLogger callback in TestLogging +*/ async function getObjectsFromTestLog(objectType) { - const fileContent = await fs.readFile('tests/output/stdout.out', 'utf8'); const fileLines = fileContent.replace(/\\/g, '').split((/\r?\n/)); diff --git a/tests/integration/utils.js b/tests/integration/utils.js index dc9eb99..cbab516 100644 --- a/tests/integration/utils.js +++ b/tests/integration/utils.js @@ -42,6 +42,8 @@ async function getFirefoxDriver(headless) { ); } + fs.mkdirSync('tests/output', { recursive: true }) + return await new Builder() .forBrowser("firefox") .setFirefoxOptions(firefoxOptions) From 124bbeb8ddbf95ea4165b4dd543d8d0cbfee016a Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Fri, 21 May 2021 16:32:56 -0400 Subject: [PATCH 139/399] content script updates --- src-ts/content-scripts/common.ts | 73 ++++++++----------- src-ts/content-scripts/serp-scripts/baidu.ts | 17 +---- src-ts/content-scripts/serp-scripts/bing.ts | 15 +--- .../serp-scripts/duckduckgo.ts | 15 +--- src-ts/content-scripts/serp-scripts/ecosia.ts | 14 +--- src-ts/content-scripts/serp-scripts/google.ts | 4 +- src-ts/content-scripts/serp-scripts/yahoo.ts | 14 +--- 7 files changed, 52 insertions(+), 100 deletions(-) diff --git a/src-ts/content-scripts/common.ts b/src-ts/content-scripts/common.ts index a5c57c6..8ac8edd 100644 --- a/src-ts/content-scripts/common.ts +++ b/src-ts/content-scripts/common.ts @@ -219,7 +219,6 @@ function initPageManagerListeners(asyncLoads = true) { function pageVisitEndListener() { if (lastClickTime && Date.now() - lastClickTime < 500) { - console.log("unload because of internal click!") numInternalClicks++; } reportResults(); @@ -278,7 +277,6 @@ function registerAttentionListener() { previousAttentionStart = performance.now() } else if (previousAttentionStart) { totalAttentionTime = totalAttentionTime + (performance.now() - previousAttentionStart) - console.log(totalAttentionTime) } }); } @@ -327,22 +325,14 @@ function sendQueryToBackground(engine, urlKeys: Array) { } } -function getAdLinksDefault(adResults: Element[]): Element[] { - const adLinks: Element[] = [] - for (const adResult of adResults) { - adLinks.concat(Array.from(adResult.querySelectorAll("[href]"))) - } - return adLinks -} - function determineOrganicElementsAndAddListeners( organicResults: Element[], getPageNumForElement: (Element) => number = () => { return pageNum }) { // Removes any existing listeners from organic elements that we previously added for (const organicLinkWithListeners of organicLinksWithListeners) { - organicLinkWithListeners.element.removeEventListener("mousedown", organicLinkWithListeners.mousedownListener); - organicLinkWithListeners.element.removeEventListener("click", organicLinkWithListeners.clickListener); + organicLinkWithListeners.element.removeEventListener("mousedown", organicLinkWithListeners.mousedownListener, true); + organicLinkWithListeners.element.removeEventListener("click", organicLinkWithListeners.clickListener, true); } organicDetails = [] @@ -355,7 +345,6 @@ function determineOrganicElementsAndAddListeners( organicResult.querySelectorAll("[href]").forEach(organicLinkElement => { function organicMousedownListener(_event: Event) { - // console.log((organicLinkElement as any).href) if ((organicLinkElement as any).href) { const organicLinkElementHref = urlFilter(encodeURI((organicLinkElement as any).href)) mousedownOrganicLinksMap.set(organicLinkElementHref, { element: organicLinkElement, index: i }) @@ -364,20 +353,21 @@ function determineOrganicElementsAndAddListeners( function organicClickListener(event: MouseEvent) { if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - console.log(event.currentTarget) - console.log(event.target) - console.log("") organicClicks.push({ Ranking: i, AttentionTime: getAttentionTime(), Loaded: pageLoaded }) } } - organicLinkElement.addEventListener("mousedown", organicMousedownListener); - organicLinkElement.addEventListener("click", organicClickListener); + organicLinkElement.addEventListener("mousedown", organicMousedownListener, true); + organicLinkElement.addEventListener("click", organicClickListener, true); organicLinksWithListeners.push({ element: organicLinkElement, mousedownListener: organicMousedownListener, clickListener: organicClickListener }) }); } } +function getIsAdLinkDefault(adLinkElement: Element): boolean { + return !!(adLinkElement as any).href; +} + /** * Get organic and ad results and add listeners for clicks * @param {callback} getOrganicResults - Callback to get the organic results of the SERP @@ -385,40 +375,45 @@ function determineOrganicElementsAndAddListeners( */ function determineAdElementsAndAddListeners( adResults: Element[], - getAdLinks: (adResults: Element[]) => Element[] = getAdLinksDefault) { + getIsAdLinkElement: (adLink: Element) => boolean = getIsAdLinkDefault) { // Removes any existing listeners from ad elements that we previously added for (const adLinkWithListeners of adLinksWithListeners) { - adLinkWithListeners.element.removeEventListener("mousedown", adLinkWithListeners.mousedownListener); - adLinkWithListeners.element.removeEventListener("click", adLinkWithListeners.clickListener); + adLinkWithListeners.element.removeEventListener("mousedown", adLinkWithListeners.mousedownListener, true); + adLinkWithListeners.element.removeEventListener("click", adLinkWithListeners.clickListener, true); } - - numAdResults = adResults.length - - const adLinks = getAdLinks(adResults) - // For each ad element, adds mousedown and click listeners to any elements with an href attribute // Also adds the listeners to a list so that we can later remove them if we want to refresh these listeners - for (const adLinkElement of adLinks) { - const fnAdMousedownListener = function adMousedownListener(_event: Event) { - if ((adLinkElement as any).href) { - const adLinkElementHref = urlFilter(encodeURI((adLinkElement as any).href)) + + + for (const adResult of adResults) { + const fnAdMousedownListener = function adMousedownListener(event: Event) { + console.log(event.target) + let adLinkElement = (event.target as any) + if (getIsAdLinkElement(adLinkElement)) { + const adLink = adLinkElement.href + console.log(numAdResults) + console.log("AD MOUSEDOWN") + console.log(adLink) + const adLinkElementHref = urlFilter(encodeURI(adLink)) mousedownAdLinks.add(encodeURI(adLinkElementHref)) } } const fnAdClickListener = function adClickListener(event: MouseEvent) { if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - console.log("AD CLICK!!!") - numAdClicks++; + if ((event.target as any).href) { + numAdClicks++; + } + } } - adLinkElement.addEventListener("mousedown", fnAdMousedownListener); - adLinkElement.addEventListener("click", fnAdClickListener); - adLinksWithListeners.push({ element: adLinkElement, mousedownListener: fnAdMousedownListener, clickListener: fnAdClickListener }) + adResult.addEventListener("mousedown", fnAdMousedownListener, true); + adResult.addEventListener("click", fnAdClickListener, true); + adLinksWithListeners.push({ element: adResult, mousedownListener: fnAdMousedownListener, clickListener: fnAdClickListener }) } } @@ -468,7 +463,7 @@ function addInternalClickListeners( if (linkElement && isValidURL(link) && (linkElement as any).getAttribute("href")[0] !== "#") { if (isInternalLink(link)) { if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - console.log("INTERNAL CLICK!!!!!!!") + numInternalClicks++; } else { lastClickTime = Date.now() } @@ -502,24 +497,18 @@ function urlFilter(url: string) { function registerNewTabListener() { browser.runtime.onMessage.addListener((message) => { if (message.type === "NewTabURL") { - console.log(message) - // console.log(mousedownAdLinks) - console.log(mousedownInternalLinks) const encodedMessageURL = urlFilter(encodeURI(message.url)) if (mousedownAdLinks.has(encodedMessageURL)) { - console.log("AD CLICK!!!") numAdClicks++; return } if (mousedownInternalLinks.has(encodedMessageURL)) { - console.log("Internal Click!!!") numInternalClicks++; return } if (mousedownOrganicLinksMap.has(encodedMessageURL)) { const mousedownOrganicLinkValue = mousedownOrganicLinksMap.get(encodedMessageURL) const x = { Ranking: mousedownOrganicLinkValue.index, AttentionTime: getAttentionTime(), Loaded: pageLoaded } - console.log(x) organicClicks.push(x) return; } diff --git a/src-ts/content-scripts/serp-scripts/baidu.ts b/src-ts/content-scripts/serp-scripts/baidu.ts index 6472645..804686a 100644 --- a/src-ts/content-scripts/serp-scripts/baidu.ts +++ b/src-ts/content-scripts/serp-scripts/baidu.ts @@ -39,18 +39,9 @@ * @param {string} adResults - an array of the ad results on the page * @returns {Array} An array of all the ad links in the ad results */ - function getAdLinks(adResults: Element[]): Element[] { - const adLinks: Element[] = [] - for (const adResult of adResults) { - adLinks.push(...Array.from(adResult.querySelectorAll("[href]")).filter(adLinkElement => { - if ("href" in adLinkElement && !((adLinkElement as any).href as string).includes("javascript")) { - return true - } else { - return false - } - })) - } - return adLinks + function getIsAdLinkElement(adLinkElement: Element): boolean { + const adLink = (adLinkElement as any).href + return adLink && !adLink.includes("javascript") } /** @@ -109,7 +100,7 @@ determineSearchAreaBottomHeight(); determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getAdLinks) + determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) addInternalClickListeners( "#content_left > .result *", diff --git a/src-ts/content-scripts/serp-scripts/bing.ts b/src-ts/content-scripts/serp-scripts/bing.ts index 84af9f8..b6b9ebb 100644 --- a/src-ts/content-scripts/serp-scripts/bing.ts +++ b/src-ts/content-scripts/serp-scripts/bing.ts @@ -28,16 +28,9 @@ return Array.from(document.querySelectorAll(".b_ad > ul > li, .b_adLastChild")) } - /** - * @param {string} adResults - an array of the ad results on the page - * @returns {Array} An array of all the ad links in the ad results - */ - function getAdLinks(adResults: Element[]): Element[] { - const adLinks: Element[] = [] - for (const adResult of adResults) { - adLinks.push(...adResult.querySelectorAll("[href]:not(.b_adinfo):not(.b_adinfo [href])")) - } - return adLinks + function getIsAdLinkElement(adLinkElement: Element): boolean { + return !!(adLinkElement as any).href && !adLinkElement.matches( + '.b_adinfo, .b_adinfo *') } /** @@ -95,7 +88,7 @@ determineSearchAreaBottomHeight() determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getAdLinks); + determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); addInternalClickListeners( ".b_pag *, #b_results > li.b_algo *, .b_ad > ul > li *, .b_adLastChild *", diff --git a/src-ts/content-scripts/serp-scripts/duckduckgo.ts b/src-ts/content-scripts/serp-scripts/duckduckgo.ts index 4ecbdd2..ff5a33e 100644 --- a/src-ts/content-scripts/serp-scripts/duckduckgo.ts +++ b/src-ts/content-scripts/serp-scripts/duckduckgo.ts @@ -26,16 +26,9 @@ }); } - /** - * @param {string} adResults - an array of the ad results on the page - * @returns {Array} An array of all the ad links in the ad results - */ - function getAdLinks(adResults: Element[]): Element[] { - const adLinks: Element[] = [] - for (const adResult of adResults) { - adLinks.push(...adResult.querySelectorAll("[href]:not(.report-ad):not(.feedback-prompt [href]):not(.badge--ad__tooltip [href])")) - } - return adLinks + function getIsAdLinkElement(adLinkElement: Element): boolean { + return !!(adLinkElement as any).href && !adLinkElement.matches( + '.report-ad, .report-ad *, .feedback-prompt, .feedback-prompt *, .badge--ad__tooltip, .badge--ad__tooltip *') } /** @@ -116,7 +109,7 @@ determineSearchAreaBottomHeight(); determineOrganicElementsAndAddListeners(getOrganicResults(), getPageNumForElement); - determineAdElementsAndAddListeners(getAdResults(), getAdLinks) + determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) addInternalClickListeners( ".result--more *, #ads > div *, .result--ad *, #links > div[id^='r1-'] *", diff --git a/src-ts/content-scripts/serp-scripts/ecosia.ts b/src-ts/content-scripts/serp-scripts/ecosia.ts index 6daf7e5..4f417d9 100644 --- a/src-ts/content-scripts/serp-scripts/ecosia.ts +++ b/src-ts/content-scripts/serp-scripts/ecosia.ts @@ -28,16 +28,8 @@ return Array.from(document.querySelectorAll(".card-ad > div, .card-productads > div")); } - /** - * @param {string} adResults - an array of the ad results on the page - * @returns {Array} An array of all the ad links in the ad results - */ - function getAdLinks(adResults: Element[]): Element[] { - const adLinks: Element[] = [] - for (const adResult of adResults) { - adLinks.push(...adResult.querySelectorAll("[href]:not(.ad-hint-wrapper [href])")) - } - return adLinks + function getIsAdLinkElement(adLinkElement: Element): boolean { + return !!(adLinkElement as any).href && !adLinkElement.matches('.ad-hint-wrapper, .ad-hint-wrapper *') } /** @@ -90,7 +82,7 @@ determineSearchAreaBottomHeight() determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getAdLinks); + determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); addInternalClickListeners( ".pagination *, div.card-web > div.result *, .card-ad > div, .card-productads > div *", diff --git a/src-ts/content-scripts/serp-scripts/google.ts b/src-ts/content-scripts/serp-scripts/google.ts index 691e11c..0023485 100644 --- a/src-ts/content-scripts/serp-scripts/google.ts +++ b/src-ts/content-scripts/serp-scripts/google.ts @@ -157,4 +157,6 @@ initPageManagerListeners(); registerNewTabListener(); registerModule(moduleName) -})() \ No newline at end of file +})() + +console.log("GOOGLE") \ No newline at end of file diff --git a/src-ts/content-scripts/serp-scripts/yahoo.ts b/src-ts/content-scripts/serp-scripts/yahoo.ts index d990102..a5e1ffd 100644 --- a/src-ts/content-scripts/serp-scripts/yahoo.ts +++ b/src-ts/content-scripts/serp-scripts/yahoo.ts @@ -27,16 +27,8 @@ return Array.from(document.querySelectorAll("ol.searchCenterTopAds > li > .ads, ol.searchCenterBottomAds > li > .ads, ol.searchRightTopAds > li, ol.searchRightMiddleAds > li, ol.searchRightBottomAds > li")) } - /** - * @param {string} adResults - an array of the ad results on the page - * @returns {Array} An array of all the ad links in the ad results - */ - function getAdLinks(adResults: Element[]): Element[] { - const adLinks: Element[] = [] - for (const adResult of adResults) { - adLinks.push(...adResult.querySelectorAll("[href]:not(.p-abs [href])")) - } - return adLinks + function getIsAdLinkElement(adLinkElement: Element): boolean { + return !!(adLinkElement as any).href && !adLinkElement.matches('.p-abs,.p-abs *') } /** @@ -96,7 +88,7 @@ determineSearchAreaBottomHeight() determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getAdLinks); + determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); addInternalClickListeners( ".pagination *, #web > .searchCenterMiddle > li > .algo *, ol.searchCenterTopAds > li > .ads *, ol.searchCenterBottomAds > li > .ads *, ol.searchRightTopAds > li *, ol.searchRightMiddleAds > li *, ol.searchRightBottomAds > li *", From ad22973182497198ced59836fc2d909db1ba61e7 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Mon, 24 May 2021 17:53:49 -0400 Subject: [PATCH 140/399] Updated WebNavigation tracking to use new WebScience PageTransition module --- src-ts/StudyModule.ts | 9 +- src-ts/WebNavigation.ts | 328 +++++++++++++++++++--------------------- 2 files changed, 157 insertions(+), 180 deletions(-) diff --git a/src-ts/StudyModule.ts b/src-ts/StudyModule.ts index 0db8523..f047e0b 100755 --- a/src-ts/StudyModule.ts +++ b/src-ts/StudyModule.ts @@ -26,20 +26,19 @@ export async function startStudy(rallyArg): Promise { storage = await webScience.storage.createKeyValueStorage("WebScience.Studies.SearchBallot") await webScience.pageManager.initialize() - - WebNavigation.initialize(); + WebNavigation.registerWebNavigationTracking(); let initialDataReported = await storage.get("InitialDataReported") + + // Report initial data if we have not done so already if (!initialDataReported) { Initial.reportInitialData(storage); } - - let interventionComplete = await storage.get("InterventionComplete") // If intervention is complete, start recording SERP data. - // Otherwise, conduct initial data collection and run intervention. + // Otherwise, run intervention. if (interventionComplete) { RegularCollection.startDataCollection(storage); } diff --git a/src-ts/WebNavigation.ts b/src-ts/WebNavigation.ts index 4925e82..3155fa2 100755 --- a/src-ts/WebNavigation.ts +++ b/src-ts/WebNavigation.ts @@ -1,216 +1,194 @@ import * as webScience from "@mozilla/web-science"; -/** - * An array of the tracked search engine names - * @type {Array} - * @private - */ -const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] - -/** - * An object that maps each tab to its current page's engine and its current attribution ID - * @type {Object} - * @private - */ -const attributionForTab: { [tabIndex: number]: { currentPageEngine: string; attributionID: string } } = {} - -/** - * An object that maps each attribution ID to its search engine, attribution, and - * whether the search engine sequence began on a SERP - * @type {Object} - * @private - */ -const attributionIdDetails: { [attributionId: string]: { engine: string; attribution: string; } } = {} +// page ID to {attribution, attributionID, and engine} +let pageIdToAttributionData: { + [pageId: string]: + { + attribution: string; + attributionID: string; + engine: string; + transition: string; + } +} = {} /** - * An object that, for each tab, maps the URL of all the visited pages to the - * attribution ID of the page. This is used for determining attribution ID when the user - * navigates through history (ie. with the forward/back button) + * An object that, for each tab, maps URLs to IDs of pages visited in the tab. + * Used to determine the sequence a page visit belongs to if the user navigates with forward/back. * @type {Object} * @private */ -const tabHistoryAttribution: { - [tabIndex: number]: { - [url: string]: string +let tabHistoryPageIds: { + [tabId: number]: { + [normalizedUrl: string]: string } } = {} -export function initialize() { - registerNewTabNavigationListener(); - registerAttributionTrackingListeners(); - registerGetPageAttributionListener(); +let searchEngineDomains = { + Google: ["google.com"], + DuckDuckGo: ["duckduckgo.com"], + Bing: ["bing.com"], + Yahoo: ["yahoo.com"], + Ecosia: ["ecosia.org"], + Ask: ["ask.com"], + Baidu: ["baidu.com"], + Yandex: ["yandex.com", "yandex.ru"], } - -// When a new window or tab is opened from a navigation, sends a message with the URL of the -// opened page to the tab opening the page (used to determine if links are opened in new tabs -// on SERP content scripts) -function registerNewTabNavigationListener(): void { - // TODO: Do I need this? - webScience.messaging.registerSchema("NewTabURL", { - url: "string" - }); - - browser.webNavigation.onCreatedNavigationTarget.addListener((details) => { - webScience.messaging.sendMessageToTab(details.sourceTabId, { - type: "NewTabURL", - url: details.url - }); - }); -} +let searchEngineToMatchPatternSet = {} /** * Registers listeners for webNavigation events that keep track of page attribution details for SERP pages */ -function registerAttributionTrackingListeners(): void { - // TODO: should we be copying history attribution information here? - // Copies the opening tab's attribution information and history attribution information - // to the new tab - browser.webNavigation.onCreatedNavigationTarget.addListener((details) => { - // TODO: make sure these are deep copies - if (details.sourceTabId in attributionForTab) { - attributionForTab[details.tabId] = { ...attributionForTab[details.sourceTabId] } - } - if (details.sourceTabId in tabHistoryAttribution) { - tabHistoryAttribution[details.tabId] = { ...tabHistoryAttribution[details.sourceTabId] } - } - }); +export function registerWebNavigationTracking(): void { + let allEngineMatchPatterns = [] + for (let searchEngine in searchEngineDomains) { + const matchPatternsForSearchEngine = webScience.matching.domainsToMatchPatterns(searchEngineDomains[searchEngine]) + searchEngineToMatchPatternSet[searchEngine] = webScience.matching.createMatchPatternSet(matchPatternsForSearchEngine) + allEngineMatchPatterns = allEngineMatchPatterns.concat(matchPatternsForSearchEngine) + } - // When a page uses the History API to update the URL, update the tabs history attribution - // information with the new URL - browser.webNavigation.onHistoryStateUpdated.addListener((details => { - const urlWithFragmentRemoved = details.url.split("#")[0] - if (!(details.tabId in tabHistoryAttribution)) { - tabHistoryAttribution[details.tabId] = {} + webScience.pageTransition.onPageTransitionData.addListener(pageTransitionDataEvent => { + const engine = getEngineFromURL(pageTransitionDataEvent.url); + const newAttributionID = webScience.id.generateId(); + if (!engine) { + return; } - if (details.tabId in attributionForTab) { - tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] = attributionForTab[details.tabId].attributionID + let pageId = pageTransitionDataEvent.pageId; + let normalizedUrl; + try { + normalizedUrl = webScience.matching.normalizeUrl(pageTransitionDataEvent.url); + } catch (error) { + normalizedUrl = null; + console.error(error); } - })) - // When a navigation is committed, updates attribution information and history attribution - // information for the tab - browser.webNavigation.onCommitted.addListener((details) => { - const engine = getEngineFromURL(details.url); - const newAttributionID = createAttributionID() + const sourcePageAttributionInfo = + pageTransitionDataEvent.tabSourcePageId && pageTransitionDataEvent.tabSourcePageId in pageIdToAttributionData ? + pageIdToAttributionData[pageTransitionDataEvent.tabSourcePageId] : + null; - // If the transition is for a subframe or is a reload, we do not need to update anything - if (details.transitionType === "auto_subframe" || details.transitionType === "manual_subframe" || details.transitionType === "reload") { - return - } + if (pageTransitionDataEvent.transitionQualifiers.includes("forward_back")) { - const urlWithFragmentRemoved = details.url.split("#")[0] + if (pageTransitionDataEvent.isOpenedTab) { + // make deep copy + tabHistoryPageIds[pageTransitionDataEvent.tabId] = { ...tabHistoryPageIds[pageTransitionDataEvent.openerTabId] } + } - // If the navigation occurred through the forward/back button, update the attribution information - // through the history attribution information - if (details.transitionQualifiers.includes("forward_back")) { - if (details.tabId in tabHistoryAttribution && urlWithFragmentRemoved in tabHistoryAttribution[details.tabId]) { - attributionForTab[details.tabId] = { currentPageEngine: engine, attributionID: tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] } + // If the user used the forward or back button to trigger the navigation, then we continue the attribution from the + // most recent visit to the normalized URL in the tab if possible. + if (normalizedUrl && pageTransitionDataEvent.tabId in tabHistoryPageIds && + normalizedUrl in tabHistoryPageIds[pageTransitionDataEvent.tabId] && + tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] in pageIdToAttributionData) { + + let historyPageId = tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] + const historyPageAttributionData = pageIdToAttributionData[historyPageId] + pageIdToAttributionData[pageId] = { + attribution: historyPageAttributionData.attribution, + attributionID: historyPageAttributionData.attributionID, + engine: historyPageAttributionData.engine, + transition: "forward_back" + }; } else { - attributionForTab[details.tabId] = { currentPageEngine: engine, attributionID: newAttributionID } - attributionIdDetails[newAttributionID] = { engine: engine, attribution: "forward_back", } + pageIdToAttributionData[pageId] = { + attribution: "forward_back", + attributionID: newAttributionID, + engine: engine, + transition: "forward_back" + }; } - return - } - - let newAttribution: string = null - - // A visit to an engine page is from a new attribution if: - // 1. The transitionType is any of the values associated with navigation from the address bar - // 2. The transitionQualifiers array include "from_address_bar" - // 3. There is not a previous attribution for the tab or the attribution is for a different engine than - // the navigation for the current page - if (engine) { - if (details.transitionType === "keyword_generated" || details.transitionType === "keyword" || details.transitionType === "start_page" || details.transitionType === "auto_bookmark" || details.transitionType === "generated" || details.transitionType === "typed") { - newAttribution = details.transitionType - } else if (details.transitionQualifiers.includes("from_address_bar")) { - newAttribution = "from_address_bar" - } else if (!(details.tabId in attributionForTab) || engine !== attributionForTab[details.tabId].currentPageEngine) { - newAttribution = details.transitionType + } else if (pageTransitionDataEvent.transitionType === "reload" || pageTransitionDataEvent.isHistoryChange) { + // If the transition was due to a form submit or link click, then we copy the attribution information from the source + // page as long as the engine of the source page matches the engine of the current page. If it does not, then + // we cannot determine the attribution. + if (sourcePageAttributionInfo && sourcePageAttributionInfo.engine === engine) { + pageIdToAttributionData[pageId] = { + attribution: sourcePageAttributionInfo.attribution, + attributionID: sourcePageAttributionInfo.attributionID, + engine: engine, + transition: pageTransitionDataEvent.transitionType === "reload" ? "reload" : "historyChange" + } + } else { + pageIdToAttributionData[pageId] = { + attribution: "unknown", + attributionID: newAttributionID, + engine: engine, + transition: pageTransitionDataEvent.transitionType === "reload" ? "reload" : "historyChange" + } } - } - - if (!(details.tabId in tabHistoryAttribution)) { - tabHistoryAttribution[details.tabId] = {} - } - - // Update the attribution information - if (newAttribution || !(details.tabId in attributionForTab)) { - // If there is a new attribution or if there is not previous attribution information for the tab, create a new attribution - attributionForTab[details.tabId] = { currentPageEngine: engine, attributionID: newAttributionID } - tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] = newAttributionID - if (newAttributionID) { - attributionIdDetails[newAttributionID] = { engine: engine, attribution: newAttribution } + } else if (pageTransitionDataEvent.transitionType === "form_submit" || (pageTransitionDataEvent.transitionType === "link" && pageTransitionDataEvent.tabSourceClick)) { + // If the transition was due to a form submit or link click, then we copy the attribution information from the source + // page as long as the engine of the source page matches the engine of the current page. If it does not, then the + // attribution is from link click or form submit from an external site. + if (sourcePageAttributionInfo && sourcePageAttributionInfo.engine === engine) { + pageIdToAttributionData[pageId] = { + attribution: sourcePageAttributionInfo.attribution, + attributionID: sourcePageAttributionInfo.attributionID, + engine: engine, + transition: pageTransitionDataEvent.transitionType + } + } else { + pageIdToAttributionData[pageId] = { + attribution: pageTransitionDataEvent.transitionType, + attributionID: newAttributionID, + engine: engine, + transition: pageTransitionDataEvent.transitionType + } + } + } else if (pageTransitionDataEvent.transitionType !== "link") { + // If pageTransitionDataEvent.transitionType is not "link" (the fallback value for transitionType), + // we can rely on the pageTransitionDataEvent.transitionType value and know that this is a new + // attribution because the transition was not due to a link click or form submit. + pageIdToAttributionData[pageId] = { + attribution: pageTransitionDataEvent.transitionType, + attributionID: newAttributionID, + engine: engine, + transition: pageTransitionDataEvent.transitionType + } + } else if (pageTransitionDataEvent.transitionQualifiers.includes("from_address_bar")) { + // If "from_address_bar" is in transitionQualifiers, this is a new attribution because we + // know the transition was not due to a link click or form submit. + pageIdToAttributionData[pageId] = { + attribution: "from_address_bar", + attributionID: newAttributionID, + engine: engine, + transition: "from_address_bar" } } else { - // Otherwise, continue the current attribution - attributionForTab[details.tabId].currentPageEngine = engine - tabHistoryAttribution[details.tabId][urlWithFragmentRemoved] = attributionForTab[details.tabId].attributionID + // If we reach here, then pageTransitionDataEvent.transitionType is "link" but + // pageTransitionDataEvent.tabSourceClick is false so we assume the transition + // was not actually due to a link click. + pageIdToAttributionData[pageId] = { + attribution: "unknown", + attributionID: newAttributionID, + engine: engine, + transition: "unknown" + } } - }); -} -/** - * Registers a listener for page attribution messages from content scripts that sends a response to the - * messaging content scripts with the attribution ID, attribution, and if the sequence of searches - * started on a SERP page (as opposed to a different page on the search engine) - */ -async function registerGetPageAttributionListener(): Promise { - webScience.messaging.onMessage.addListener((message, sender, sendResponse) => { - if (sender.tab.id in attributionForTab && attributionForTab[sender.tab.id].currentPageEngine === message.searchEngine) { - const attributionID = attributionForTab[sender.tab.id].attributionID - const attribution = attributionIdDetails[attributionID].attribution - sendResponse({ attributionID: attributionID, attribution: attribution }) - } else { - sendResponse({ attributionID: null, attribution: null }) + if (normalizedUrl) { + if (!tabHistoryPageIds[pageTransitionDataEvent.tabId]) tabHistoryPageIds[pageTransitionDataEvent.tabId] = {} + tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] = pageId; } - }, { - type: "GetPageAttribution", - schema: { - searchEngine: "string", + }, + { + matchPatterns: allEngineMatchPatterns, } - }); -} - - -/** - * Creates an attribution ID that will be shared by all SERP pages that can be attributed - * to the same navigation - * @returns {string} An attribution ID - */ -function createAttributionID() { - const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".split(""); - - let str = ""; - for (let i = 0; i < 10; i++) { - str += chars[Math.floor(Math.random() * chars.length)]; - } - return str; + ); } - /** - * Returns the search engine that the URL page is part of - * @param {string} stringUrl - the URL of the page that is being checked - * @returns {string} The name of the search engine that the URL belongs to or + * Returns the search engine that the URL matches + * @param {string} url - the URL of the page that is being checked + * @returns {string|null} The name of the search engine that the URL belongs to or * null if the URL does not belong to any of the tracked engines */ -function getEngineFromURL(stringUrl: string) { - let url: URL = null; - try { - url = new URL(stringUrl) - } catch (error) { - console.error(error) - return null - } - - if (url) { - for (const searchEngine of searchEngines) { - if (url.hostname.toLowerCase().includes(searchEngine.toLowerCase())) { - return searchEngine - } +function getEngineFromURL(url: string): string { + for (let searchEngine in searchEngineToMatchPatternSet) { + const matchPatternSet = searchEngineToMatchPatternSet[searchEngine] + if (matchPatternSet.matches(url)) { + return searchEngine; } } - return null + return null; } \ No newline at end of file From e927851e14e372d18ced4f572d6d4feb01498ac0 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Mon, 24 May 2021 18:12:48 -0400 Subject: [PATCH 141/399] Updated report initial data reporting functionality --- src-ts/Initial.ts | 276 ++++++++++++++++++++++++++++++++++------------ src-ts/Utils.ts | 48 ++------ 2 files changed, 215 insertions(+), 109 deletions(-) diff --git a/src-ts/Initial.ts b/src-ts/Initial.ts index 82bf7e7..8fb7589 100755 --- a/src-ts/Initial.ts +++ b/src-ts/Initial.ts @@ -1,6 +1,10 @@ import * as webScience from "@mozilla/web-science"; import * as Utils from "./Utils.js" +const maxResults = 1000; +let date30DaysAgo; + + export async function reportInitialData(storage) { let initialData = { SurveyId: await webScience.userSurvey.getSurveyId(), @@ -10,91 +14,219 @@ export async function reportInitialData(storage) { HistoryQueries: await getHistoryData() } - console.log(initialData) + console.log(initialData); storage.set("InitialDataReported", true); } +async function getNumGoogleQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "google.com search?", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + const tbm = getQueryVariable(historyItem.url, "tbm") + if (tbm) { + continue + } -/** - * Collects the number of visits to SERP pages over the - * previous 30 days for each of the tracked search engines - */ -async function getHistoryData(): Promise> { - const date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 30)); - - // TODO: update these values - const searchEngineToSerpUrlDetailsObject = { - Google: { searchQuery: "google.com search?", parameters: ["q", "query"] }, - DuckDuckGo: { searchQuery: "duckduckgo.com ia=web q=", parameters: ["q"] }, - Bing: { searchQuery: "bing.com/search?", parameters: ["q"] }, - Yahoo: { searchQuery: "search.yahoo.com/search", parameters: ["p", "q", "query"] }, - Ecosia: { searchQuery: "ecosia.org/search?", parameters: ["q"] }, - Yandex: { searchQuery: "yandex. /search", parameters: ["text"] }, - Ask: { searchQuery: "ask.com/web?", parameters: ["q", "query"] }, - Baidu: { searchQuery: "baidu.com/s?", parameters: ["wd", "word"] }, - } + const tbs = getQueryVariable(historyItem.url, "tbs") + if (tbs && !tbs.startsWith("qdr") && !tbs.startsWith("li") && !tbs.startsWith("cdr")) { + continue + } - const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [] - - // Collects the number of unique queries made to each search engine over the past 30 days - for (const engine in searchEngineToSerpUrlDetailsObject) { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: searchEngineToSerpUrlDetailsObject[engine].searchQuery, startTime: date30DaysAgo, maxResults: 1000 }); - for (const historyItem of historyItems) { - if (historyItem.url) { - if (engine === "Google") { - const tbm = getQueryVariableUtil(historyItem.url, "tbm") - if (tbm) { - continue - } - - const tbs = getQueryVariableUtil(historyItem.url, "tbs") - if (tbs && !tbs.startsWith("qdr") && !tbs.startsWith("li") && !tbs.startsWith("cdr")) { - continue - } + for (const key of ["q", "query"]) { + const query = getQueryVariable(historyItem.url, key); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; } + } + } + } - if (engine === "Yahoo") { - const url = new URL(historyItem.url) - if (url.hostname !== "search.yahoo.com" && url.hostname !== "www.search.yahoo.com") { - continue - } + return searchEngineQuerySet.size; +} +async function getNumDuckDuckGoQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "duckduckgo.com ia=web q=", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + const query = getQueryVariable(historyItem.url, "q"); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; + } + } + } + + return searchEngineQuerySet.size; +} +async function getNumBingQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "bing.com/search?", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + + const query = getQueryVariable(historyItem.url, "q"); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; + } + } + } + + return searchEngineQuerySet.size; +} +async function getNumYahooQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "search.yahoo.com/search", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + + + const url = new URL(historyItem.url) + if (url.hostname !== "search.yahoo.com" && url.hostname !== "www.search.yahoo.com") { + continue + } + + + for (const key of ["p", "q", "query"]) { + const query = getQueryVariable(historyItem.url, key); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; } + } + } + } + + return searchEngineQuerySet.size; +} +async function getNumEcosiaQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "ecosia.org/search?", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + + const query = getQueryVariable(historyItem.url, "q"); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; + } + } + } + + return searchEngineQuerySet.size; +} +async function getNumYandexQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "yandex. /search", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + + const url = new URL(historyItem.url) + if (url.pathname.includes("direct")) { + continue + } + + const query = getQueryVariable(historyItem.url, "text"); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; + } + } + } - if (engine === "Yandex") { - const url = new URL(historyItem.url) - if (url.pathname.includes("direct")) { - continue - } + return searchEngineQuerySet.size; +} +async function getNumAskQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "ask.com/web?", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + + for (const key of ["q", "query"]) { + const query = getQueryVariable(historyItem.url, key); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; } + } + } + } - if (engine === "Baidu") { - const url = new URL(historyItem.url) - if (url.hostname === "baidu.com" || url.hostname === "www.baidu.com") { - const tn = getQueryVariableUtil(historyItem.url, "tn") - if (tn && tn !== "baidu") { - continue - } - } + return searchEngineQuerySet.size; +} +async function getNumBaiduQueries(): Promise { + const searchEngineQuerySet = new Set() + const historyItems = await browser.history.search({ text: "baidu.com/s?", startTime: date30DaysAgo, maxResults: maxResults }); + for (const historyItem of historyItems) { + if (historyItem.url) { + + const url = new URL(historyItem.url) + if (url.hostname === "baidu.com" || url.hostname === "www.baidu.com") { + const tn = getQueryVariable(historyItem.url, "tn") + if (tn && tn !== "baidu") { + continue } + } + - for (const key of searchEngineToSerpUrlDetailsObject[engine].parameters) { - const query = getQueryVariableUtil(historyItem.url, key); - if (query) { - searchEngineQuerySet.add(query); - break; - } + for (const key of ["wd", "word"]) { + const query = getQueryVariable(historyItem.url, key); + if (query) { + searchEngineQuerySet.add(query.toLowerCase()); + break; } } } - - searchEnginesNumHistoryQueries.push({ - SearchEngine: engine, - Queries: searchEngineQuerySet.size - }) } + return searchEngineQuerySet.size; +} + + +/** + * Collects the number of visits to SERP pages over the + * previous 30 days for each of the tracked search engines + */ +async function getHistoryData(): Promise> { + date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 30)); + const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [ + { + SearchEngine: "Google", + Queries: await getNumGoogleQueries() + }, + { + SearchEngine: "DuckDuckGo", + Queries: await getNumDuckDuckGoQueries() + }, + { + SearchEngine: "Bing", + Queries: await getNumBingQueries() + }, + { + SearchEngine: "Yahoo", + Queries: await getNumYahooQueries() + }, + { + SearchEngine: "Ecosia", + Queries: await getNumEcosiaQueries() + }, + { + SearchEngine: "Yandex", + Queries: await getNumYandexQueries() + }, + { + SearchEngine: "Ask", + Queries: await getNumAskQueries() + }, + { + SearchEngine: "Baidu", + Queries: await getNumBaiduQueries() + } + ]; + return searchEnginesNumHistoryQueries; } @@ -105,11 +237,9 @@ async function getHistoryData(): Promise { try { return await browser.experimental.getSearchEngine(); } catch (error) { - return "ERROR" + console.error(error) + return "" } } -let originalHomepage = null; -let originalEngine = null; - -/** - * Revert changes from call to changeSearchEngine. - */ -export async function revertSearchEngine(): Promise { - try { - if (originalHomepage) { - browser.experimental.changeHomepage(originalHomepage); - } - } catch (error) { - console.error(error); - } - +export async function getHomepage(): Promise { try { - if (originalEngine) { - await browser.experimental.changeSearchEngine(originalEngine); - } + return await browser.experimental.getHomepage(); } catch (error) { - console.error(error); + console.error(error) + return "" } } - /** * Change the default search engine. * @param {string} searchEngine - the search engine that the default will be changed to. @@ -42,25 +27,16 @@ export async function revertSearchEngine(): Promise { */ export async function changeSearchEngine(searchEngine: string): Promise { try { - const homepage = await browser.experimental.getHomepage(); - - // If the current home page is a search engine page, change it to the default Firefox homepage - const homepageLowercase = homepage.toLowerCase() - if (homepageLowercase.includes("google") || homepageLowercase.includes("bing") || - homepageLowercase.includes("yahoo") || homepageLowercase.includes("duckduckgo") || - homepageLowercase.includes("ecosia") || homepageLowercase.includes("ask") || - homepageLowercase.includes("baidu") || homepageLowercase.includes("yandex")) { - originalHomepage = homepage; - browser.experimental.changeHomepage("about:home"); - } + await browser.experimental.changeSearchEngine(searchEngine); } catch (error) { - console.error(error); + console.error(error) } +} +export async function changeHomepage(homepage: string): Promise { try { - originalEngine = await getSearchEngine(); - await browser.experimental.changeSearchEngine(searchEngine); + await browser.experimental.changeHomepage(homepage); } catch (error) { console.error(error) } -} +} \ No newline at end of file From e50bf23c9c378924ac0a51a4836350a4a06a71d6 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Mon, 24 May 2021 18:14:52 -0400 Subject: [PATCH 142/399] Removed jquery stuff from .eslintrc.js --- src-ts/.eslintrc.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src-ts/.eslintrc.js b/src-ts/.eslintrc.js index 6b44eae..e63fd87 100644 --- a/src-ts/.eslintrc.js +++ b/src-ts/.eslintrc.js @@ -8,9 +8,7 @@ module.exports = { es6: true, node: true, webextensions: true, - jquery: true, }, - ignorePatterns: [ "jquery.js" ], extends: [ "eslint:recommended", "plugin:import/warnings", From 440c1b411bb52d0491f8f418c399d0ddbba8dd81 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 25 May 2021 10:17:11 -0400 Subject: [PATCH 143/399] Modal intervention functionality --- experimental/api.js | 41 ++++++++++++++++++++++++++----- experimental/schema.json | 25 ++++++++++++++++++- src-ts/Intervention.ts | 12 ++++++++++ src-ts/Modal.ts | 48 +++++++++++++++++++++++++++++++++++++ src-ts/RegularCollection.ts | 2 ++ 5 files changed, 121 insertions(+), 7 deletions(-) create mode 100755 src-ts/Modal.ts diff --git a/experimental/api.js b/experimental/api.js index 7c5f995..af1893f 100644 --- a/experimental/api.js +++ b/experimental/api.js @@ -17,6 +17,40 @@ this.experimental = class extends ExtensionAPI { getAPI() { return { experimental: { + createPopup(searchEngineOld, searchEngineNew, modalPrimaryRevert) { + // Returns whether the search engine should be reverted. + const flags = + Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 + + Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_1; + + if(modalPrimaryRevert) { + const x = Services.prompt.confirmEx( + null, + `Change back to ${searchEngineOld} Search?`, + `Your search engine has been changed to use ${searchEngineNew}.`, + flags, + "Change it back", + "Keep it", + null, + null, + {} + ); + return x === 0; + } else { + const x = Services.prompt.confirmEx( + null, + `Change back to ${searchEngineOld} Search?`, + `Your search engine has been changed to use ${searchEngineNew}.`, + flags, + "Keep it", + "Change it back", + null, + null, + {} + ); + return x === 1; + } + }, /** * Changes the user's default search engine * @@ -94,14 +128,9 @@ this.experimental = class extends ExtensionAPI { * @function */ async getSearchEngine() { - await Services.search.init(); const defaultEngine = await Services.search.getDefault() - if(defaultEngine) { - return defaultEngine.name - } else { - return "" - } + return defaultEngine ? defaultEngine.name : ""; }, /** * Get the user's current default search engine diff --git a/experimental/schema.json b/experimental/schema.json index 092e396..ced72e0 100644 --- a/experimental/schema.json +++ b/experimental/schema.json @@ -2,6 +2,29 @@ { "namespace": "experimental", "functions": [ + { + "name": "createPopup", + "type": "function", + "description": "Create popup", + "async": false, + "parameters": [ + { + "name": "searchEngineOld", + "type": "string", + "description": "The engine that the default search was changed from." + }, + { + "name": "searchEngineNew", + "type": "string", + "description": "The engine that the default search was changed to." + }, + { + "name": "modalPrimaryRevert", + "type": "boolean", + "description": "Whether the revert button is the primary button on the modal dialog." + } + ] + }, { "name": "changeSearchEngine", "type": "function", @@ -39,7 +62,7 @@ "name": "getHomepage", "type": "function", "description": "Get the user's homepage", - "async": true, + "async": false, "parameters": [] } ] diff --git a/src-ts/Intervention.ts b/src-ts/Intervention.ts index 6377b0d..5741d8f 100755 --- a/src-ts/Intervention.ts +++ b/src-ts/Intervention.ts @@ -42,6 +42,14 @@ export async function runIntervention(storageIn): Promise { name: "BallotExtended", weight: 20 }, + { + name: "ModalPrimaryRevert", + weight: 10 + }, + { + name: "ModalSecondaryRevert", + weight: 10 + }, ] } ); @@ -60,6 +68,10 @@ export async function runIntervention(storageIn): Promise { ballotIntervention(6); } else if (interventionType === "BallotExtended") { ballotIntervention(7); + } else if (interventionType === "ModalPrimaryRevert") { + ballotIntervention(6); + } else if (interventionType === "ModalSecondaryRevert") { + ballotIntervention(6); } else { completeIntervention(); } diff --git a/src-ts/Modal.ts b/src-ts/Modal.ts new file mode 100755 index 0000000..0a5f663 --- /dev/null +++ b/src-ts/Modal.ts @@ -0,0 +1,48 @@ +import * as Utils from "./Utils.js" + +let storage; + +let engineChangedFrom; +let engineChangedTo; +let modalPrimaryRevert; + +async function listener(details) { + if (details.transitionType === "generated") { + let currentEngine = await Utils.getSearchEngine(); + if (currentEngine === engineChangedTo) { + const modalAttemptsFromStorage = await storage.get("ModalAttempts"); + let modalAttempts = modalAttemptsFromStorage ? modalAttemptsFromStorage + 1 : 1; + storage.set("ModalAttempts", modalAttempts); + + browser.webNavigation.onCommitted.removeListener(listener); + let choice = await browser.experimental.createPopup(engineChangedFrom, engineChangedTo, modalPrimaryRevert); + if (choice) { + Utils.changeSearchEngine(engineChangedFrom); + } + storage.set("ModalInterventionCompleted", true); + + const modalInterventionData = { + modalAttempts: modalAttempts, + revert: choice + } + console.log(modalInterventionData) + } + } +} + +export async function startModalIntervention(storage_in) { + storage = storage_in; + let interventionType = await storage.get("InterventionType"); + if (interventionType === "ModalPrimaryRevert" || interventionType === "ModalSecondaryRevert") { + let modalInterventionCompleted = await storage.get("ModalInterventionCompleted") + engineChangedFrom = await storage.get("EngineChangedFrom"); + engineChangedTo = await storage.get("EngineChangedTo"); + modalPrimaryRevert = interventionType === "ModalPrimaryRevert"; + if (!modalInterventionCompleted && engineChangedFrom && engineChangedTo) { + if (!engineChangedTo.toLowerCase().includes(engineChangedFrom.toLowerCase()) && + !engineChangedFrom.toLowerCase().includes(engineChangedTo.toLowerCase())) { + browser.webNavigation.onCommitted.addListener(listener); + } + } + } +} \ No newline at end of file diff --git a/src-ts/RegularCollection.ts b/src-ts/RegularCollection.ts index 2d81c52..57e47a3 100755 --- a/src-ts/RegularCollection.ts +++ b/src-ts/RegularCollection.ts @@ -1,6 +1,7 @@ import * as webScience from "@mozilla/web-science"; import * as Utils from "./Utils.js" import * as Survey from "./Survey.js" +import * as Modal from "./Modal.js" import { preLoadScripts, serpScripts } from "./content-scripts-import.js" /** @@ -24,6 +25,7 @@ export async function startDataCollection(storageIn): Promise { webScience.scheduling.onIdleDaily.addListener(reportDailyData); Survey.runSurvey(storage); + Modal.startModalIntervention(storage); await registerContentScriptDataListeners(); registerContentScripts(); } From 143565744bd593d2ed99244a8fced52c2fc72752 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 25 May 2021 10:27:20 -0400 Subject: [PATCH 144/399] updated survey functionality --- src-ts/Survey.ts | 73 ++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 43 deletions(-) diff --git a/src-ts/Survey.ts b/src-ts/Survey.ts index 5b71969..e1e04f2 100755 --- a/src-ts/Survey.ts +++ b/src-ts/Survey.ts @@ -3,9 +3,11 @@ import * as webScience from "@mozilla/web-science"; const millisecondsPerSecond = 1000; const secondsPerDay = 86400; const surveyRemindPeriodDays = 3; -const secondSurveyStartDay = 30; +const daysUntilSecondSurvey = 30; -const surveyData = { + +// TDOD: update these +const surveyConfigData = { initial: { surveyName: "initial", popupNoPromptMessage: "There are currently no available surveys for the study.", @@ -18,8 +20,8 @@ const surveyData = { surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/initial/thankyou", surveyUrl: "https://kartikeyakandula.com/", }, - second: { - surveyName: "second", + final: { + surveyName: "final", popupNoPromptMessage: "No survey prompt message 2", popupPromptMessage: "popupPromptMessage 2", popupIcon: "icons/PrincetonShieldLarge.png", @@ -30,35 +32,24 @@ const surveyData = { surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/final/thankyou", surveyUrl: "https://www.google.com/", }, - secondPlus: { - surveyName: "secondPlus", - popupNoPromptMessage: "No survey prompt message 3", - popupPromptMessage: "popupPromptMessage 3", - popupIcon: "icons/PrincetonShieldLarge.png", - reminderIcon: "icons/PrincetonShieldLarge.png", - reminderInterval: surveyRemindPeriodDays * secondsPerDay, - reminderMessage: "reminderMessage 3", - reminderTitle: "reminderTitle 3", - surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/final/thankyou", - surveyUrl: "https://duckduckgo.com/", - }, } let storage; -async function startSecondSurvey() { - // We get the status of the initial survey before ending the survey and - // starting one of the initial surveys. - const initialSurveyCompleted = await webScience.userSurvey.getSurveyStatus(); +async function startFinalSurvey() { await webScience.userSurvey.endSurvey(); - if (initialSurveyCompleted === "completed") { - // If the initial survey was completed, we set the current survey to be - // the default second survey. - webScience.userSurvey.setSurvey(surveyData.second); + webScience.userSurvey.setSurvey(surveyConfigData.final); +} + +// Max timeout for setTimeout is 0x7FFFFFFF milliseconds (slightly less than 24.9 days) +// so this is needed for a longer timeout +function setFinalSurveyTimeout(delay) { + if (delay > 0x7FFFFFFF) { + setTimeout(function () { setFinalSurveyTimeout(delay - 0x7FFFFFFF) }, 0x7FFFFFFF); } else { - // If the initial survey was not completed, we set the current survey to be - // the second survey with demographic questions from the initial survey - webScience.userSurvey.setSurvey(surveyData.secondPlus); + setTimeout(() => { + startFinalSurvey(); + }, delay); } } @@ -74,28 +65,24 @@ export async function runSurvey(storageIn): Promise { storage.set("InitialSurveyStartTime", initialSurveyStartTime); } - let secondSurveyStartTime = initialSurveyStartTime + (millisecondsPerSecond * secondsPerDay * secondSurveyStartDay); + let finalSurveyStartTime = initialSurveyStartTime + (millisecondsPerSecond * secondsPerDay * daysUntilSecondSurvey); let currentSurvey = await webScience.userSurvey.getSurveyName(); - console.log("SURVEY 1") if (!currentSurvey || - (currentSurvey === surveyData.initial.surveyName && Date.now() <= secondSurveyStartTime)) { + (currentSurvey === surveyConfigData.initial.surveyName && Date.now() <= finalSurveyStartTime)) { // If there is no current survey or the current survey is the initial survey - // and the current time is before the time to start the second survey, we set - // the current survey to be the initial survey and set a timeout to start the second survey. - webScience.userSurvey.setSurvey(surveyData.initial); - console.log(secondSurveyStartTime - Date.now()) - setTimeout(() => { - startSecondSurvey(); - }, 10000); - } else if (currentSurvey === surveyData.initial.surveyName) { - // If the current survey is the initial survey, we start the second survey. - // We only reach here if the current time is after the second survey start time. - startSecondSurvey(); + // and the current time is before the time to start the final survey, we set + // the current survey to be the initial survey and set a timeout to start the final survey. + webScience.userSurvey.setSurvey(surveyConfigData.initial); + setFinalSurveyTimeout(finalSurveyStartTime - Date.now()); + } else if (currentSurvey === surveyConfigData.initial.surveyName) { + // If the current survey is the initial survey, we start the final survey. + // We only reach here if the current time is after the final survey start time. + startFinalSurvey(); } else { // Set the survey to the current survey. - // We only reach here if the current survey is one of the second surveys. - webScience.userSurvey.setSurvey(surveyData[currentSurvey]); + // We only reach here if the current survey is the final survey. + webScience.userSurvey.setSurvey(surveyConfigData[currentSurvey]); } } \ No newline at end of file From 4843c6c80e4e101a48229078088e08652217d0e4 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 25 May 2021 10:52:46 -0400 Subject: [PATCH 145/399] Minor modifications to RegularCollection --- src-ts/RegularCollection.ts | 11 ++++------- src-ts/StudyModule.ts | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src-ts/RegularCollection.ts b/src-ts/RegularCollection.ts index 57e47a3..a99d2b7 100755 --- a/src-ts/RegularCollection.ts +++ b/src-ts/RegularCollection.ts @@ -20,7 +20,7 @@ const searchEngineToQuerySetObject: { [engine: string]: Set } = {} let storage; -export async function startDataCollection(storageIn): Promise { +export async function startCollection(storageIn): Promise { storage = storageIn; webScience.scheduling.onIdleDaily.addListener(reportDailyData); Survey.runSurvey(storage); @@ -92,12 +92,9 @@ async function registerContentScriptDataListeners(): Promise { // Listen for new queries from content scripts webScience.messaging.onMessage.addListener((message) => { - // If the set of queries for the respective search engine does not contain the new query, - // add the query to the set and update the list in storage - if (!searchEngineToQuerySetObject[message.engine].has(message.query)) { - searchEngineToQuerySetObject[message.engine].add(message.query); - storage.set(`${message.engine}Queries`, Array.from(searchEngineToQuerySetObject[message.engine])); - } + // Add the query to the set and update the list in storage + searchEngineToQuerySetObject[message.engine].add(message.query.toLowerCase()); + storage.set(`${message.engine}Queries`, Array.from(searchEngineToQuerySetObject[message.engine])); }, { type: "SERPQuery", schema: { diff --git a/src-ts/StudyModule.ts b/src-ts/StudyModule.ts index f047e0b..d741a1f 100755 --- a/src-ts/StudyModule.ts +++ b/src-ts/StudyModule.ts @@ -40,7 +40,7 @@ export async function startStudy(rallyArg): Promise { // If intervention is complete, start recording SERP data. // Otherwise, run intervention. if (interventionComplete) { - RegularCollection.startDataCollection(storage); + RegularCollection.startCollection(storage); } else { Intervention.runIntervention(storage); From fa7a19c7976e52cb44fb773e22e410999996f4b4 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 25 May 2021 10:55:15 -0400 Subject: [PATCH 146/399] Changes to notice and ballots, ballot shows consistent ordering for user, both have text about homepage changes, etc. --- pages/{search_ballot_4.html => ballot_4.html} | 16 ++- pages/{search_ballot_5.html => ballot_5.html} | 16 ++- pages/{search_ballot_6.html => ballot_6.html} | 24 ++-- pages/{search_ballot_7.html => ballot_7.html} | 22 ++-- pages/css/style.css | 46 +++++++- pages/js/{search_ballot.js => ballot.js} | 54 ++++++--- pages/js/notice.js | 51 ++++++--- pages/notice_2.html | 54 ++++++--- pages/notice_3.html | 69 +++++++----- src-ts/Intervention.ts | 106 +++++++++++++----- 10 files changed, 315 insertions(+), 143 deletions(-) rename pages/{search_ballot_4.html => ballot_4.html} (88%) rename pages/{search_ballot_5.html => ballot_5.html} (90%) rename pages/{search_ballot_6.html => ballot_6.html} (83%) rename pages/{search_ballot_7.html => ballot_7.html} (93%) rename pages/js/{search_ballot.js => ballot.js} (63%) diff --git a/pages/search_ballot_4.html b/pages/ballot_4.html similarity index 88% rename from pages/search_ballot_4.html rename to pages/ballot_4.html index 35792b6..a465040 100644 --- a/pages/search_ballot_4.html +++ b/pages/ballot_4.html @@ -26,11 +26,15 @@
-

Select a Default Search Engine for Firefox

-

These search engines are each used by millions across the globe.

-

You can always select another search engine later. Learn More.

+

Select a Search Engine for Firefox

+

These search engines are each used by millions across the globe. You can always select another + search engine later. + Learn More. +

+
@@ -104,7 +108,7 @@

Yahoo

- + diff --git a/pages/search_ballot_5.html b/pages/ballot_5.html similarity index 90% rename from pages/search_ballot_5.html rename to pages/ballot_5.html index 25af151..4cfa11a 100644 --- a/pages/search_ballot_5.html +++ b/pages/ballot_5.html @@ -26,11 +26,15 @@
-

Select a Default Search Engine for Firefox

-

These search engines are each used by millions across the globe.

-

You can always select another search engine later. Learn More.

+

Select a Search Engine for Firefox

+

These search engines are each used by millions across the globe. You can always select another + search engine later. + Learn More. +

+
@@ -120,7 +124,7 @@

Yahoo

- + diff --git a/pages/search_ballot_6.html b/pages/ballot_6.html similarity index 83% rename from pages/search_ballot_6.html rename to pages/ballot_6.html index acbfede..cc82a7b 100644 --- a/pages/search_ballot_6.html +++ b/pages/ballot_6.html @@ -22,15 +22,23 @@ -
+
-

Select a Default Search Engine for Firefox

-

These search engines are each used by millions across the globe.

-

You can always select another search engine later. Learn More.

+

Select a Search Engine for Firefox

+

+ These search engines are each used by millions across the globe. +

+

+ You can always select another + search engine later in Firefox settings. + Learn More. +

+
@@ -97,13 +105,13 @@

Yahoo

- + diff --git a/pages/search_ballot_7.html b/pages/ballot_7.html similarity index 93% rename from pages/search_ballot_7.html rename to pages/ballot_7.html index 64a3d43..955e272 100644 --- a/pages/search_ballot_7.html +++ b/pages/ballot_7.html @@ -26,14 +26,17 @@
-

Select a Default Search Engine for Firefox

-

These search engines are each used by millions across the globe.

-

You can always select another search engine later. Learn More.

+

Select a Search Engine for Firefox

+

These search engines are each used by millions across the globe. You can always select another + search engine later. + Learn More. +

+
-
@@ -91,11 +94,6 @@

Yahoo

- - - - -
@@ -168,7 +166,7 @@

Ask.com

- + diff --git a/pages/css/style.css b/pages/css/style.css index c5e50a8..d7a3fb5 100644 --- a/pages/css/style.css +++ b/pages/css/style.css @@ -37,17 +37,19 @@ body { } h1 { - font-size: 3.5rem; + font-size: 3rem; + line-height: 1; } h2 { font-size: 2rem; } h3 { - font-size: 2.5rem; + font-size: 2.5rem !important; } h4 { - font-size: 2rem; - font-weight: 700; + font-size: 1.5rem !important; + font-weight: 700 !important; + margin-bottom: 1rem !important; } p { line-height: 1; @@ -83,7 +85,7 @@ p { } .wrapper { - padding-top: 1rem; + padding-top: 2rem; } .footer { @@ -119,3 +121,37 @@ p { .see-more-container { margin-top: 20px; } + + +#notice-logo { + max-height:100px; + margin-bottom: 1rem; +} +.notice-title { + margin-bottom: 2rem; +} + + +#page-container { + position: relative; + min-height: 100vh; +} + +#footer { + position: absolute; + bottom: 0; + width: 100%; + height: 8.5rem; + left: 0; +} + +.content-wrap { + padding-bottom: 15rem; /* Footer height */ +} + +.footer-img { + height: 4rem; +} +#engine-info { + padding-bottom: 2rem; +} diff --git a/pages/js/search_ballot.js b/pages/js/ballot.js similarity index 63% rename from pages/js/search_ballot.js rename to pages/js/ballot.js index e562f50..be99f5d 100644 --- a/pages/js/search_ballot.js +++ b/pages/js/ballot.js @@ -1,4 +1,4 @@ -window.addEventListener("DOMContentLoaded", function () { +window.addEventListener("DOMContentLoaded", async function () { let totalAttentionTime = 0; let previousAttentionStart = 0; let pageHasAttention = false; @@ -16,7 +16,7 @@ window.addEventListener("DOMContentLoaded", function () { } browser.runtime.onMessage.addListener(message => { - if(message.type === "WebScience.Utilities.PageManager.pageAttentionUpdate") { + if(message.type === "webScience.pageManager.pageAttentionUpdate") { pageHasAttention = message.pageHasAttention if(pageHasAttention) { previousAttentionStart = performance.now() @@ -29,26 +29,50 @@ window.addEventListener("DOMContentLoaded", function () { let see_more_clicked = false const details_expanded_set = new Set() - function shuffleArray(array, ordering) { + function shuffleArray(array) { for(let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [ array[ i ], array[ j ] ] = [ array[ j ], array[ i ] ]; - [ ordering[ i ], ordering[ j ] ] = [ ordering[ j ], ordering[ i ] ]; } } - const searchEnginesContainer = document.querySelector(".search-engines") - const engines = Array.from(searchEnginesContainer.children) - const engines_ordering = [] + const ballotDetails = await browser.runtime.sendMessage({ type: "BallotDetails" }) + if(ballotDetails.homepageChange) { + const homepageChangeNotification = document.getElementById("homepage_change"); + if(homepageChangeNotification) homepageChangeNotification.style.display = null; + } + + - for(const engine of engines) { - engines_ordering.push(engine.className) + const engineContainers = document.querySelectorAll(".search-engines > div"); + const engineNames = [] + const engineNameToContainerDict = {} + for(const engineContainer of engineContainers) { + engineNames.push(engineContainer.className) + engineNameToContainerDict[ engineContainer.className ] = engineContainer } - shuffleArray(engines, engines_ordering) + + let engines_ordering = [] + if(ballotDetails.engines_ordering) { + engines_ordering = ballotDetails.engines_ordering + } else { + shuffleArray(engineNames) + engines_ordering = engineNames + browser.runtime.sendMessage({ type: "BallotEngineOrdering", engines_ordering }); + } + + const searchEnginesContainer = document.querySelector(".search-engines") searchEnginesContainer.innerHTML = ""; - const initialEngines = engines.slice(0, 4) - const moreEngines = engines.slice(4) + const randomizedOrderEngineContainers = [] + for(const engine of engines_ordering) { + if(engine in engineNameToContainerDict) { + randomizedOrderEngineContainers.push(engineNameToContainerDict[ engine ]) + } + } + + const initialEngines = randomizedOrderEngineContainers.slice(0, 4) + const moreEngines = randomizedOrderEngineContainers.slice(4) for(const engine of initialEngines) { searchEnginesContainer.append(engine) @@ -61,10 +85,9 @@ window.addEventListener("DOMContentLoaded", function () { } } - // TODO: async here necessary? document.querySelector(".continue").addEventListener("click", async () => { const selected_engine = document.querySelector("input[name=engine-select]:checked").value - await browser.runtime.sendMessage({ type: "SearchBallotResponse", engine: selected_engine, engines_ordering: engines_ordering, see_more_clicked: see_more_clicked, attentionTime: getAttentionTime(), details_expanded: Array.from(details_expanded_set) }); + await browser.runtime.sendMessage({ type: "BallotResponse", engine: selected_engine, engines_ordering, see_more_clicked, attentionTime: getAttentionTime(), details_expanded: Array.from(details_expanded_set) }); window.close(); }); @@ -96,7 +119,4 @@ window.addEventListener("DOMContentLoaded", function () { document.querySelector(".see-more-container").classList.add("hiding") }); }) - - - }); diff --git a/pages/js/notice.js b/pages/js/notice.js index bf29868..0059864 100644 --- a/pages/js/notice.js +++ b/pages/js/notice.js @@ -1,3 +1,10 @@ +const engineDetails = { + DuckDuckGo: "DuckDuckGo doesn't collect or share any of your personal information.", + Google: "Google is the world's most used search engine.", + Bing: "Bing is fast, accurate, and private search from Microsoft.", + Yahoo: "Yahoo connects people with the things they love.", +} + window.addEventListener("DOMContentLoaded", function () { let totalAttentionTime = 0; let previousAttentionStart = 0; @@ -16,7 +23,7 @@ window.addEventListener("DOMContentLoaded", function () { } browser.runtime.onMessage.addListener(message => { - if(message.type === "WebScience.Utilities.PageManager.pageAttentionUpdate") { + if(message.type === "webScience.pageManager.pageAttentionUpdate") { pageHasAttention = message.pageHasAttention if(pageHasAttention) { previousAttentionStart = performance.now() @@ -27,28 +34,42 @@ window.addEventListener("DOMContentLoaded", function () { }); let revert = false; - document.querySelectorAll(".revert").forEach(revertElement => { - revertElement.addEventListener("click", () => { + const revertButton = document.getElementById("revert"); + if(revertButton) { + revertButton.addEventListener("click", () => { revert = true; window.close(); }); - }) + } + browser.runtime.sendMessage({ type: "NoticeDetails" }).then( + response => { + if(response.originalEngine && response.newEngine) { + document.getElementById("engine_change").textContent = ` from ${response.originalEngine} to ${response.newEngine}` + if(response.newEngine in engineDetails) { + document.getElementById('engine-info').style.display = null; + document.getElementById("engine-description").textContent = engineDetails[ response.newEngine ]; - function handleResponse(response) { - if(response.previous && response.current) { - document.querySelector("#engines_notice").textContent = `Your search engine was changed from ${response.previous} to ${response.current}.` - } - } - function handleError(error) { - console.error(`Error: ${error}`); - } + const logo = document.getElementById("notice-logo") + logo.src = `logos/${response.newEngine.toLowerCase()}.png` + logo.alt = `${response.newEngine} logo` + } + } - browser.runtime.sendMessage({ type: "SearchEngineNotice" }).then(handleResponse, handleError); + if(response.homepageChange) { + const revertDescription = document.getElementById("revert_plural"); + if(revertDescription) revertDescription.textContent = "these changes" - window.addEventListener("unload", (event) => { + const homepageChangeNotification = document.getElementById("homepage_change"); + if(homepageChangeNotification) homepageChangeNotification.style.display = null; + } + }, + error => { + console.error(`Error: ${error}`); + }); + + window.addEventListener("unload", (_event) => { browser.runtime.sendMessage({ type: "NoticeResponse", revert: revert, attentionTime: getAttentionTime() }); }); }); - diff --git a/pages/notice_2.html b/pages/notice_2.html index 5791b0b..8785ad5 100644 --- a/pages/notice_2.html +++ b/pages/notice_2.html @@ -21,28 +21,46 @@ - -
-
-
-
-

Change in Search Engine for Firefox

-

Your search engine was changed.

-

You can always select another search engine later. Learn More.

+
+
+
+
+
+

+ + Your search engine was changed + + +

+ +
+ +

+ You can always select another search engine later in Firefox settings. + Learn More. +

+
+
-
-
+
+ +
+
+

This is part of a study conducted by Princeton University and Mozilla.

+ Princeton logo + +
+
+
-
-
-

This is part of a study conducted by Princeton University and Mozilla.

- Princeton logo -
-
diff --git a/pages/notice_3.html b/pages/notice_3.html index b86265a..4933542 100644 --- a/pages/notice_3.html +++ b/pages/notice_3.html @@ -21,37 +21,54 @@ - -
-
-
-
-

Change in Search Engine for Firefox

-

Your search engine was changed.

-

You can always select another search engine later. Learn More.

+
+
+
+
+
+

+ + Your search engine was changed + + +

+ +
+ +

+ You can always select another search engine later in Firefox settings. + Learn More. +

+

+ You can also choose to revert this change now. +

+
+ Close + Revert +
+
+
-
-
-
-
-

You can also revert this change now by clicking the button below.

-
- Revert -
+
+ +
+
+

This is part of a study conducted by Princeton University and Mozilla.

+ Princeton logo +
-
- + + -
-
-

This is part of a study conducted by Princeton University and Mozilla.

- Princeton logo -
-
diff --git a/src-ts/Intervention.ts b/src-ts/Intervention.ts index 5741d8f..24e3012 100755 --- a/src-ts/Intervention.ts +++ b/src-ts/Intervention.ts @@ -77,6 +77,29 @@ export async function runIntervention(storageIn): Promise { } } +async function shouldHomepageChange() { + const homepage = await Utils.getHomepage(); + const homepageLowercase = homepage.toLowerCase() + + const enginesLowercase = ["google", "bing", "yahoo", "duckduckgo", "ecosia", "ask", "baidu", "yandex"] + + if (enginesLowercase.some(engineLowercase => homepageLowercase.includes(engineLowercase))) { + return true; + } + return false; +} + +async function changeEngineAndHomepage(newEngine) { + Utils.changeSearchEngine(newEngine); + + // If the current home page is a search engine page, change it to the default Firefox homepage + if (await shouldHomepageChange()) { + Utils.changeHomepage("about:home") + return true; + } + return false; +} + /** * Conduct one of the two notice interventions. The participant's default search engine will be changed * and they will be presented a notice notifying them of the change @@ -84,8 +107,15 @@ export async function runIntervention(storageIn): Promise { * Should be either 2 or 3. */ async function noticeIntervention(noticeType: number) { - // Determine the participant's default search engine + let noticeShown = await storage.get("NoticeShown"); + if (noticeShown) { + completeIntervention(); + return; + } + + // Determine the participant's original search engine and homepage const originalEngine = await Utils.getSearchEngine(); + const originalHomepage = await Utils.getHomepage(); // Creates a list of options for a new default search engine (excluding the original default) let newSearchEngineOptions = ["Google", "DuckDuckGo", "Yahoo", "Bing"] @@ -95,24 +125,26 @@ async function noticeIntervention(noticeType: number) { // Change the participant's default engine to a random selection from the list of options for a new default const newEngine = newSearchEngineOptions[Math.floor(Math.random() * newSearchEngineOptions.length)]; - Utils.changeSearchEngine(newEngine); + const homepageChange = await changeEngineAndHomepage(newEngine); + + storage.set("EngineChangedFrom", originalEngine); + storage.set("EngineChangedTo", newEngine); // Register a listener that will send a response to the notice page with details of the original engine and new engine // This allows the notice to notify the participant of their original engine and their new engine webScience.messaging.onMessage.addListener((_message, _sender, sendResponse) => { - sendResponse({ previous: originalEngine, current: newEngine }) + sendResponse({ originalEngine, newEngine, homepageChange }) }, { - type: "SearchEngineNotice", + type: "NoticeDetails", schema: {} }); - storage.set("NoticeNewEngine", newEngine) - // Register a listener that will be sent a message when the notice page unloads webScience.messaging.onMessage.addListener((message) => { - // If the participant clicked on the button to revert the change, we restore their original default search engine + // If the participant clicked on the button to revert the change, we restore their original default search engine and homepage if (message.revert) { - Utils.revertSearchEngine(); + Utils.changeHomepage(originalHomepage); + Utils.changeSearchEngine(originalEngine); } storage.set("NoticeInterventionData", { @@ -133,7 +165,7 @@ async function noticeIntervention(noticeType: number) { // Creates a browser tab displaying the notice to the participant browser.tabs.create({ url: `/pages/notice_${noticeType}.html` }); - completeInterventionOnExtensionRestart(); + storage.set("NoticeShown", true) } @@ -143,20 +175,40 @@ async function noticeIntervention(noticeType: number) { * @param {boolean} ballotDesign - Specifies the ballot style that will be shown to the participant. * Should be either 4, 5, 6, or 7. */ -function ballotIntervention(ballotDesign: number) { - storage.get("BallotAttempts").then(ballotAttempts => { - const newBallotAttempts = ballotAttempts ? ballotAttempts + 1 : 1 - storage.set("BallotAttempts", newBallotAttempts) +async function ballotIntervention(ballotDesign: number) { + let ballotAttemptsFromStorage = await storage.get("BallotAttempts"); + + if (ballotAttemptsFromStorage >= 3) { + completeIntervention(); + return; + } + + const homepageChange = await shouldHomepageChange(); + const engines_ordering = await storage.get("BallotEngineOrdering"); - if (newBallotAttempts >= 3) { - completeInterventionOnExtensionRestart(); + webScience.messaging.onMessage.addListener((_message, _sender, sendResponse) => { + sendResponse({ homepageChange, engines_ordering }) + }, { + type: "BallotDetails", + schema: {} + }); + + webScience.messaging.onMessage.addListener(message => { + console.log(message) + storage.set("BallotEngineOrdering", message.engines_ordering); + }, { + type: "BallotEngineOrdering", + schema: { + engines_ordering: "object" } - }) + }); + webScience.messaging.onMessage.addListener(async (message) => { + storage.set("EngineChangedFrom", await Utils.getSearchEngine()); + storage.set("EngineChangedTo", message.engine); - webScience.messaging.onMessage.addListener((message) => { // Modify the participant's default search engine to their ballot response and mark the intervention as complete - Utils.changeSearchEngine(message.engine); + changeEngineAndHomepage(message.engine); storage.set("BallotInterventionData", { SelectedEngine: message.engine, @@ -169,7 +221,7 @@ function ballotIntervention(ballotDesign: number) { // At this point, the intervention is complete completeIntervention(); }, { - type: "SearchBallotResponse", + type: "BallotResponse", schema: { engine: "string", attentionTime: "number", @@ -180,7 +232,10 @@ function ballotIntervention(ballotDesign: number) { }); // Creates a browser tab displaying the search engine ballot to the participant - browser.tabs.create({ url: `/pages/search_ballot_${ballotDesign}.html` }); + browser.tabs.create({ url: `/pages/ballot_${ballotDesign}.html` }); + + const ballotAttempts = ballotAttemptsFromStorage ? ballotAttemptsFromStorage + 1 : 1 + storage.set("BallotAttempts", ballotAttempts) } /** @@ -189,14 +244,5 @@ function ballotIntervention(ballotDesign: number) { */ function completeIntervention() { storage.set("InterventionComplete", true); - RegularCollection.startDataCollection(storage); -} - -/** - * Called when an intervention will be complete upon the next restart of the extension. Sets - * the value of InterventionComplete to true so that regular data collection will start upon - * restart of the extension. - */ -function completeInterventionOnExtensionRestart() { - storage.set("InterventionComplete", true); + RegularCollection.startCollection(storage); } \ No newline at end of file From 24d6d6b3a6dd395311e4f8c0c43128edd5d2a1ec Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 25 May 2021 11:23:17 -0400 Subject: [PATCH 147/399] getHomepage changed to async --- experimental/api.js | 2 +- experimental/schema.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/experimental/api.js b/experimental/api.js index af1893f..125e525 100644 --- a/experimental/api.js +++ b/experimental/api.js @@ -144,7 +144,7 @@ this.experimental = class extends ExtensionAPI { * Get the user's current default search engine * @function */ - getHomepage() { + async getHomepage() { return Services.prefs.getCharPref("browser.startup.homepage") }, diff --git a/experimental/schema.json b/experimental/schema.json index ced72e0..cb2f575 100644 --- a/experimental/schema.json +++ b/experimental/schema.json @@ -62,7 +62,7 @@ "name": "getHomepage", "type": "function", "description": "Get the user's homepage", - "async": false, + "async": true, "parameters": [] } ] From 1c8f3e45e0278213492758a9136998c7dc3c6358 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Wed, 2 Jun 2021 14:24:18 -0400 Subject: [PATCH 148/399] Update README.md to mention GitHub templates --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e8372d2..e01f512 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ This template includes the following files. ## Getting Started Prerequisites: current versions of [Firefox](https://www.mozilla.org/firefox/new/) and [Node.js](https://nodejs.org/). You might find it helpful to install Node.js with a [package manager](https://nodejs.org/en/download/package-manager/), such as [Scoop](https://scoop.sh/) on Windows, [Homebrew](https://brew.sh/) on macOS, or [`apt-get`](https://help.ubuntu.com/community/AptGet/Howto) on Ubuntu Linux. -1. [Fork](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) this repository. +1. Either [fork this repository](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) or [create a new repository from this template](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/creating-a-repository-from-a-template). 2. Update the [WebExtensions manifest](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json) ([`manifest.json`](./manifest.json)) for your study. You should update the [`description`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description), [`author`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author), [`name`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name), [`version`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version), and [`homepage_url`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url) fields. The Rally team will provide a value for the [`browser_specific_settings.gecko.id`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings) field. 3. Update the [Node.js package configuration](https://docs.npmjs.com/cli/v7/configuring-npm/package-json) ([`package.json`](./package.json)) for your study. You should update the `name`, `version`, `description`, `repository`, `keywords`, `author`, `license`, `bugs`, and `homepage` fields. 4. In the forked repository, run [`npm install`](https://docs.npmjs.com/cli/v7/commands/npm-install) to install Node.js package dependencies. A new `node_modules/` directory will be automatically populated with these dependencies. From 8c80b5d6bcd0ec942d877e96dffaae8124e7d77a Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Wed, 2 Jun 2021 15:33:29 -0400 Subject: [PATCH 149/399] Using typescript rollup plugin to compile ts --- .gitignore | 2 +- rollup.config.js | 21 ++----- src-ts/.eslintrc.js | 62 ------------------- src-ts/content-script.ts | 9 --- src-ts/decs.d.ts | 1 - src-ts/types.d.ts | 1 - {src-ts => src}/Initial.ts | 0 {src-ts => src}/Intervention.ts | 0 {src-ts => src}/Modal.ts | 7 +++ {src-ts => src}/RegularCollection.ts | 0 {src-ts => src}/StudyModule.ts | 1 - {src-ts => src}/Survey.ts | 0 {src-ts => src}/TestLogging.ts | 0 {src-ts => src}/Utils.ts | 0 {src-ts => src}/WebNavigation.ts | 0 {src-ts => src}/background.ts | 0 {src-ts => src}/content-scripts-import.ts | 0 {src-ts => src}/content-scripts/common.ts | 15 ++--- {src-ts => src}/content-scripts/interfaces.ts | 0 {src-ts => src}/content-scripts/reporting.ts | 0 .../content-scripts/serp-scripts/ask.ts | 0 .../serp-scripts/askgoogleads.ts | 0 .../content-scripts/serp-scripts/baidu.ts | 0 .../content-scripts/serp-scripts/bing.ts | 0 .../serp-scripts/duckduckgo.ts | 0 .../content-scripts/serp-scripts/ecosia.ts | 0 .../content-scripts/serp-scripts/google.ts | 0 .../content-scripts/serp-scripts/yahoo.ts | 0 .../content-scripts/serp-scripts/yandex.ts | 0 src/decs.d.ts | 2 + tsconfig.json | 4 +- 31 files changed, 23 insertions(+), 102 deletions(-) delete mode 100644 src-ts/.eslintrc.js delete mode 100644 src-ts/content-script.ts delete mode 100644 src-ts/decs.d.ts delete mode 100644 src-ts/types.d.ts rename {src-ts => src}/Initial.ts (100%) rename {src-ts => src}/Intervention.ts (100%) rename {src-ts => src}/Modal.ts (84%) rename {src-ts => src}/RegularCollection.ts (100%) rename {src-ts => src}/StudyModule.ts (99%) rename {src-ts => src}/Survey.ts (100%) rename {src-ts => src}/TestLogging.ts (100%) rename {src-ts => src}/Utils.ts (100%) rename {src-ts => src}/WebNavigation.ts (100%) rename {src-ts => src}/background.ts (100%) rename {src-ts => src}/content-scripts-import.ts (100%) rename {src-ts => src}/content-scripts/common.ts (97%) rename {src-ts => src}/content-scripts/interfaces.ts (100%) rename {src-ts => src}/content-scripts/reporting.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/ask.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/askgoogleads.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/baidu.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/bing.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/duckduckgo.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/ecosia.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/google.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/yahoo.ts (100%) rename {src-ts => src}/content-scripts/serp-scripts/yandex.ts (100%) create mode 100644 src/decs.d.ts diff --git a/.gitignore b/.gitignore index 940a40a..1e4eb24 100644 --- a/.gitignore +++ b/.gitignore @@ -107,7 +107,7 @@ dist web-ext-artifacts/ # Compiled Typescript .js -src/ +compiled-ts/ .DS_Store diff --git a/rollup.config.js b/rollup.config.js index fe9d396..a9629f9 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -5,6 +5,7 @@ import commonjs from "@rollup/plugin-commonjs"; import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; +import typescript from '@rollup/plugin-typescript'; /** * Helper to detect developer mode. @@ -13,12 +14,12 @@ import resolve from "@rollup/plugin-node-resolve"; * @return {Boolean} whether or not developer mode is enabled. */ function isDevMode(cliArgs) { - return Boolean(cliArgs["config-enable-developer-mode"]); + return Boolean(cliArgs[ "config-enable-developer-mode" ]); } export default (cliArgs) => [ { - input: "src/background.js", + input: "src/background.ts", output: { file: "dist/background.js", sourcemap: isDevMode(cliArgs) ? "inline" : false, @@ -34,19 +35,7 @@ export default (cliArgs) => [ browser: true, }), commonjs(), + typescript() ], - }, - { - input: "src/content-script.js", - output: { - file: "dist/content-script.js", - sourcemap: isDevMode(cliArgs) ? "inline" : false, - }, - plugins: [ - resolve({ - browser: true, - }), - commonjs(), - ], - }, + } ]; diff --git a/src-ts/.eslintrc.js b/src-ts/.eslintrc.js deleted file mode 100644 index e63fd87..0000000 --- a/src-ts/.eslintrc.js +++ /dev/null @@ -1,62 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -module.exports = { - env: { - browser: true, - es6: true, - node: true, - webextensions: true, - }, - extends: [ - "eslint:recommended", - "plugin:import/warnings", - "plugin:node/recommended", - "plugin:@typescript-eslint/recommended", - ], - overrides: [ - { - files: "tests/**", - env: { - mocha: true, - }, - extends: [ - "plugin:mocha/recommended", - ], - }, - ], - parserOptions: { - ecmaVersion: 2021, - sourceType: "module", - }, - plugins: [ - "import", - "node", - "mocha", - "@typescript-eslint" - ], - root: true, - rules: { - "node/no-deprecated-api": "error", - "node/no-extraneous-require": "off", - "node/no-missing-import": "off", - "node/no-unpublished-import": "off", - "node/no-unpublished-require": "off", - "node/no-unsupported-features/es-syntax": "off", - "no-multi-spaces": "error", - "no-var": "warn", - "prefer-const": "off", - "no-undef": 'off', - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off" - }, - parser: "@typescript-eslint/parser", - globals: { - ChromeUtils: false, - ExtensionAPI: false, - __ENABLE_DEVELOPER_MODE__: false, - } -}; diff --git a/src-ts/content-script.ts b/src-ts/content-script.ts deleted file mode 100644 index d3673f5..0000000 --- a/src-ts/content-script.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -import "webextension-polyfill"; - -// ... Add more implementation here! - -console.log("Running content script"); diff --git a/src-ts/decs.d.ts b/src-ts/decs.d.ts deleted file mode 100644 index 067faa4..0000000 --- a/src-ts/decs.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module "@mozilla/web-science" \ No newline at end of file diff --git a/src-ts/types.d.ts b/src-ts/types.d.ts deleted file mode 100644 index dc5abd4..0000000 --- a/src-ts/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare const browser; \ No newline at end of file diff --git a/src-ts/Initial.ts b/src/Initial.ts similarity index 100% rename from src-ts/Initial.ts rename to src/Initial.ts diff --git a/src-ts/Intervention.ts b/src/Intervention.ts similarity index 100% rename from src-ts/Intervention.ts rename to src/Intervention.ts diff --git a/src-ts/Modal.ts b/src/Modal.ts similarity index 84% rename from src-ts/Modal.ts rename to src/Modal.ts index 0a5f663..3628388 100755 --- a/src-ts/Modal.ts +++ b/src/Modal.ts @@ -16,6 +16,8 @@ async function listener(details) { browser.webNavigation.onCommitted.removeListener(listener); let choice = await browser.experimental.createPopup(engineChangedFrom, engineChangedTo, modalPrimaryRevert); + + console.log(`MODAL CHOICE: ${choice}`) if (choice) { Utils.changeSearchEngine(engineChangedFrom); } @@ -33,11 +35,16 @@ async function listener(details) { export async function startModalIntervention(storage_in) { storage = storage_in; let interventionType = await storage.get("InterventionType"); + console.log(`Module output intervention type: ${interventionType}`) if (interventionType === "ModalPrimaryRevert" || interventionType === "ModalSecondaryRevert") { let modalInterventionCompleted = await storage.get("ModalInterventionCompleted") engineChangedFrom = await storage.get("EngineChangedFrom"); engineChangedTo = await storage.get("EngineChangedTo"); modalPrimaryRevert = interventionType === "ModalPrimaryRevert"; + + console.log(`Module output modalInterventionCompleted: ${modalInterventionCompleted}`) + console.log(`Module output engineChangedFrom: ${engineChangedFrom}`) + console.log(`Module output engineChangedTo: ${engineChangedTo}`) if (!modalInterventionCompleted && engineChangedFrom && engineChangedTo) { if (!engineChangedTo.toLowerCase().includes(engineChangedFrom.toLowerCase()) && !engineChangedFrom.toLowerCase().includes(engineChangedTo.toLowerCase())) { diff --git a/src-ts/RegularCollection.ts b/src/RegularCollection.ts similarity index 100% rename from src-ts/RegularCollection.ts rename to src/RegularCollection.ts diff --git a/src-ts/StudyModule.ts b/src/StudyModule.ts similarity index 99% rename from src-ts/StudyModule.ts rename to src/StudyModule.ts index d741a1f..02588fd 100755 --- a/src-ts/StudyModule.ts +++ b/src/StudyModule.ts @@ -46,4 +46,3 @@ export async function startStudy(rallyArg): Promise { Intervention.runIntervention(storage); } } - diff --git a/src-ts/Survey.ts b/src/Survey.ts similarity index 100% rename from src-ts/Survey.ts rename to src/Survey.ts diff --git a/src-ts/TestLogging.ts b/src/TestLogging.ts similarity index 100% rename from src-ts/TestLogging.ts rename to src/TestLogging.ts diff --git a/src-ts/Utils.ts b/src/Utils.ts similarity index 100% rename from src-ts/Utils.ts rename to src/Utils.ts diff --git a/src-ts/WebNavigation.ts b/src/WebNavigation.ts similarity index 100% rename from src-ts/WebNavigation.ts rename to src/WebNavigation.ts diff --git a/src-ts/background.ts b/src/background.ts similarity index 100% rename from src-ts/background.ts rename to src/background.ts diff --git a/src-ts/content-scripts-import.ts b/src/content-scripts-import.ts similarity index 100% rename from src-ts/content-scripts-import.ts rename to src/content-scripts-import.ts diff --git a/src-ts/content-scripts/common.ts b/src/content-scripts/common.ts similarity index 97% rename from src-ts/content-scripts/common.ts rename to src/content-scripts/common.ts index 8ac8edd..a67de74 100644 --- a/src-ts/content-scripts/common.ts +++ b/src/content-scripts/common.ts @@ -295,19 +295,16 @@ function resetAttentionTracking() { /** * Retrieve a query string variable from a URL - * @param {string} url - the URL to retrieve the query string variable from + * @param {string} urlString - the URL to retrieve the query string variable from * @param {string} parameter - the parameter of the variable in the URL you want to retrieve * @returns {string} The query string variable in url for the given parameter. If the parameter * does not exist in the URL, returns null. */ -function getQueryVariable(url, variable) { - url = url ? url : window.location.href - variable = variable.replace(/[[\]]/g, "\\$&"); - const regex = new RegExp("[?&]" + variable + "(=([^&#]*)|&|#|$)"), - results = regex.exec(url); - if (!results) return null; - if (!results[2]) return ""; - return decodeURIComponent(results[2].replace(/\+/g, " ")); +function getQueryVariable(urlString, variable) { + urlString = urlString ? urlString : window.location.href + let url = new URL(urlString); + let params = new URLSearchParams(url.search); + return params.get(variable); } /** diff --git a/src-ts/content-scripts/interfaces.ts b/src/content-scripts/interfaces.ts similarity index 100% rename from src-ts/content-scripts/interfaces.ts rename to src/content-scripts/interfaces.ts diff --git a/src-ts/content-scripts/reporting.ts b/src/content-scripts/reporting.ts similarity index 100% rename from src-ts/content-scripts/reporting.ts rename to src/content-scripts/reporting.ts diff --git a/src-ts/content-scripts/serp-scripts/ask.ts b/src/content-scripts/serp-scripts/ask.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/ask.ts rename to src/content-scripts/serp-scripts/ask.ts diff --git a/src-ts/content-scripts/serp-scripts/askgoogleads.ts b/src/content-scripts/serp-scripts/askgoogleads.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/askgoogleads.ts rename to src/content-scripts/serp-scripts/askgoogleads.ts diff --git a/src-ts/content-scripts/serp-scripts/baidu.ts b/src/content-scripts/serp-scripts/baidu.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/baidu.ts rename to src/content-scripts/serp-scripts/baidu.ts diff --git a/src-ts/content-scripts/serp-scripts/bing.ts b/src/content-scripts/serp-scripts/bing.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/bing.ts rename to src/content-scripts/serp-scripts/bing.ts diff --git a/src-ts/content-scripts/serp-scripts/duckduckgo.ts b/src/content-scripts/serp-scripts/duckduckgo.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/duckduckgo.ts rename to src/content-scripts/serp-scripts/duckduckgo.ts diff --git a/src-ts/content-scripts/serp-scripts/ecosia.ts b/src/content-scripts/serp-scripts/ecosia.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/ecosia.ts rename to src/content-scripts/serp-scripts/ecosia.ts diff --git a/src-ts/content-scripts/serp-scripts/google.ts b/src/content-scripts/serp-scripts/google.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/google.ts rename to src/content-scripts/serp-scripts/google.ts diff --git a/src-ts/content-scripts/serp-scripts/yahoo.ts b/src/content-scripts/serp-scripts/yahoo.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/yahoo.ts rename to src/content-scripts/serp-scripts/yahoo.ts diff --git a/src-ts/content-scripts/serp-scripts/yandex.ts b/src/content-scripts/serp-scripts/yandex.ts similarity index 100% rename from src-ts/content-scripts/serp-scripts/yandex.ts rename to src/content-scripts/serp-scripts/yandex.ts diff --git a/src/decs.d.ts b/src/decs.d.ts new file mode 100644 index 0000000..1f626ff --- /dev/null +++ b/src/decs.d.ts @@ -0,0 +1,2 @@ +declare module "@mozilla/web-science"; +declare const browser; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index ac870c1..5e36ae4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,9 +12,9 @@ "noImplicitAny": false, "sourceMap": false, "allowJs": false, - "outDir": "src" + "outDir": "compiled-ts" }, "include": [ - "src-ts/**/*.ts" + "src/**/*.ts" ] } \ No newline at end of file From 22c2641061eb699c5d3d53469e0fe53c91d16697 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Fri, 4 Jun 2021 11:02:01 -0400 Subject: [PATCH 150/399] Split post intervention collection into modules for serp visit collection and daily collection, collecting SERP queries in background instead of content scripts --- ...egularCollection.ts => DailyCollection.ts} | 66 ++--- src/Initial.ts | 235 ++---------------- src/Intervention.ts | 4 +- src/SearchEngineUtils.ts | 214 ++++++++++++++++ src/SerpVisitCollection.ts | 43 ++++ src/StudyModule.ts | 25 +- src/WebNavigation.ts | 39 +-- src/content-scripts/common.ts | 15 -- src/content-scripts/serp-scripts/ask.ts | 4 - src/content-scripts/serp-scripts/baidu.ts | 4 - src/content-scripts/serp-scripts/bing.ts | 4 - .../serp-scripts/duckduckgo.ts | 10 - src/content-scripts/serp-scripts/ecosia.ts | 4 - src/content-scripts/serp-scripts/google.ts | 4 - src/content-scripts/serp-scripts/yahoo.ts | 4 - src/content-scripts/serp-scripts/yandex.ts | 4 - 16 files changed, 324 insertions(+), 355 deletions(-) rename src/{RegularCollection.ts => DailyCollection.ts} (59%) create mode 100755 src/SearchEngineUtils.ts create mode 100755 src/SerpVisitCollection.ts diff --git a/src/RegularCollection.ts b/src/DailyCollection.ts similarity index 59% rename from src/RegularCollection.ts rename to src/DailyCollection.ts index a99d2b7..2f281bb 100755 --- a/src/RegularCollection.ts +++ b/src/DailyCollection.ts @@ -1,8 +1,6 @@ import * as webScience from "@mozilla/web-science"; import * as Utils from "./Utils.js" -import * as Survey from "./Survey.js" -import * as Modal from "./Modal.js" -import { preLoadScripts, serpScripts } from "./content-scripts-import.js" +import * as SearchEngineUtils from "./SearchEngineUtils.js" /** * An array of the tracked search engine names @@ -22,33 +20,9 @@ let storage; export async function startCollection(storageIn): Promise { storage = storageIn; - webScience.scheduling.onIdleDaily.addListener(reportDailyData); - Survey.runSurvey(storage); - - Modal.startModalIntervention(storage); - await registerContentScriptDataListeners(); - registerContentScripts(); -} - -/** - * Register the SERP content scripts and the listeners to store SERP queries and get page attribution details - */ -async function registerContentScripts() { - const siteScripts = [...serpScripts] - - for (const siteScript of siteScripts) { - if (!siteScript.enabled) { - continue - } - - siteScript.args.js = [ - ...preLoadScripts, - ...siteScript.args.js, - ] - siteScript.args["runAt"] = "document_start" - await browser.contentScripts.register(siteScript.args) - } + await registerQueryListener(); + webScience.scheduling.onIdleDaily.addListener(reportDailyData); } /** @@ -83,33 +57,25 @@ async function reportDailyData() { * 2. Registers the listener that gets SERP visit data from content scripts and initializes the SERP visit data * array from storage */ -async function registerContentScriptDataListeners(): Promise { +async function registerQueryListener(): Promise { // Initialize serpQuerySets from the stored list of queries made for each tracked search engines for (const searchEngine of searchEngines) { const queries = await storage.get(`${searchEngine}Queries`) searchEngineToQuerySetObject[searchEngine] = new Set(queries) } - // Listen for new queries from content scripts - webScience.messaging.onMessage.addListener((message) => { - // Add the query to the set and update the list in storage - searchEngineToQuerySetObject[message.engine].add(message.query.toLowerCase()); - storage.set(`${message.engine}Queries`, Array.from(searchEngineToQuerySetObject[message.engine])); - }, { - type: "SERPQuery", - schema: { - engine: "string", - query: "string", - } - }); - // Listen for new SERP visit data from content scripts - webScience.messaging.onMessage.addListener((message) => { - console.log(message); - }, { - type: "SerpVisitData", - schema: { - data: "object", + webScience.pageManager.onPageVisitStart.addListener(pageVisitStartDetails => { + console.log(pageVisitStartDetails.url); + + const engineAndQuery = SearchEngineUtils.getEngineAndQueryFromUrl(pageVisitStartDetails.url); + if (engineAndQuery) { + const engine = engineAndQuery.engine; + const query = engineAndQuery.query; + + // Add the query to the set and update the list in storage + searchEngineToQuerySetObject[engine].add(query); + storage.set(`${engine}Queries`, Array.from(searchEngineToQuerySetObject[engine])); } - }); + }) } \ No newline at end of file diff --git a/src/Initial.ts b/src/Initial.ts index 8fb7589..555e9f8 100755 --- a/src/Initial.ts +++ b/src/Initial.ts @@ -1,8 +1,8 @@ import * as webScience from "@mozilla/web-science"; import * as Utils from "./Utils.js" +import * as SearchEngineUtils from "./SearchEngineUtils.js" const maxResults = 1000; -let date30DaysAgo; export async function reportInitialData(storage) { @@ -19,227 +19,40 @@ export async function reportInitialData(storage) { storage.set("InitialDataReported", true); } -async function getNumGoogleQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "google.com search?", startTime: date30DaysAgo, maxResults: maxResults }); - for (const historyItem of historyItems) { - if (historyItem.url) { - const tbm = getQueryVariable(historyItem.url, "tbm") - if (tbm) { - continue - } - - const tbs = getQueryVariable(historyItem.url, "tbs") - if (tbs && !tbs.startsWith("qdr") && !tbs.startsWith("li") && !tbs.startsWith("cdr")) { - continue - } - - for (const key of ["q", "query"]) { - const query = getQueryVariable(historyItem.url, key); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } - } - } - - return searchEngineQuerySet.size; -} -async function getNumDuckDuckGoQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "duckduckgo.com ia=web q=", startTime: date30DaysAgo, maxResults: maxResults }); - for (const historyItem of historyItems) { - if (historyItem.url) { - const query = getQueryVariable(historyItem.url, "q"); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } - } - - return searchEngineQuerySet.size; -} -async function getNumBingQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "bing.com/search?", startTime: date30DaysAgo, maxResults: maxResults }); - for (const historyItem of historyItems) { - if (historyItem.url) { - - const query = getQueryVariable(historyItem.url, "q"); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } - } - - return searchEngineQuerySet.size; -} -async function getNumYahooQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "search.yahoo.com/search", startTime: date30DaysAgo, maxResults: maxResults }); - for (const historyItem of historyItems) { - if (historyItem.url) { - - - const url = new URL(historyItem.url) - if (url.hostname !== "search.yahoo.com" && url.hostname !== "www.search.yahoo.com") { - continue - } - - - for (const key of ["p", "q", "query"]) { - const query = getQueryVariable(historyItem.url, key); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } - } - } - - return searchEngineQuerySet.size; -} -async function getNumEcosiaQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "ecosia.org/search?", startTime: date30DaysAgo, maxResults: maxResults }); - for (const historyItem of historyItems) { - if (historyItem.url) { - - const query = getQueryVariable(historyItem.url, "q"); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } - } +const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] - return searchEngineQuerySet.size; -} -async function getNumYandexQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "yandex. /search", startTime: date30DaysAgo, maxResults: maxResults }); - for (const historyItem of historyItems) { - if (historyItem.url) { +/** + * Collects the number of visits to SERP pages over the + * previous 30 days for each of the tracked search engines + */ +async function getHistoryData(): Promise> { + // const date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 30)); + const date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 1)); + const historyItems = await browser.history.search({ text: "", startTime: date30DaysAgo, maxResults: maxResults }); - const url = new URL(historyItem.url) - if (url.pathname.includes("direct")) { - continue - } + const searchEngineQuerySets = {} - const query = getQueryVariable(historyItem.url, "text"); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } + for (const searchEngine of searchEngines) { + searchEngineQuerySets[searchEngine] = new Set(); } - return searchEngineQuerySet.size; -} -async function getNumAskQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "ask.com/web?", startTime: date30DaysAgo, maxResults: maxResults }); for (const historyItem of historyItems) { - if (historyItem.url) { - - for (const key of ["q", "query"]) { - const query = getQueryVariable(historyItem.url, key); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } + const engineAndQuery = SearchEngineUtils.getEngineAndQueryFromUrl(historyItem.url); + if (engineAndQuery) { + searchEngineQuerySets[engineAndQuery.engine].add(engineAndQuery.query); } } - return searchEngineQuerySet.size; -} -async function getNumBaiduQueries(): Promise { - const searchEngineQuerySet = new Set() - const historyItems = await browser.history.search({ text: "baidu.com/s?", startTime: date30DaysAgo, maxResults: maxResults }); - for (const historyItem of historyItems) { - if (historyItem.url) { - - const url = new URL(historyItem.url) - if (url.hostname === "baidu.com" || url.hostname === "www.baidu.com") { - const tn = getQueryVariable(historyItem.url, "tn") - if (tn && tn !== "baidu") { - continue - } - } - - - for (const key of ["wd", "word"]) { - const query = getQueryVariable(historyItem.url, key); - if (query) { - searchEngineQuerySet.add(query.toLowerCase()); - break; - } - } - } - } - - return searchEngineQuerySet.size; -} - - -/** - * Collects the number of visits to SERP pages over the - * previous 30 days for each of the tracked search engines - */ -async function getHistoryData(): Promise> { - date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 30)); const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [ - { - SearchEngine: "Google", - Queries: await getNumGoogleQueries() - }, - { - SearchEngine: "DuckDuckGo", - Queries: await getNumDuckDuckGoQueries() - }, - { - SearchEngine: "Bing", - Queries: await getNumBingQueries() - }, - { - SearchEngine: "Yahoo", - Queries: await getNumYahooQueries() - }, - { - SearchEngine: "Ecosia", - Queries: await getNumEcosiaQueries() - }, - { - SearchEngine: "Yandex", - Queries: await getNumYandexQueries() - }, - { - SearchEngine: "Ask", - Queries: await getNumAskQueries() - }, - { - SearchEngine: "Baidu", - Queries: await getNumBaiduQueries() - } + { SearchEngine: "Google", Queries: searchEngineQuerySets["Google"].size }, + { SearchEngine: "DuckDuckGo", Queries: searchEngineQuerySets["DuckDuckGo"].size }, + { SearchEngine: "Bing", Queries: searchEngineQuerySets["Bing"].size }, + { SearchEngine: "Yahoo", Queries: searchEngineQuerySets["Yahoo"].size }, + { SearchEngine: "Ecosia", Queries: searchEngineQuerySets["Ecosia"].size }, + { SearchEngine: "Yandex", Queries: searchEngineQuerySets["Yandex"].size }, + { SearchEngine: "Ask", Queries: searchEngineQuerySets["Ask"].size }, + { SearchEngine: "Baidu", Queries: searchEngineQuerySets["Baidu"].size } ]; return searchEnginesNumHistoryQueries; -} - -/** - * Retrieve a query string variable from a URL - * @param {string} url - the URL to retrieve the query string variable from - * @param {string} parameter - the parameter of the variable in the URL you want to retrieve - * @returns {string} The query string variable in url for the given parameter. If the parameter - * does not exist in the URL, returns null. - */ -function getQueryVariable(urlString, variable) { - urlString = urlString ? urlString : window.location.href - let url = new URL(urlString); - let params = new URLSearchParams(url.search); - return params.get(variable); } \ No newline at end of file diff --git a/src/Intervention.ts b/src/Intervention.ts index 24e3012..37cad13 100755 --- a/src/Intervention.ts +++ b/src/Intervention.ts @@ -1,5 +1,5 @@ import * as webScience from "@mozilla/web-science"; -import * as RegularCollection from "./RegularCollection.js" +import * as StudyModule from "./StudyModule.js" import * as Utils from "./Utils.js" let storage; @@ -244,5 +244,5 @@ async function ballotIntervention(ballotDesign: number) { */ function completeIntervention() { storage.set("InterventionComplete", true); - RegularCollection.startCollection(storage); + StudyModule.postInterventionFunctionality(); } \ No newline at end of file diff --git a/src/SearchEngineUtils.ts b/src/SearchEngineUtils.ts new file mode 100755 index 0000000..45b6edb --- /dev/null +++ b/src/SearchEngineUtils.ts @@ -0,0 +1,214 @@ +import * as webScience from "@mozilla/web-science"; + +let searchEngineDomains = { + Google: { + domains: ["google.com"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + DuckDuckGo: { + domains: ["duckduckgo.com"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?duckduckgo\.com(?::[0-9]+)?(?:\/.*)?(?:\?.*)?(?:#.*)?$)/i + }, + Bing: { + domains: ["bing.com"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Yahoo: { + domains: ["yahoo.com"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Ecosia: { + domains: ["ecosia.org"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Ask: { + domains: ["ask.com"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Baidu: { + domains: ["baidu.com"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Yandex: { + domains: ["yandex.com", "yandex.ru"], + regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?yandex\.(?:ru|com)(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, +} + +/** + * An object that maps each tracked engine to the match pattern set for its domains. + * @type {Object} + * @private + */ +let domainMatchPatternSets = {} + +let allTrackedEngineMatchPatterns = [] + +export function initialize(): void { + for (let searchEngine in searchEngineDomains) { + const domainMatchPatterns = webScience.matching.domainsToMatchPatterns(searchEngineDomains[searchEngine].domains) + domainMatchPatternSets[searchEngine] = webScience.matching.createMatchPatternSet(domainMatchPatterns) + allTrackedEngineMatchPatterns = allTrackedEngineMatchPatterns.concat(domainMatchPatterns) + } +} + +export function getTrackedEnginesMatchPatterns(): string[] { + return allTrackedEngineMatchPatterns; +} + +/** + * Returns the search engine that the URL matches + * @param {string} url - the URL of the page that is being checked + * @returns {string|null} The name of the search engine that the URL belongs to or + * null if the URL does not belong to any of the tracked engines + */ +export function getEngineFromURL(url: string): string { + for (let searchEngine in domainMatchPatternSets) { + const matchPatternSetForEngine = domainMatchPatternSets[searchEngine] + if (matchPatternSetForEngine.matches(url)) { + return searchEngine; + } + } + return null; +} + +function getEngineFromSearchURL(url: string): string { + for (let searchEngine in searchEngineDomains) { + if (url.match(searchEngineDomains[searchEngine].regExp)) { + return searchEngine; + } + } + return null; +} + +export function getEngineAndQueryFromUrl(url: string): { engine: string, query: string } { + const searchEngine = getEngineFromSearchURL(url); + if (searchEngine) { + let query = null; + if (searchEngine === "Google") { + query = getGoogleQuery(url); + } else if (searchEngine === "DuckDuckGo") { + query = getDuckDuckGoQuery(url); + } else if (searchEngine === "Bing") { + query = getBingQuery(url); + } else if (searchEngine === "Yahoo") { + query = getYahooQuery(url); + } else if (searchEngine === "Ecosia") { + query = getEcosiaQuery(url); + } else if (searchEngine === "Ask") { + query = getAskQuery(url); + } else if (searchEngine === "Baidu") { + query = getBaiduQuery(url); + } else if (searchEngine === "Yandex") { + query = getYandexQuery(url); + } + + if (query) { + return { engine: searchEngine, query: query }; + } + } + + return null; +} + +function getGoogleQuery(url: string): string { + console.log(url) + const tbm = getQueryVariable(url, "tbm") + if (!tbm) { + for (const key of ["q", "query"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } + } + } + return null; +} +function getDuckDuckGoQuery(url: string): string { + const iaType = getQueryVariable(url, "ia") + const iaxType = getQueryVariable(url, "iax") + const iaxmType = getQueryVariable(url, "iaxm") + + if (iaType && !iaxType && !iaxmType) { + const pathname = (new URL(url)).pathname + const pathnameSplit = pathname.split("/") + if (pathnameSplit.length === 2 && pathnameSplit[1]) { + const query = decodeURIComponent(pathnameSplit[1].replace(/_/g, " ")) + if (query) { + return query.toLowerCase(); + } + } + + const query = getQueryVariable(url, "q"); + if (query) { + return query.toLowerCase(); + } + } + return null; +} +function getBingQuery(url: string): string { + const query = getQueryVariable(url, "q"); + if (query) { + return query.toLowerCase(); + } + return null; +} +function getYahooQuery(url: string): string { + for (const key of ["p", "q", "query"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } + } + return null; +} +function getEcosiaQuery(url: string): string { + const query = getQueryVariable(url, "q"); + if (query) { + return query.toLowerCase(); + } + return null; +} +function getAskQuery(url: string): string { + for (const key of ["q", "query"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } + } + return null; +} +function getBaiduQuery(url: string): string { + const tn = getQueryVariable(url, "tn") + if (!tn || tn === "baidu") { + for (const key of ["wd", "word"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } + } + } + return null; +} +function getYandexQuery(url: string): string { + if (!webScience.matching.normalizeUrl(url).includes("direct")) { + const query = getQueryVariable(url, "text"); + if (query) { + return query.toLowerCase(); + } + } + return null; +} + +/** + * Retrieve a query string variable from a URL + * @param {string} url - the URL to retrieve the query string variable from + * @param {string} parameter - the parameter of the variable in the URL you want to retrieve + * @returns {string} The query string variable in url for the given parameter. If the parameter + * does not exist in the URL, returns null. + */ +function getQueryVariable(urlString, variable) { + let url = new URL(urlString); + let params = new URLSearchParams(url.search); + return params.get(variable); +} \ No newline at end of file diff --git a/src/SerpVisitCollection.ts b/src/SerpVisitCollection.ts new file mode 100755 index 0000000..36487c2 --- /dev/null +++ b/src/SerpVisitCollection.ts @@ -0,0 +1,43 @@ +import * as webScience from "@mozilla/web-science"; +import { preLoadScripts, serpScripts } from "./content-scripts-import.js" + +export async function startCollection(): Promise { + registerSerpVisitDataListener(); + registerContentScripts(); +} + +/** + * Register the SERP content scripts and the listeners to store SERP queries and get page attribution details + */ +async function registerContentScripts() { + const siteScripts = [...serpScripts] + + for (const siteScript of siteScripts) { + if (!siteScript.enabled) { + continue + } + + siteScript.args.js = [ + ...preLoadScripts, + ...siteScript.args.js, + ] + + siteScript.args["runAt"] = "document_start" + await browser.contentScripts.register(siteScript.args) + } +} + +/** + * Registers the listener that gets SERP visit data from content scripts + */ +function registerSerpVisitDataListener(): void { + // Listen for new SERP visit data from content scripts + webScience.messaging.onMessage.addListener((message) => { + console.log(message); + }, { + type: "SerpVisitData", + schema: { + data: "object", + } + }); +} \ No newline at end of file diff --git a/src/StudyModule.ts b/src/StudyModule.ts index 02588fd..153060d 100755 --- a/src/StudyModule.ts +++ b/src/StudyModule.ts @@ -4,10 +4,14 @@ * @module WebScience.Measurements.SearchBallot */ import * as Intervention from "./Intervention.js" -import * as RegularCollection from "./RegularCollection.js" +import * as SerpVisitCollection from "./SerpVisitCollection.js" +import * as DailyCollection from "./DailyCollection.js" import * as WebNavigation from "./WebNavigation.js" import * as Initial from "./Initial.js" import * as webScience from "@mozilla/web-science"; +import * as Survey from "./Survey.js" +import * as Modal from "./Modal.js" +import * as SearchEngineUtils from "./SearchEngineUtils.js" /** * @type {webScience.storage.KeyValueStorage} @@ -25,8 +29,9 @@ export async function startStudy(rallyArg): Promise { console.debug(rally) storage = await webScience.storage.createKeyValueStorage("WebScience.Studies.SearchBallot") - await webScience.pageManager.initialize() + await webScience.pageManager.initialize(); WebNavigation.registerWebNavigationTracking(); + SearchEngineUtils.initialize(); let initialDataReported = await storage.get("InitialDataReported") @@ -35,14 +40,28 @@ export async function startStudy(rallyArg): Promise { Initial.reportInitialData(storage); } + Initial.reportInitialData(storage); + let interventionComplete = await storage.get("InterventionComplete") // If intervention is complete, start recording SERP data. // Otherwise, run intervention. if (interventionComplete) { - RegularCollection.startCollection(storage); + postInterventionFunctionality(); } else { Intervention.runIntervention(storage); } } + +export async function postInterventionFunctionality() { + console.log("Intervention Complete functionality") + + Modal.startModalIntervention(storage); + + Survey.runSurvey(storage); + + SerpVisitCollection.startCollection(); + DailyCollection.startCollection(storage); +} + diff --git a/src/WebNavigation.ts b/src/WebNavigation.ts index 3155fa2..15f67ac 100755 --- a/src/WebNavigation.ts +++ b/src/WebNavigation.ts @@ -1,4 +1,5 @@ import * as webScience from "@mozilla/web-science"; +import * as SearchEngineUtils from "./SearchEngineUtils.js" // page ID to {attribution, attributionID, and engine} let pageIdToAttributionData: { @@ -23,32 +24,14 @@ let tabHistoryPageIds: { } } = {} -let searchEngineDomains = { - Google: ["google.com"], - DuckDuckGo: ["duckduckgo.com"], - Bing: ["bing.com"], - Yahoo: ["yahoo.com"], - Ecosia: ["ecosia.org"], - Ask: ["ask.com"], - Baidu: ["baidu.com"], - Yandex: ["yandex.com", "yandex.ru"], -} - -let searchEngineToMatchPatternSet = {} - /** * Registers listeners for webNavigation events that keep track of page attribution details for SERP pages */ export function registerWebNavigationTracking(): void { - let allEngineMatchPatterns = [] - for (let searchEngine in searchEngineDomains) { - const matchPatternsForSearchEngine = webScience.matching.domainsToMatchPatterns(searchEngineDomains[searchEngine]) - searchEngineToMatchPatternSet[searchEngine] = webScience.matching.createMatchPatternSet(matchPatternsForSearchEngine) - allEngineMatchPatterns = allEngineMatchPatterns.concat(matchPatternsForSearchEngine) - } + const allEngineMatchPatterns = SearchEngineUtils.getTrackedEnginesMatchPatterns() webScience.pageTransition.onPageTransitionData.addListener(pageTransitionDataEvent => { - const engine = getEngineFromURL(pageTransitionDataEvent.url); + const engine = SearchEngineUtils.getEngineFromURL(pageTransitionDataEvent.url); const newAttributionID = webScience.id.generateId(); if (!engine) { return; @@ -176,19 +159,3 @@ export function registerWebNavigationTracking(): void { } ); } - -/** - * Returns the search engine that the URL matches - * @param {string} url - the URL of the page that is being checked - * @returns {string|null} The name of the search engine that the URL belongs to or - * null if the URL does not belong to any of the tracked engines - */ -function getEngineFromURL(url: string): string { - for (let searchEngine in searchEngineToMatchPatternSet) { - const matchPatternSet = searchEngineToMatchPatternSet[searchEngine] - if (matchPatternSet.matches(url)) { - return searchEngine; - } - } - return null; -} \ No newline at end of file diff --git a/src/content-scripts/common.ts b/src/content-scripts/common.ts index a67de74..9b4785b 100644 --- a/src/content-scripts/common.ts +++ b/src/content-scripts/common.ts @@ -307,21 +307,6 @@ function getQueryVariable(urlString, variable) { return params.get(variable); } -/** - * Gets a query from the URL and sends it to the background page to save - * @param {string} engine - The search engine that the query was made to - * @param {string[]} urlKeys - A list of parameters that the query variable could associated with in the URL - */ -function sendQueryToBackground(engine, urlKeys: Array) { - for (const key of urlKeys) { - const query = getQueryVariable(window.location.href, key); - if (query) { - browser.runtime.sendMessage({ type: "SERPQuery", engine: engine, query: query }); - return; - } - } -} - function determineOrganicElementsAndAddListeners( organicResults: Element[], getPageNumForElement: (Element) => number = () => { return pageNum }) { diff --git a/src/content-scripts/serp-scripts/ask.ts b/src/content-scripts/serp-scripts/ask.ts index 01b7e47..bee6e73 100644 --- a/src/content-scripts/serp-scripts/ask.ts +++ b/src/content-scripts/serp-scripts/ask.ts @@ -99,10 +99,6 @@ getAttributionDetailsFromBackground(moduleName); - if (pageIsCorrect) { - sendQueryToBackground(moduleName, ["q", "query"]); - } - numAskDisplayAds = document.querySelectorAll(".display-ad-block").length } diff --git a/src/content-scripts/serp-scripts/baidu.ts b/src/content-scripts/serp-scripts/baidu.ts index 804686a..8d1832a 100644 --- a/src/content-scripts/serp-scripts/baidu.ts +++ b/src/content-scripts/serp-scripts/baidu.ts @@ -108,10 +108,6 @@ document.querySelectorAll("#container")); getAttributionDetailsFromBackground(moduleName); - - if (pageIsCorrect) { - sendQueryToBackground(moduleName, ["wd", "word"]); - } } const bodyObserver = new MutationObserver(function (_, observer) { diff --git a/src/content-scripts/serp-scripts/bing.ts b/src/content-scripts/serp-scripts/bing.ts index b6b9ebb..4f9e079 100644 --- a/src/content-scripts/serp-scripts/bing.ts +++ b/src/content-scripts/serp-scripts/bing.ts @@ -96,10 +96,6 @@ document.querySelectorAll("#b_content")); getAttributionDetailsFromBackground(moduleName); - - if (pageIsCorrect) { - sendQueryToBackground(moduleName, ["q"]); - } } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/duckduckgo.ts b/src/content-scripts/serp-scripts/duckduckgo.ts index ff5a33e..5280771 100644 --- a/src/content-scripts/serp-scripts/duckduckgo.ts +++ b/src/content-scripts/serp-scripts/duckduckgo.ts @@ -118,16 +118,6 @@ getAttributionDetailsFromBackground(moduleName); - if (getQueryVariable(window.location.href, "q")) { - sendQueryToBackground(moduleName, ["q"]); - } else { - const url = new URL(window.location.href) - const query = decodeURIComponent(url.pathname.substr(1).replace(/_/g, " ")); - if (query) { - browser.runtime.sendMessage({ type: "SERPQuery", engine: moduleName, query: query }); - } - } - domObserver.disconnect(); const container = document.querySelector("#links") if (container) { diff --git a/src/content-scripts/serp-scripts/ecosia.ts b/src/content-scripts/serp-scripts/ecosia.ts index 4f417d9..b54d97d 100644 --- a/src/content-scripts/serp-scripts/ecosia.ts +++ b/src/content-scripts/serp-scripts/ecosia.ts @@ -90,10 +90,6 @@ document.querySelectorAll(".results-wrapper")) getAttributionDetailsFromBackground(moduleName); - - if (pageIsCorrect) { - sendQueryToBackground(moduleName, ["q"]); - } } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/google.ts b/src/content-scripts/serp-scripts/google.ts index 0023485..01b832d 100644 --- a/src/content-scripts/serp-scripts/google.ts +++ b/src/content-scripts/serp-scripts/google.ts @@ -138,10 +138,6 @@ document.querySelectorAll("#rcnt, #appbar, #atvcap")); getAttributionDetailsFromBackground(moduleName); - - if (pageIsCorrect) { - sendQueryToBackground(moduleName, ["q", "query"]); - } } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/yahoo.ts b/src/content-scripts/serp-scripts/yahoo.ts index a5e1ffd..2d364ff 100644 --- a/src/content-scripts/serp-scripts/yahoo.ts +++ b/src/content-scripts/serp-scripts/yahoo.ts @@ -96,10 +96,6 @@ document.querySelectorAll("#bd")); getAttributionDetailsFromBackground(moduleName); - - if (pageIsCorrect) { - sendQueryToBackground(moduleName, ["p", "q", "query"]); - } } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/yandex.ts b/src/content-scripts/serp-scripts/yandex.ts index 19081d1..b35c76c 100644 --- a/src/content-scripts/serp-scripts/yandex.ts +++ b/src/content-scripts/serp-scripts/yandex.ts @@ -92,10 +92,6 @@ document.querySelectorAll(".main")); getAttributionDetailsFromBackground(moduleName); - - if (pageIsCorrect) { - sendQueryToBackground(moduleName, ["text"]); - } } window.addEventListener("DOMContentLoaded", function () { From c43a5b7bc494b5965bb5bb7fea0de6b962e9a156 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Fri, 4 Jun 2021 11:06:10 -0400 Subject: [PATCH 151/399] Changes to ballot description text --- pages/ballot_4.html | 16 ++++++++++------ pages/ballot_5.html | 32 ++++++++++++++++++-------------- pages/ballot_6.html | 10 +++++----- pages/ballot_7.html | 16 ++++++++++------ 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/pages/ballot_4.html b/pages/ballot_4.html index a465040..533fa49 100644 --- a/pages/ballot_4.html +++ b/pages/ballot_4.html @@ -16,19 +16,23 @@ - Search Ballot + Search Engine Choice Screen -
+

Select a Search Engine for Firefox

-

These search engines are each used by millions across the globe. You can always select another - search engine later. +

+ These search engines are each used by millions across the globe. +

+

+ You can always select another + search engine later in Firefox settings. Learn More.

@@ -101,9 +105,9 @@

Yahoo

-
+ diff --git a/pages/ballot_5.html b/pages/ballot_5.html index 4cfa11a..6682e79 100644 --- a/pages/ballot_5.html +++ b/pages/ballot_5.html @@ -16,19 +16,23 @@ - Search Ballot + Search Engine Choice Screen -
+

Select a Search Engine for Firefox

-

These search engines are each used by millions across the globe. You can always select another - search engine later. +

+ These search engines are each used by millions across the globe. +

+

+ You can always select another + search engine later in Firefox settings. Learn More.

@@ -42,10 +46,10 @@
-
+ diff --git a/pages/ballot_6.html b/pages/ballot_6.html index cc82a7b..77e62c3 100644 --- a/pages/ballot_6.html +++ b/pages/ballot_6.html @@ -16,13 +16,13 @@ - Search Ballot + Search Engine Choice Screen -
+
@@ -104,9 +104,9 @@

Yahoo

-
-
- Continue + diff --git a/pages/ballot_7.html b/pages/ballot_7.html index 955e272..c4f5022 100644 --- a/pages/ballot_7.html +++ b/pages/ballot_7.html @@ -16,19 +16,23 @@ - Search Ballot + Search Engine Choice Screen -
+

Select a Search Engine for Firefox

-

These search engines are each used by millions across the globe. You can always select another - search engine later. +

+ These search engines are each used by millions across the globe. +

+

+ You can always select another + search engine later in Firefox settings. Learn More.

@@ -159,9 +163,9 @@

Ask.com

-
+ From 8177167fe8aeda9747f3621f676743e0f7069a23 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Fri, 4 Jun 2021 16:16:56 -0400 Subject: [PATCH 152/399] Removed attribution stuff from content scripts, will be done in background --- src/content-scripts/common.ts | 35 ------------------- src/content-scripts/reporting.ts | 2 -- src/content-scripts/serp-scripts/ask.ts | 2 -- src/content-scripts/serp-scripts/baidu.ts | 2 -- src/content-scripts/serp-scripts/bing.ts | 2 -- .../serp-scripts/duckduckgo.ts | 2 -- src/content-scripts/serp-scripts/ecosia.ts | 2 -- src/content-scripts/serp-scripts/google.ts | 2 -- src/content-scripts/serp-scripts/yahoo.ts | 2 -- src/content-scripts/serp-scripts/yandex.ts | 2 -- 10 files changed, 53 deletions(-) diff --git a/src/content-scripts/common.ts b/src/content-scripts/common.ts index 9b4785b..5ae8af0 100644 --- a/src/content-scripts/common.ts +++ b/src/content-scripts/common.ts @@ -23,18 +23,6 @@ let searchAreaBottomHeight: number = null let lastClickTime: number = null -/** - * The attribution of the current page - * @type {string} - */ -let attribution: string = null - -/** - * The attribution ID of the current page - * @type {string} - */ -let attributionID: string = null - let isInternalLinkFunction: (urlString: string) => boolean = null; @@ -170,29 +158,6 @@ function getNextElementTopHeight(element: Element) { return getElementTopHeight(getNextElement(element)) } -/** - * Sends a message to the background script and receives page attribution information as a response - * @param {string} searchEngine - The search engine of the SERP content script, used for validation in the background - */ -function getAttributionDetailsFromBackground(searchEngine: string) { - if (!attributionID) { - browser.runtime.sendMessage({ type: "GetPageAttribution", searchEngine: searchEngine }).then( - response => { - if (response) { - if ("attribution" in response) { - attribution = response["attribution"]; - } - if ("attributionID" in response) { - attributionID = response["attributionID"]; - } - } - }, - error => { - console.error(`Error: ${error}`); - }); - } -} - /** * Initializes the PageManager listeners and variables */ diff --git a/src/content-scripts/reporting.ts b/src/content-scripts/reporting.ts index 2e8f24a..1f98a6f 100755 --- a/src/content-scripts/reporting.ts +++ b/src/content-scripts/reporting.ts @@ -48,8 +48,6 @@ function reportResults() { SearchEngine: searchEngine, AttentionTime: getAttentionTime(), PageNum: pageNum, - Attribution: attribution, - AttributionID: attributionID, OrganicDetails: organicDetails, OrganicClickDetails: organicClicks, NumAdResults: numAdResults, diff --git a/src/content-scripts/serp-scripts/ask.ts b/src/content-scripts/serp-scripts/ask.ts index bee6e73..8d405d1 100644 --- a/src/content-scripts/serp-scripts/ask.ts +++ b/src/content-scripts/serp-scripts/ask.ts @@ -97,8 +97,6 @@ isInternalLink, document.querySelectorAll(".main")); - getAttributionDetailsFromBackground(moduleName); - numAskDisplayAds = document.querySelectorAll(".display-ad-block").length } diff --git a/src/content-scripts/serp-scripts/baidu.ts b/src/content-scripts/serp-scripts/baidu.ts index 8d1832a..0a13f99 100644 --- a/src/content-scripts/serp-scripts/baidu.ts +++ b/src/content-scripts/serp-scripts/baidu.ts @@ -106,8 +106,6 @@ "#content_left > .result *", isInternalLink, document.querySelectorAll("#container")); - - getAttributionDetailsFromBackground(moduleName); } const bodyObserver = new MutationObserver(function (_, observer) { diff --git a/src/content-scripts/serp-scripts/bing.ts b/src/content-scripts/serp-scripts/bing.ts index 4f9e079..65220c9 100644 --- a/src/content-scripts/serp-scripts/bing.ts +++ b/src/content-scripts/serp-scripts/bing.ts @@ -94,8 +94,6 @@ ".b_pag *, #b_results > li.b_algo *, .b_ad > ul > li *, .b_adLastChild *", isInternalLink, document.querySelectorAll("#b_content")); - - getAttributionDetailsFromBackground(moduleName); } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/duckduckgo.ts b/src/content-scripts/serp-scripts/duckduckgo.ts index 5280771..dcb974f 100644 --- a/src/content-scripts/serp-scripts/duckduckgo.ts +++ b/src/content-scripts/serp-scripts/duckduckgo.ts @@ -116,8 +116,6 @@ isInternalLink, document.querySelectorAll("#zero_click_wrapper, #vertical_wrapper, #web_content_wrapper")); - getAttributionDetailsFromBackground(moduleName); - domObserver.disconnect(); const container = document.querySelector("#links") if (container) { diff --git a/src/content-scripts/serp-scripts/ecosia.ts b/src/content-scripts/serp-scripts/ecosia.ts index b54d97d..bee3b1d 100644 --- a/src/content-scripts/serp-scripts/ecosia.ts +++ b/src/content-scripts/serp-scripts/ecosia.ts @@ -88,8 +88,6 @@ ".pagination *, div.card-web > div.result *, .card-ad > div, .card-productads > div *", isInternalLink, document.querySelectorAll(".results-wrapper")) - - getAttributionDetailsFromBackground(moduleName); } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/google.ts b/src/content-scripts/serp-scripts/google.ts index 01b832d..7bebe6e 100644 --- a/src/content-scripts/serp-scripts/google.ts +++ b/src/content-scripts/serp-scripts/google.ts @@ -136,8 +136,6 @@ "[role=navigation] *, div[class='g']:not(.related-question-pair div[class='g']) *", isInternalLink, document.querySelectorAll("#rcnt, #appbar, #atvcap")); - - getAttributionDetailsFromBackground(moduleName); } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/yahoo.ts b/src/content-scripts/serp-scripts/yahoo.ts index 2d364ff..0d1a6b7 100644 --- a/src/content-scripts/serp-scripts/yahoo.ts +++ b/src/content-scripts/serp-scripts/yahoo.ts @@ -94,8 +94,6 @@ ".pagination *, #web > .searchCenterMiddle > li > .algo *, ol.searchCenterTopAds > li > .ads *, ol.searchCenterBottomAds > li > .ads *, ol.searchRightTopAds > li *, ol.searchRightMiddleAds > li *, ol.searchRightBottomAds > li *", isInternalLink, document.querySelectorAll("#bd")); - - getAttributionDetailsFromBackground(moduleName); } window.addEventListener("DOMContentLoaded", function () { diff --git a/src/content-scripts/serp-scripts/yandex.ts b/src/content-scripts/serp-scripts/yandex.ts index b35c76c..7f69cf5 100644 --- a/src/content-scripts/serp-scripts/yandex.ts +++ b/src/content-scripts/serp-scripts/yandex.ts @@ -90,8 +90,6 @@ ".pager *, .serp-item > .organic *", isInternalLink, document.querySelectorAll(".main")); - - getAttributionDetailsFromBackground(moduleName); } window.addEventListener("DOMContentLoaded", function () { From bdcfe47477e028666ea751a0c2c59d543641748c Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Mon, 7 Jun 2021 16:44:06 -0400 Subject: [PATCH 153/399] Adding WebScience Rollup plugin #130 --- rollup.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rollup.config.js b/rollup.config.js index a0c657c..2e52203 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -10,6 +10,7 @@ import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; import copy from "rollup-plugin-copy"; import globby from "globby"; +import webScienceRollupPlugin from "@mozilla/web-science/rollup-plugin"; /** * Helper to detect developer mode. @@ -39,6 +40,7 @@ export default (cliArgs) => { // Add-on. __ENABLE_DEVELOPER_MODE__: isDevMode(cliArgs), }), + webScienceRollupPlugin(), resolve({ browser: true, }), @@ -81,6 +83,7 @@ export default (cliArgs) => { sourcemap: isDevMode(cliArgs) ? "inline" : false, }, plugins: [ + webScienceRollupPlugin(), resolve({ browser: true, }), From f1fc986680eb92b96e9383c4a257da22c35cd59d Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Mon, 7 Jun 2021 16:59:56 -0400 Subject: [PATCH 154/399] Updating WebScience version in package.json #130 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a34bd13..24fc008 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "devDependencies": { "@mozilla/rally": "^0.6.0", - "@mozilla/web-science": "^0.1.0", + "@mozilla/web-science": "^0.3.0", "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^13.0.0", "@rollup/plugin-replace": "^2.4.2", From 4e8708daf3bf3516f8bab528a4ce7ebf7bae1cb3 Mon Sep 17 00:00:00 2001 From: Jonathan Mayer <382615+jonathanmayer@users.noreply.github.com> Date: Mon, 7 Jun 2021 17:31:44 -0400 Subject: [PATCH 155/399] Updating WebScience version in package.json #130 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 24fc008..02ed9e3 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "devDependencies": { "@mozilla/rally": "^0.6.0", - "@mozilla/web-science": "^0.3.0", + "@mozilla/web-science": "^0.4.0", "@rollup/plugin-commonjs": "^19.0.0", "@rollup/plugin-node-resolve": "^13.0.0", "@rollup/plugin-replace": "^2.4.2", From 1bb97c983b414abba462166d50eaf7a3bd3372e0 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 10 Jun 2021 12:49:37 -0400 Subject: [PATCH 156/399] rolling up content scripts and turned common.js into Typescript module --- rollup.config.js | 75 ++++++-- src/SerpVisitCollection.ts | 18 +- src/content-scripts-import.ts | 27 +-- .../{interfaces.ts => Interface.ts} | 8 +- src/content-scripts/common.ts | 180 +++++++++++++++--- src/content-scripts/reporting.ts | 68 ------- src/content-scripts/serp-scripts/ask.ts | 36 ++-- .../serp-scripts/askgoogleads.ts | 4 +- src/content-scripts/serp-scripts/baidu.ts | 29 +-- src/content-scripts/serp-scripts/bing.ts | 27 +-- .../serp-scripts/duckduckgo.ts | 54 +++--- src/content-scripts/serp-scripts/ecosia.ts | 33 ++-- src/content-scripts/serp-scripts/google.ts | 43 +++-- src/content-scripts/serp-scripts/yahoo.ts | 27 +-- src/content-scripts/serp-scripts/yandex.ts | 34 ++-- 15 files changed, 368 insertions(+), 295 deletions(-) rename src/content-scripts/{interfaces.ts => Interface.ts} (79%) delete mode 100755 src/content-scripts/reporting.ts diff --git a/rollup.config.js b/rollup.config.js index a9629f9..ce8de49 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -2,10 +2,15 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +// This is the Rollup configuration for the study template. It is +// part of the build system, and you should not have to modify it. + import commonjs from "@rollup/plugin-commonjs"; import replace from "@rollup/plugin-replace"; import resolve from "@rollup/plugin-node-resolve"; +import globby from "globby"; import typescript from '@rollup/plugin-typescript'; +import webScienceRollupPlugin from "@mozilla/web-science/rollup-plugin"; /** * Helper to detect developer mode. @@ -17,25 +22,53 @@ function isDevMode(cliArgs) { return Boolean(cliArgs[ "config-enable-developer-mode" ]); } -export default (cliArgs) => [ - { - input: "src/background.ts", - output: { - file: "dist/background.js", - sourcemap: isDevMode(cliArgs) ? "inline" : false, - }, - plugins: [ - replace({ - // In Developer Mode, the study does not submit data and - // gracefully handles communication errors with the Core - // Add-on. - __ENABLE_DEVELOPER_MODE__: isDevMode(cliArgs), - }), - resolve({ - browser: true, - }), - commonjs(), - typescript() - ], +export default (cliArgs) => { + // Configuration for the main background script, src/background.js. + // The script will be output to dist/background.js with any module + // dependencies (your own modules or modules from NPM) bundled in. + const rollupConfig = [ + { + input: "src/background.ts", + output: { + file: "dist/background.js", + sourcemap: isDevMode(cliArgs) ? "inline" : false, + }, + plugins: [ + replace({ + // In Developer Mode, the study does not submit data and + // gracefully handles communication errors with the Core + // Add-on. + __ENABLE_DEVELOPER_MODE__: isDevMode(cliArgs), + }), + resolve({ + browser: true, + }), + commonjs(), + typescript(), + webScienceRollupPlugin(), + ], + } + ]; + + const scriptPaths = globby.sync([ `src/content-scripts/serp-scripts/*.ts` ]); + for(const scriptPath of scriptPaths) { + rollupConfig.push({ + input: scriptPath, + output: { + file: `dist/${scriptPath.slice("src/".length, -3)}.js`, + format: "iife", + sourcemap: isDevMode(cliArgs) ? "inline" : false, + }, + plugins: [ + webScienceRollupPlugin(), + resolve({ + browser: true, + }), + typescript(), + commonjs(), + ], + }); } -]; + + return rollupConfig; +} \ No newline at end of file diff --git a/src/SerpVisitCollection.ts b/src/SerpVisitCollection.ts index 36487c2..40499b6 100755 --- a/src/SerpVisitCollection.ts +++ b/src/SerpVisitCollection.ts @@ -1,5 +1,5 @@ import * as webScience from "@mozilla/web-science"; -import { preLoadScripts, serpScripts } from "./content-scripts-import.js" +import { serpScripts } from "./content-scripts-import.js" export async function startCollection(): Promise { registerSerpVisitDataListener(); @@ -10,20 +10,12 @@ export async function startCollection(): Promise { * Register the SERP content scripts and the listeners to store SERP queries and get page attribution details */ async function registerContentScripts() { - const siteScripts = [...serpScripts] - - for (const siteScript of siteScripts) { - if (!siteScript.enabled) { + for (const serpScript of serpScripts) { + if (!serpScript.enabled) { continue } - - siteScript.args.js = [ - ...preLoadScripts, - ...siteScript.args.js, - ] - - siteScript.args["runAt"] = "document_start" - await browser.contentScripts.register(siteScript.args) + serpScript.args["runAt"] = "document_start" + await browser.contentScripts.register(serpScript.args) } } diff --git a/src/content-scripts-import.ts b/src/content-scripts-import.ts index ba4d4d8..03dc31d 100755 --- a/src/content-scripts-import.ts +++ b/src/content-scripts-import.ts @@ -3,15 +3,6 @@ */ -export const preLoadScripts = [ - { - file: "src/content-scripts/common.js" - }, - { - file: "src/content-scripts/reporting.js" - } -] - /** * The following objects contain: * -- enabled: whether this content script should be loaded @@ -26,63 +17,63 @@ export const serpScripts = [ enabled: true, args: { matches: ["*://*.google.com/search?*"], - js: [{ file: "src/content-scripts/serp-scripts/google.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/google.js" }] } }, { enabled: true, args: { matches: ["*://*.duckduckgo.com/*"], - js: [{ file: "src/content-scripts/serp-scripts/duckduckgo.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/duckduckgo.js" }] } }, { enabled: true, args: { matches: ["*://*.bing.com/search?*"], - js: [{ file: "src/content-scripts/serp-scripts/bing.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/bing.js" }] } }, { enabled: true, args: { matches: ["*://*.search.yahoo.com/search*"], - js: [{ file: "src/content-scripts/serp-scripts/yahoo.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/yahoo.js" }] } }, { enabled: true, args: { matches: ["*://*.ecosia.org/search*"], - js: [{ file: "src/content-scripts/serp-scripts/ecosia.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/ecosia.js" }] } }, { enabled: true, args: { matches: ["*://*.yandex.com/search*", "*://*.yandex.ru/search*"], - js: [{ file: "src/content-scripts/serp-scripts/yandex.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/yandex.js" }] } }, { enabled: true, args: { matches: ["*://*.ask.com/web?*"], - js: [{ file: "src/content-scripts/serp-scripts/ask.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/ask.js" }] } }, { enabled: true, args: { matches: ["*://*.baidu.com/*"], - js: [{ file: "src/content-scripts/serp-scripts/baidu.js" }] + js: [{ file: "dist/content-scripts/serp-scripts/baidu.js" }] } }, { enabled: true, args: { matches: ["*://*.google.com/afs/ads*"], - js: [{ file: "src/content-scripts/serp-scripts/askgoogleads.js" }], + js: [{ file: "dist/content-scripts/serp-scripts/askgoogleads.js" }], "allFrames": true, } }, diff --git a/src/content-scripts/interfaces.ts b/src/content-scripts/Interface.ts similarity index 79% rename from src/content-scripts/interfaces.ts rename to src/content-scripts/Interface.ts index 9814845..5a7341d 100644 --- a/src/content-scripts/interfaces.ts +++ b/src/content-scripts/Interface.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars declare let webScience: { pageManager: { pageId, @@ -12,9 +13,4 @@ declare let webScience: { pageVisitStarted, pageVisitStartTime } -} - -interface Window { - webScience, - pageManagerHasLoaded: any; -} +} \ No newline at end of file diff --git a/src/content-scripts/common.ts b/src/content-scripts/common.ts index 5ae8af0..2f397bf 100644 --- a/src/content-scripts/common.ts +++ b/src/content-scripts/common.ts @@ -1,7 +1,6 @@ /** * Functions for content scripts */ - let pageLoaded = false let organicDetails: Array<{ @@ -16,15 +15,11 @@ let pageNum: number = null let pageIsCorrect = null -let timestamp = Date.now() - let searchAreaTopHeight: number = null let searchAreaBottomHeight: number = null let lastClickTime: number = null -let isInternalLinkFunction: (urlString: string) => boolean = null; - /** * The total attention time of the page except for time since the page has most recently @@ -106,13 +101,77 @@ const organicLinksWithListeners: LinkListenerDetails[] = [] */ const adLinksWithListeners: LinkListenerDetails[] = [] +export function setPageLoaded(pageLoaded_in: boolean) { + pageLoaded = pageLoaded_in; +} + +export function getNumAdClicks() { + return numAdClicks; +} + +export function setNumAdClicks(numAdClicks_in) { + numAdClicks = numAdClicks_in; +} + +export function setPageIsCorrect(pageIsCorrect_in: boolean) { + pageIsCorrect = pageIsCorrect_in; +} + +export function getOrganicDetails() { + return organicDetails; +} + +export function getOrganicClicks() { + return organicClicks; +} + +export function getPageIsCorrect() { + return pageIsCorrect; +} + +export function getNumAdResults() { + return numAdResults; +} + +export function setNumAdResults(numAdResults_in) { + numAdClicks = numAdResults_in; +} + +export function getPageNum() { + return pageNum; +} + +export function setPageNum(pageNum_in: number) { + pageNum = pageNum_in; +} + +export function setSearchAreaTopHeight(searchAreaTopHeight_in: number) { + searchAreaTopHeight = searchAreaTopHeight_in; +} + +export function setSearchAreaBottomHeight(searchAreaBottomHeight_in: number) { + searchAreaBottomHeight = searchAreaBottomHeight_in; +} + +export function getNumInternalClicks() { + return numInternalClicks; +} + +export function getSearchAreaTopHeight() { + return searchAreaTopHeight; +} + +export function getSearchAreaBottomHeight() { + return searchAreaBottomHeight; +} + /** * Retrieves the first matching element given an xpath query * @param {string} xpath - The xpath query * @param {Node} contextNode - The context node for the query * @returns {Element} The first element matching the xpath */ -function getXPathElement(xpath: string, contextNode: Node = document): Element { +export function getXPathElement(xpath: string, contextNode: Node = document): Element { const matchingElement = document.evaluate( xpath, contextNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null @@ -126,7 +185,7 @@ function getXPathElement(xpath: string, contextNode: Node = document): Element { * @param {Node} contextNode - The context node for the query * @returns {Element} An array of all elements matching the xpath query */ -function getXPathElements(xpath: string, contextNode: Node = document): Element[] { +export function getXPathElements(xpath: string, contextNode: Node = document): Element[] { const results: Element[] = []; const query = document.evaluate(xpath, contextNode, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); @@ -143,7 +202,7 @@ function getXPathElements(xpath: string, contextNode: Node = document): Element[ * @param {string} element - The element * @returns {number} The offset from the top */ -function getElementTopHeight(element: Element) { +export function getElementTopHeight(element: Element): number { if (!element) return null return window.pageYOffset + element.getBoundingClientRect().top } @@ -161,7 +220,7 @@ function getNextElementTopHeight(element: Element) { /** * Initializes the PageManager listeners and variables */ -function initPageManagerListeners(asyncLoads = true) { +export function initPageManagerListeners(asyncLoads = true) { function initModule() { registerAttentionListener(); if (asyncLoads) { @@ -170,19 +229,19 @@ function initPageManagerListeners(asyncLoads = true) { } } - if (("webScience" in window) && ("pageManager" in window.webScience)) { + if (("webScience" in window) && ("pageManager" in window["webScience"])) { initModule(); } else { if (!("pageManagerHasLoaded" in window)) { - window.pageManagerHasLoaded = []; + window["pageManagerHasLoaded"] = []; } - window.pageManagerHasLoaded.push(initModule); + window["pageManagerHasLoaded"].push(initModule); } } -function pageVisitEndListener() { +export function pageVisitEndListener() { if (lastClickTime && Date.now() - lastClickTime < 500) { numInternalClicks++; } @@ -196,8 +255,7 @@ function registerPageVisitEndListener() { webScience.pageManager.onPageVisitStop.addListener(pageVisitEndListener); } -function pageVisitStartListener({ timeStamp }) { - timestamp = timeStamp +function pageVisitStartListener() { resetAttentionTracking(); } @@ -209,7 +267,7 @@ function registerPageVisitStartListener() { // In case we miss an initial pageVisitStart event if (webScience.pageManager.pageVisitStarted) { - pageVisitStartListener({ timeStamp: webScience.pageManager.pageVisitStartTime }); + pageVisitStartListener(); } } @@ -217,7 +275,7 @@ function registerPageVisitStartListener() { * Retrieves the total attention time of the page * @returns {number} The total attention time of the page */ -function getAttentionTime() { +export function getAttentionTime() { if (webScience.pageManager.pageHasAttention && previousAttentionStart) { return totalAttentionTime + (performance.now() - previousAttentionStart) } @@ -229,7 +287,7 @@ function getAttentionTime() { /** * Registers the page attention listener that updates total attention time */ -function registerAttentionListener() { +export function registerAttentionListener() { // Update previous start on registration because we might have missed // the initial pageAttentionUpdate event if (webScience.pageManager.pageHasAttention) { @@ -249,7 +307,7 @@ function registerAttentionListener() { /** * Resets attention tracking for new page visits. */ -function resetAttentionTracking() { +export function resetAttentionTracking() { totalAttentionTime = 0 if (webScience.pageManager.pageHasAttention) { previousAttentionStart = performance.now() @@ -265,14 +323,14 @@ function resetAttentionTracking() { * @returns {string} The query string variable in url for the given parameter. If the parameter * does not exist in the URL, returns null. */ -function getQueryVariable(urlString, variable) { +export function getQueryVariable(urlString, variable) { urlString = urlString ? urlString : window.location.href - let url = new URL(urlString); - let params = new URLSearchParams(url.search); + const url = new URL(urlString); + const params = new URLSearchParams(url.search); return params.get(variable); } -function determineOrganicElementsAndAddListeners( +export function determineOrganicElementsAndAddListeners( organicResults: Element[], getPageNumForElement: (Element) => number = () => { return pageNum }) { @@ -320,7 +378,7 @@ function getIsAdLinkDefault(adLinkElement: Element): boolean { * @param {callback} getOrganicResults - Callback to get the organic results of the SERP * @param {callback} getAdResults - Callback to get the ad results of the SERP */ -function determineAdElementsAndAddListeners( +export function determineAdElementsAndAddListeners( adResults: Element[], getIsAdLinkElement: (adLink: Element) => boolean = getIsAdLinkDefault) { // Removes any existing listeners from ad elements that we previously added @@ -338,7 +396,7 @@ function determineAdElementsAndAddListeners( for (const adResult of adResults) { const fnAdMousedownListener = function adMousedownListener(event: Event) { console.log(event.target) - let adLinkElement = (event.target as any) + const adLinkElement = (event.target as any) if (getIsAdLinkElement(adLinkElement)) { const adLink = adLinkElement.href console.log(numAdResults) @@ -371,7 +429,7 @@ function isValidURL(url: string): boolean { } -function addInternalClickListeners( +export function addInternalClickListeners( exclude: string, isInternalLink: (urlString: string) => boolean, searchAreaElements: NodeListOf) { @@ -441,7 +499,7 @@ function urlFilter(url: string) { * Registers listener that will receive the target of navigation of tabs opened from the tab of the SERP page and match the URL * with clicked elements from the SERP page to determine if an element link was opened in a tab */ -function registerNewTabListener() { +export function registerNewTabListener() { browser.runtime.onMessage.addListener((message) => { if (message.type === "NewTabURL") { const encodedMessageURL = urlFilter(encodeURI(message.url)) @@ -482,3 +540,71 @@ function getNextElement(element: Element) { return element.nextElementSibling } + + + + + + + +// An array of registered search engines +const registeredSearchEngines: string[] = [] + +// A callback executed just before reporting +let preReportCallback = null + +/** + * Called by individual search engine modules to register themselves. + * @param {string} searchEngineName - The search engine of the registering module + * @param {callback} preReportCallbackIn - A function to call immediately before reporting + */ +export function registerModule(searchEngineName: string, preReportCallbackIn: () => void = null) { + console.log("Registering " + searchEngineName) + + preReportCallback = preReportCallbackIn + registeredSearchEngines.push(searchEngineName) +} + +/** + * Reports SERP visit data to the background script + */ +export function reportResults() { + if (registeredSearchEngines.length === 0) { + console.log("No registered search engines") + return + } else if (registeredSearchEngines.length > 1) { + console.log("More than one search engine registered!") + return + } + + const searchEngine = registeredSearchEngines[0] + + if (preReportCallback) preReportCallback(); + + // If pageIsCorrect is false, we do not report + if (!getPageIsCorrect()) { + console.log( + "Loaded module " + searchEngine + " is not passing page correctness test" + ) + return + } + + const serpVisitData = { + SearchEngine: searchEngine, + AttentionTime: getAttentionTime(), + PageNum: getPageNum(), + OrganicDetails: getOrganicDetails(), + OrganicClickDetails: getOrganicClicks(), + NumAdResults: getNumAdResults(), + NumAdClicks: getNumAdClicks(), + NumInternalClicks: getNumInternalClicks(), + SearchAreaTopHeight: getSearchAreaTopHeight(), + SearchAreaBottomHeight: getSearchAreaBottomHeight(), + } + + // Send data to background page + browser.runtime.sendMessage({ + type: "SerpVisitData", + data: serpVisitData, + }) +} diff --git a/src/content-scripts/reporting.ts b/src/content-scripts/reporting.ts deleted file mode 100755 index 1f98a6f..0000000 --- a/src/content-scripts/reporting.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * This file contains functions related to reporting results that need to be accessible to content scripts and thus must be loaded prior - */ - -// An array of registered search engines -const registeredSearchEngines: string[] = [] - -// A callback executed just before reporting -let preReportCallback = null - -/** - * Called by individual search engine modules to register themselves. - * @param {string} searchEngineName - The search engine of the registering module - * @param {callback} preReportCallbackIn - A function to call immediately before reporting - */ -function registerModule(searchEngineName: string, preReportCallbackIn: () => void = null) { - console.log("Registering " + searchEngineName) - - preReportCallback = preReportCallbackIn - registeredSearchEngines.push(searchEngineName) -} - -/** - * Reports SERP visit data to the background script - */ -function reportResults() { - if (registeredSearchEngines.length === 0) { - console.log("No registered search engines") - return - } else if (registeredSearchEngines.length > 1) { - console.log("More than one search engine registered!") - return - } - - const searchEngine = registeredSearchEngines[0] - - if (preReportCallback) preReportCallback(); - - // If pageIsCorrect is false, we do not report - if (!pageIsCorrect) { - console.log( - "Loaded module " + searchEngine + " is not passing page correctness test" - ) - return - } - - const serpVisitData = { - SearchEngine: searchEngine, - AttentionTime: getAttentionTime(), - PageNum: pageNum, - OrganicDetails: organicDetails, - OrganicClickDetails: organicClicks, - NumAdResults: numAdResults, - NumAdClicks: numAdClicks, - NumInternalClicks: numInternalClicks, - SearchAreaTopHeight: searchAreaTopHeight, - SearchAreaBottomHeight: searchAreaBottomHeight, - Time: timestamp, - TimeOffset: new Date().getTimezoneOffset(), - } - - // Send data to background page - browser.runtime.sendMessage({ - type: "SerpVisitData", - data: serpVisitData, - }) -} - diff --git a/src/content-scripts/serp-scripts/ask.ts b/src/content-scripts/serp-scripts/ask.ts index 8d405d1..910f924 100644 --- a/src/content-scripts/serp-scripts/ask.ts +++ b/src/content-scripts/serp-scripts/ask.ts @@ -1,3 +1,5 @@ +import * as Common from "../common.js" + /** * Content Scripts for Ask SERP */ @@ -14,7 +16,7 @@ function determinePageIsCorrect(): void { // Do not need to determine if it is web search, Ask does not // have other searches - pageIsCorrect = true + Common.setPageIsCorrect(true) } /** @@ -35,14 +37,14 @@ * Determine the height of the top of the search results area */ function determineSearchAreaTopHeight(): void { - searchAreaTopHeight = getElementTopHeight(document.querySelector(".main")) + Common.setSearchAreaTopHeight(Common.getElementTopHeight(document.querySelector(".main"))); } /** * Determine the height of the bottom of the search results area */ function determineSearchAreaBottomHeight(): void { - searchAreaBottomHeight = getElementTopHeight(document.querySelector(".PartialWebPagination ")) + Common.setSearchAreaBottomHeight(Common.getElementTopHeight(document.querySelector(".PartialWebPagination "))) } /** @@ -50,11 +52,11 @@ */ function determinePageNum() { const url = webScience.pageManager.url - const pageNumberFromUrl = getQueryVariable(url, "page"); + const pageNumberFromUrl = Common.getQueryVariable(url, "page"); if (pageNumberFromUrl) { - pageNum = Number(pageNumberFromUrl) + Common.setPageNum(Number(pageNumberFromUrl)) } else { - pageNum = 1 + Common.setPageNum(1) } } @@ -66,7 +68,7 @@ for (const frame in askFrameToNumAdsObject) { total += askFrameToNumAdsObject[frame] } - numAdResults = total + numAskDisplayAds; + Common.setNumAdResults(total + numAskDisplayAds); } /** @@ -89,10 +91,10 @@ determineSearchAreaTopHeight() determineSearchAreaBottomHeight(); - determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults()); + Common.determineOrganicElementsAndAddListeners(getOrganicResults()); + Common.determineAdElementsAndAddListeners(getAdResults()); - addInternalClickListeners( + Common.addInternalClickListeners( ".PartialWebPagination *, .PartialPageFooter *, .PartialSearchResults-item *, .TopAdsPartial *, .BottomAdsPartial *, .PartialRtkAdSlot-ads *", isInternalLink, document.querySelectorAll(".main")); @@ -110,8 +112,7 @@ console.log(`${event.data.frameID}: ${event.data.numAds}`) askFrameToNumAdsObject[event.data.frameID] = event.data.numAds } else if ("type" in event.data && event.data.type === "adClick") { - numAdClicks += 1 - console.log(numAdClicks) + Common.setNumAdClicks(Common.getNumAdClicks() + 1) } } catch (error) { // console.log("Wrong message type") @@ -126,7 +127,7 @@ window.addEventListener("load", function () { determinePageValues(); - pageLoaded = true + Common.setPageLoaded(true) }); /** @@ -140,7 +141,7 @@ (message.url as string).includes("google.com/aclk?") || (message.url as string).includes("revjet") || (message.url as string).includes("googleadservices.com")) { - numAdClicks++; + Common.setNumAdClicks(Common.getNumAdClicks() + 1) } } }); @@ -154,8 +155,7 @@ registerAskNewTabAdListener(); initializeFrameListener(); - isInternalLinkFunction = isInternalLink; - initPageManagerListeners(); - registerNewTabListener(); - registerModule(moduleName, preReportCallbackAsk) + Common.initPageManagerListeners(); + Common.registerNewTabListener(); + Common.registerModule(moduleName, preReportCallbackAsk) })() \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/askgoogleads.ts b/src/content-scripts/serp-scripts/askgoogleads.ts index 9788d8b..32bed8a 100644 --- a/src/content-scripts/serp-scripts/askgoogleads.ts +++ b/src/content-scripts/serp-scripts/askgoogleads.ts @@ -4,7 +4,7 @@ (async function () { const id = randomStringID(10); - const bodyObserver = new MutationObserver(_mutations => { + const bodyObserver = new MutationObserver(() => { reportAds(); const adBlocks = document.querySelectorAll("#adBlock"); @@ -14,7 +14,7 @@ } }); - const adBlockObserver = new MutationObserver(_mutations => { + const adBlockObserver = new MutationObserver(() => { reportAds(); }); diff --git a/src/content-scripts/serp-scripts/baidu.ts b/src/content-scripts/serp-scripts/baidu.ts index 0a13f99..5d84879 100644 --- a/src/content-scripts/serp-scripts/baidu.ts +++ b/src/content-scripts/serp-scripts/baidu.ts @@ -1,3 +1,5 @@ +import * as Common from "../common.js" + /** * Content Scripts for Baidu SERP */ @@ -11,13 +13,13 @@ function determinePageIsCorrect(): void { const url = new URL(window.location.href) if (url.hostname === "baidu.com" || url.hostname === "www.baidu.com") { - const tn = getQueryVariable(window.location.href, "tn") + const tn = Common.getQueryVariable(window.location.href, "tn") if (!tn || (tn === "baidu")) { - pageIsCorrect = true + Common.setPageIsCorrect(true) return } } - pageIsCorrect = false + Common.setPageIsCorrect(false) } @@ -32,7 +34,7 @@ * @returns {Array} An array of all the ad results on the page */ function getAdResults() { - return getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]") + return Common.getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]") } /** @@ -49,7 +51,7 @@ */ function determineSearchAreaTopHeight(): void { const element = (document.querySelector("#s_tab") as HTMLElement) - searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** @@ -57,7 +59,7 @@ */ function determineSearchAreaBottomHeight(): void { const element = (document.querySelector("#container") as HTMLElement) - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** @@ -65,7 +67,7 @@ */ function determinePageNum(): void { const pageNumElement = document.querySelector("strong > .pc") - pageNum = pageNumElement ? Number(pageNumElement.textContent) : -1; + Common.setPageNum(pageNumElement ? Number(pageNumElement.textContent) : -1) } /** @@ -99,10 +101,10 @@ determineSearchAreaTopHeight() determineSearchAreaBottomHeight(); - determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) + Common.determineOrganicElementsAndAddListeners(getOrganicResults()); + Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) - addInternalClickListeners( + Common.addInternalClickListeners( "#content_left > .result *", isInternalLink, document.querySelectorAll("#container")); @@ -131,8 +133,7 @@ determinePageValues(); }); - isInternalLinkFunction = isInternalLink; - initPageManagerListeners(); - registerNewTabListener(); - registerModule(moduleName) + Common.initPageManagerListeners(); + Common.registerNewTabListener(); + Common.registerModule(moduleName) })() \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/bing.ts b/src/content-scripts/serp-scripts/bing.ts index 65220c9..0d42fd5 100644 --- a/src/content-scripts/serp-scripts/bing.ts +++ b/src/content-scripts/serp-scripts/bing.ts @@ -1,3 +1,5 @@ +import * as Common from "../common.js" + /** * Content Scripts for Bing SERP */ @@ -11,7 +13,7 @@ function determinePageIsCorrect(): void { // Don't need to determine if it is web search, this is handled by // content script URL matching - pageIsCorrect = true + Common.setPageIsCorrect(true); } /** @@ -37,7 +39,7 @@ * Determine the height of the top of the search results area */ function determineSearchAreaTopHeight(): void { - searchAreaTopHeight = (document.querySelector("#b_header") as HTMLElement).offsetHeight + Common.setSearchAreaTopHeight((document.querySelector("#b_header") as HTMLElement).offsetHeight) } /** @@ -45,7 +47,7 @@ */ function determineSearchAreaBottomHeight(): void { const element = (document.querySelector(".b_pag") as HTMLElement) - searchAreaBottomHeight = getElementTopHeight(element) + Common.setSearchAreaBottomHeight(Common.getElementTopHeight(element)) } /** @@ -54,9 +56,9 @@ function determinePageNum(): void { const pageElement = document.querySelector(".sb_pagS_bp") if (pageElement) { - pageNum = Number(pageElement.textContent) + Common.setPageNum(Number(pageElement.textContent)) } else { - pageNum = -1 + Common.setPageNum(-1) } } @@ -87,10 +89,10 @@ determineSearchAreaTopHeight() determineSearchAreaBottomHeight() - determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); + Common.determineOrganicElementsAndAddListeners(getOrganicResults()); + Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); - addInternalClickListeners( + Common.addInternalClickListeners( ".b_pag *, #b_results > li.b_algo *, .b_ad > ul > li *, .b_adLastChild *", isInternalLink, document.querySelectorAll("#b_content")); @@ -102,11 +104,10 @@ window.addEventListener("load", function () { determinePageValues(); - pageLoaded = true + Common.setPageLoaded(true) }); - isInternalLinkFunction = isInternalLink; - initPageManagerListeners(); - registerNewTabListener(); - registerModule(moduleName) + Common.initPageManagerListeners(); + Common.registerNewTabListener(); + Common.registerModule(moduleName) })() \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/duckduckgo.ts b/src/content-scripts/serp-scripts/duckduckgo.ts index dcb974f..0297921 100644 --- a/src/content-scripts/serp-scripts/duckduckgo.ts +++ b/src/content-scripts/serp-scripts/duckduckgo.ts @@ -1,3 +1,4 @@ +import * as Common from "../common.js" /** * Content Scripts for DuckDuckGo SERP */ @@ -7,7 +8,7 @@ * Determine whether the page is a web search results page */ function determinePageIsCorrect(): void { - pageIsCorrect = !!document.querySelector("#duckbar_static li:first-child .is-active, #duckbar_new .is-active") && !!getQueryVariable(window.location.href, "ia") + Common.setPageIsCorrect(!!document.querySelector("#duckbar_static li:first-child .is-active, #duckbar_new .is-active") && !!Common.getQueryVariable(window.location.href, "ia")) } /** @@ -36,9 +37,9 @@ */ function determineSearchAreaTopHeight(): void { try { - searchAreaTopHeight = (document.querySelector("#header_wrapper") as HTMLElement).offsetHeight + Common.setSearchAreaTopHeight((document.querySelector("#header_wrapper") as HTMLElement).offsetHeight) } catch (error) { - searchAreaTopHeight = null + Common.setSearchAreaTopHeight(null) } } @@ -50,9 +51,9 @@ const resultElements = document.querySelectorAll("#links > div:not(.js-result-hidden-el):not(.is-hidden):not(.result--more)") const element = resultElements[resultElements.length - 1] as HTMLElement - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) } catch (error) { - searchAreaBottomHeight = null + Common.setSearchAreaBottomHeight(null) } } @@ -62,11 +63,11 @@ * a new page for each page of results */ function determinePageNum(): void { - const pageElement = getXPathElement("(//div[contains(@class, 'result__pagenum')])[last()]") + const pageElement = Common.getXPathElement("(//div[contains(@class, 'result__pagenum')])[last()]") if (pageElement) { - pageNum = Number(pageElement.textContent) + Common.setPageNum(Number(pageElement.textContent)) } else { - pageNum = 1 + Common.setPageNum(1) } } @@ -102,16 +103,16 @@ function determinePageValues(): void { determinePageIsCorrect(); - if (pageIsCorrect) { + if (Common.getPageIsCorrect()) { determinePageNum(); determineSearchAreaTopHeight(); determineSearchAreaBottomHeight(); - determineOrganicElementsAndAddListeners(getOrganicResults(), getPageNumForElement); - determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) + Common.determineOrganicElementsAndAddListeners(getOrganicResults(), getPageNumForElement); + Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) - addInternalClickListeners( + Common.addInternalClickListeners( ".result--more *, #ads > div *, .result--ad *, #links > div[id^='r1-'] *", isInternalLink, document.querySelectorAll("#zero_click_wrapper, #vertical_wrapper, #web_content_wrapper")); @@ -130,46 +131,43 @@ window.addEventListener("load", function () { determinePageValues(); - pageLoaded = true + Common.setPageLoaded(true); }); function initPageManagerListenersDDG() { function initModuleDDG() { - registerAttentionListener(); - webScience.pageManager.onPageVisitStart.addListener((timeStamp) => { - if (!pageIsCorrect) { - reportResults(); - timestamp = timeStamp; - resetAttentionTracking(); + Common.registerAttentionListener(); + webScience.pageManager.onPageVisitStart.addListener(() => { + if (!Common.getPageIsCorrect()) { + Common.reportResults(); + Common.resetAttentionTracking(); } determinePageValues(); }); // In case we miss an initial pageVisitStart event if (webScience.pageManager.pageVisitStarted) { - timestamp = webScience.pageManager.pageVisitStartTime - resetAttentionTracking(); + Common.resetAttentionTracking(); determinePageValues(); } } - if (("webScience" in window) && ("pageManager" in window.webScience)) { + if (("webScience" in window) && ("pageManager" in window["webScience"])) { initModuleDDG(); } else { if (!("pageManagerHasLoaded" in window)) { - window.pageManagerHasLoaded = []; + window["pageManagerHasLoaded"] = []; } - window.pageManagerHasLoaded.push(initModuleDDG); + window["pageManagerHasLoaded"].push(initModuleDDG); } } window.addEventListener("unload", () => { - pageVisitEndListener(); + Common.pageVisitEndListener(); }); - isInternalLinkFunction = isInternalLink; initPageManagerListenersDDG(); - registerNewTabListener(); - registerModule(moduleName) + Common.registerNewTabListener(); + Common.registerModule(moduleName) })() diff --git a/src/content-scripts/serp-scripts/ecosia.ts b/src/content-scripts/serp-scripts/ecosia.ts index bee3b1d..f23b9e1 100644 --- a/src/content-scripts/serp-scripts/ecosia.ts +++ b/src/content-scripts/serp-scripts/ecosia.ts @@ -1,3 +1,5 @@ +import * as Common from "../common.js" + /** * Content Scripts for Ecosia SERP */ @@ -11,7 +13,7 @@ function determinePageIsCorrect(): void { // Don't need to determine if it is web search, this is handled by // content script URL matching - pageIsCorrect = true + Common.setPageIsCorrect(true); } /** @@ -36,16 +38,16 @@ * Determine the height of the top of the search results area */ function determineSearchAreaTopHeight(): void { - const element = document.querySelector(".navbar-row") as HTMLElement - searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + const element = document.querySelector(".navbar-row") as HTMLElement; + Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)); } /** * Determine the height of the bottom of the search results area */ function determineSearchAreaBottomHeight(): void { - const element = document.querySelector(".pagination").previousElementSibling as HTMLElement - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + const element = document.querySelector(".pagination").previousElementSibling as HTMLElement; + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)); } /** @@ -53,11 +55,11 @@ */ function determinePageNum(): void { const url = webScience.pageManager.url - const pageNumberFromUrl = getQueryVariable(url, "p"); + const pageNumberFromUrl = Common.getQueryVariable(url, "p"); if (pageNumberFromUrl) { - pageNum = Number(pageNumberFromUrl) + 1 + Common.setPageNum(Number(pageNumberFromUrl) + 1) } else { - pageNum = 1 + Common.setPageNum(1) } } @@ -81,10 +83,10 @@ determineSearchAreaTopHeight() determineSearchAreaBottomHeight() - determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); + Common.determineOrganicElementsAndAddListeners(getOrganicResults()); + Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); - addInternalClickListeners( + Common.addInternalClickListeners( ".pagination *, div.card-web > div.result *, .card-ad > div, .card-productads > div *", isInternalLink, document.querySelectorAll(".results-wrapper")) @@ -96,11 +98,10 @@ window.addEventListener("load", function () { determinePageValues(); - pageLoaded = true + Common.setPageLoaded(true); }); - isInternalLinkFunction = isInternalLink; - initPageManagerListeners(); - registerNewTabListener(); - registerModule(moduleName) + Common.initPageManagerListeners(); + Common.registerNewTabListener(); + Common.registerModule(moduleName) })() \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/google.ts b/src/content-scripts/serp-scripts/google.ts index 7bebe6e..3b18298 100644 --- a/src/content-scripts/serp-scripts/google.ts +++ b/src/content-scripts/serp-scripts/google.ts @@ -1,3 +1,5 @@ +import * as Common from "../common.js" + /** * Content Scripts for Google SERP */ @@ -9,15 +11,15 @@ * Determine whether the page is a web search results page */ function determinePageIsCorrect(): void { - const tbm = getQueryVariable(window.location.href, "tbm") + const tbm = Common.getQueryVariable(window.location.href, "tbm") if (!tbm) { - const tbs = getQueryVariable(window.location.href, "tbs") + const tbs = Common.getQueryVariable(window.location.href, "tbs") if (!tbs || tbs.startsWith("qdr") || tbs.startsWith("li") || tbs.startsWith("cdr")) { - pageIsCorrect = true + Common.setPageIsCorrect(true) return } } - pageIsCorrect = false + Common.setPageIsCorrect(false) } /** @@ -35,7 +37,7 @@ const keywordAds = document.querySelectorAll("[aria-label='Ads'] > div") // gets all text tags on page that are "Ad" or "Ads" - const adTagElements = getXPathElements("//*[(normalize-space(text()) = 'Ad' or normalize-space(text()) = 'Ads') and not(ancestor::*[@aria-label='Ads'])]/../../../../.."); + const adTagElements = Common.getXPathElements("//*[(normalize-space(text()) = 'Ad' or normalize-space(text()) = 'Ads') and not(ancestor::*[@aria-label='Ads'])]/../../../../.."); // Creates a list from the non-keyword ads making sure that none of these non-keyword ads contain each other. // Is necessary because some ads on Google contain multiple ad tags @@ -61,7 +63,7 @@ */ function determineSearchAreaTopHeight(): void { const element = (document.querySelector("#top_nav") as HTMLElement) - searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** @@ -70,29 +72,29 @@ function determineSearchAreaBottomHeight(): void { let element = document.querySelector("#botstuff") as HTMLElement if (element.offsetHeight !== 0) { - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) return } element = document.querySelector("#bottomads") as HTMLElement if (element.offsetHeight !== 0) { - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) return } element = document.querySelector("#res") as HTMLElement - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** * Determine the page number */ function determinePageNum(): void { - const pageElement = getXPathElement("//div[@role='navigation']//tbody/tr/td[normalize-space(text())]") + const pageElement = Common.getXPathElement("//div[@role='navigation']//tbody/tr/td[normalize-space(text())]") if (pageElement) { - pageNum = Number(pageElement.textContent) + Common.setPageNum(Number(pageElement.textContent)) } else { - pageNum = -1 + Common.setPageNum(-1) } } @@ -105,7 +107,7 @@ const url = new URL(urlString) if (url.hostname.includes("google.com")) { if (urlString.includes("google.com/url")) { - const newUrlString = getQueryVariable(urlString, "url") + const newUrlString = Common.getQueryVariable(urlString, "url") const newUrl = new URL(newUrlString) return newUrl.hostname.includes("google.com") } else if (urlString.includes("google.com/aclk")) { @@ -129,10 +131,10 @@ determinePageNum(); determineSearchAreaTopHeight() determineSearchAreaBottomHeight() - determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults()); + Common.determineOrganicElementsAndAddListeners(getOrganicResults()); + Common.determineAdElementsAndAddListeners(getAdResults()); - addInternalClickListeners( + Common.addInternalClickListeners( "[role=navigation] *, div[class='g']:not(.related-question-pair div[class='g']) *", isInternalLink, document.querySelectorAll("#rcnt, #appbar, #atvcap")); @@ -144,13 +146,12 @@ window.addEventListener("load", function () { determinePageValues(); - pageLoaded = true + Common.setPageLoaded(true) }); - isInternalLinkFunction = isInternalLink; - initPageManagerListeners(); - registerNewTabListener(); - registerModule(moduleName) + Common.initPageManagerListeners(); + Common.registerNewTabListener(); + Common.registerModule(moduleName) })() console.log("GOOGLE") \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/yahoo.ts b/src/content-scripts/serp-scripts/yahoo.ts index 0d1a6b7..7cf5ec1 100644 --- a/src/content-scripts/serp-scripts/yahoo.ts +++ b/src/content-scripts/serp-scripts/yahoo.ts @@ -1,3 +1,5 @@ +import * as Common from "../common.js" + /** * Content Scripts for Yahoo SERP */ @@ -10,7 +12,7 @@ */ function determinePageIsCorrect(): void { const url = new URL(window.location.href) - pageIsCorrect = url.hostname === "search.yahoo.com" || url.hostname === "www.search.yahoo.com" + Common.setPageIsCorrect(url.hostname === "search.yahoo.com" || url.hostname === "www.search.yahoo.com") } /** @@ -36,7 +38,7 @@ */ function determineSearchAreaTopHeight(): void { const element = (document.querySelector("#ys") as HTMLElement) - searchAreaTopHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** @@ -44,7 +46,7 @@ */ function determineSearchAreaBottomHeight(): void { const element = (document.querySelector("#main") as HTMLElement) - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** @@ -53,9 +55,9 @@ function determinePageNum(): void { const pageElement = document.querySelector(".pages strong") if (pageElement) { - pageNum = Number(pageElement.textContent) + Common.setPageNum(Number(pageElement.textContent)) } else { - pageNum = -1 + Common.setPageNum(-1) } } @@ -87,10 +89,10 @@ determineSearchAreaTopHeight() determineSearchAreaBottomHeight() - determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); + Common.determineOrganicElementsAndAddListeners(getOrganicResults()); + Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); - addInternalClickListeners( + Common.addInternalClickListeners( ".pagination *, #web > .searchCenterMiddle > li > .algo *, ol.searchCenterTopAds > li > .ads *, ol.searchCenterBottomAds > li > .ads *, ol.searchRightTopAds > li *, ol.searchRightMiddleAds > li *, ol.searchRightBottomAds > li *", isInternalLink, document.querySelectorAll("#bd")); @@ -102,11 +104,10 @@ window.addEventListener("load", function () { determinePageValues(); - pageLoaded = true + Common.setPageLoaded(true) }); - isInternalLinkFunction = isInternalLink; - initPageManagerListeners(); - registerNewTabListener(); - registerModule(moduleName) + Common.initPageManagerListeners(); + Common.registerNewTabListener(); + Common.registerModule(moduleName) })() \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/yandex.ts b/src/content-scripts/serp-scripts/yandex.ts index 7f69cf5..1ac3909 100644 --- a/src/content-scripts/serp-scripts/yandex.ts +++ b/src/content-scripts/serp-scripts/yandex.ts @@ -1,3 +1,4 @@ +import * as Common from "../common.js" /** * Content Scripts for Yandex SERP */ @@ -10,28 +11,28 @@ */ function determinePageIsCorrect(): void { const url = new URL(window.location.href) - pageIsCorrect = !url.pathname.includes("direct") + Common.setPageIsCorrect(!url.pathname.includes("direct")) } /** * @returns {Array} An array of all the organic results on the page */ function getOrganicResults() { - return getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]") + return Common.getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]") } /** * @returns {Array} An array of all the ad results on the page */ function getAdResults() { - return getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]"); + return Common.getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]"); } /** * Determine the height of the top of the search results area */ function determineSearchAreaTopHeight(): void { - searchAreaTopHeight = (document.querySelector(".serp-header") as HTMLElement).offsetHeight + (document.querySelector(".navigation") as HTMLElement).offsetHeight + Common.setSearchAreaTopHeight((document.querySelector(".serp-header") as HTMLElement).offsetHeight + (document.querySelector(".navigation") as HTMLElement).offsetHeight) } /** @@ -40,7 +41,7 @@ function determineSearchAreaBottomHeight(): void { const contentElements = document.querySelectorAll(".main__content .content__left > *:not([class*='pager'])") const element = contentElements[contentElements.length - 1] as HTMLElement - searchAreaBottomHeight = element.offsetHeight + getElementTopHeight(element) + Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** @@ -48,11 +49,11 @@ */ function determinePageNum(): void { const url = webScience.pageManager.url - const pageNumberFromUrl = getQueryVariable(url, "p"); + const pageNumberFromUrl = Common.getQueryVariable(url, "p"); if (pageNumberFromUrl) { - pageNum = Number(pageNumberFromUrl) + 1 + Common.setPageNum(Number(pageNumberFromUrl) + 1) } else { - pageNum = 1 + Common.setPageNum(1) } } @@ -83,10 +84,10 @@ determineSearchAreaTopHeight() determineSearchAreaBottomHeight() - determineOrganicElementsAndAddListeners(getOrganicResults()); - determineAdElementsAndAddListeners(getAdResults()); + Common.determineOrganicElementsAndAddListeners(getOrganicResults()); + Common.determineAdElementsAndAddListeners(getAdResults()); - addInternalClickListeners( + Common.addInternalClickListeners( ".pager *, .serp-item > .organic *", isInternalLink, document.querySelectorAll(".main")); @@ -99,13 +100,12 @@ window.addEventListener("load", function () { determinePageValues(); - pageLoaded = true + Common.setPageLoaded(true) }); - window.addEventListener("unload", pageVisitEndListener); + window.addEventListener("unload", Common.pageVisitEndListener); - isInternalLinkFunction = isInternalLink; - initPageManagerListeners(false); - registerNewTabListener(); - registerModule(moduleName) + Common.initPageManagerListeners(false); + Common.registerNewTabListener(); + Common.registerModule(moduleName) })() \ No newline at end of file From 7b8c870b8e0cf8911ddb977858ee8783b447d26b Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 10 Jun 2021 13:03:08 -0400 Subject: [PATCH 157/399] Various miscellanous changes (lets to consts, new PostIntervention module, ballots now referred to as choice screens --- pages/{ballot_4.html => choice_screen_4.html} | 4 +- pages/{ballot_5.html => choice_screen_5.html} | 4 +- pages/{ballot_6.html => choice_screen_6.html} | 4 +- pages/{ballot_7.html => choice_screen_7.html} | 4 +- src/Intervention.ts | 155 +++++++++--------- src/Modal.ts | 17 +- src/PostIntervention.ts | 11 ++ src/StudyModule.ts | 40 ++--- src/Survey.ts | 4 +- src/Utils.ts | 7 +- src/WebNavigation.ts | 8 +- 11 files changed, 126 insertions(+), 132 deletions(-) rename pages/{ballot_4.html => choice_screen_4.html} (97%) rename pages/{ballot_5.html => choice_screen_5.html} (98%) rename pages/{ballot_6.html => choice_screen_6.html} (97%) rename pages/{ballot_7.html => choice_screen_7.html} (98%) create mode 100755 src/PostIntervention.ts diff --git a/pages/ballot_4.html b/pages/choice_screen_4.html similarity index 97% rename from pages/ballot_4.html rename to pages/choice_screen_4.html index 533fa49..3b56682 100644 --- a/pages/ballot_4.html +++ b/pages/choice_screen_4.html @@ -22,7 +22,7 @@ -
+
@@ -112,7 +112,7 @@

Yahoo

- + diff --git a/pages/ballot_5.html b/pages/choice_screen_5.html similarity index 98% rename from pages/ballot_5.html rename to pages/choice_screen_5.html index 6682e79..ef7804f 100644 --- a/pages/ballot_5.html +++ b/pages/choice_screen_5.html @@ -22,7 +22,7 @@ -
+
@@ -128,7 +128,7 @@

Yahoo

- + diff --git a/pages/ballot_6.html b/pages/choice_screen_6.html similarity index 97% rename from pages/ballot_6.html rename to pages/choice_screen_6.html index 77e62c3..4a3fd45 100644 --- a/pages/ballot_6.html +++ b/pages/choice_screen_6.html @@ -22,7 +22,7 @@ -
+
@@ -111,7 +111,7 @@

Yahoo

- + diff --git a/pages/ballot_7.html b/pages/choice_screen_7.html similarity index 98% rename from pages/ballot_7.html rename to pages/choice_screen_7.html index c4f5022..b122d3a 100644 --- a/pages/ballot_7.html +++ b/pages/choice_screen_7.html @@ -22,7 +22,7 @@ -
+
@@ -170,7 +170,7 @@

Ask.com

- + diff --git a/src/Intervention.ts b/src/Intervention.ts index 37cad13..831cf48 100755 --- a/src/Intervention.ts +++ b/src/Intervention.ts @@ -1,6 +1,6 @@ import * as webScience from "@mozilla/web-science"; -import * as StudyModule from "./StudyModule.js" import * as Utils from "./Utils.js" +import * as PostIntervention from "./PostIntervention.js" let storage; @@ -27,19 +27,19 @@ export async function runIntervention(storageIn): Promise { weight: 20 }, { - name: "BallotDefault", + name: "ChoiceScreenDefault", weight: 10 }, { - name: "BallotHidden", + name: "ChoiceScreenHidden", weight: 10 }, { - name: "BallotDescriptions", + name: "ChoiceScreenDescriptions", weight: 10 }, { - name: "BallotExtended", + name: "ChoiceScreenExtended", weight: 20 }, { @@ -60,46 +60,23 @@ export async function runIntervention(storageIn): Promise { noticeIntervention(2); } else if (interventionType === "NoticeRevert") { noticeIntervention(3); - } else if (interventionType === "BallotDefault") { - ballotIntervention(4); - } else if (interventionType === "BallotHidden") { - ballotIntervention(5); - } else if (interventionType === "BallotDescriptions") { - ballotIntervention(6); - } else if (interventionType === "BallotExtended") { - ballotIntervention(7); + } else if (interventionType === "ChoiceScreenDefault") { + choiceScreenIntervention(4); + } else if (interventionType === "ChoiceScreenHidden") { + choiceScreenIntervention(5); + } else if (interventionType === "ChoiceScreenDescriptions") { + choiceScreenIntervention(6); + } else if (interventionType === "ChoiceScreenExtended") { + choiceScreenIntervention(7); } else if (interventionType === "ModalPrimaryRevert") { - ballotIntervention(6); + choiceScreenIntervention(6); } else if (interventionType === "ModalSecondaryRevert") { - ballotIntervention(6); + choiceScreenIntervention(6); } else { completeIntervention(); } } -async function shouldHomepageChange() { - const homepage = await Utils.getHomepage(); - const homepageLowercase = homepage.toLowerCase() - - const enginesLowercase = ["google", "bing", "yahoo", "duckduckgo", "ecosia", "ask", "baidu", "yandex"] - - if (enginesLowercase.some(engineLowercase => homepageLowercase.includes(engineLowercase))) { - return true; - } - return false; -} - -async function changeEngineAndHomepage(newEngine) { - Utils.changeSearchEngine(newEngine); - - // If the current home page is a search engine page, change it to the default Firefox homepage - if (await shouldHomepageChange()) { - Utils.changeHomepage("about:home") - return true; - } - return false; -} - /** * Conduct one of the two notice interventions. The participant's default search engine will be changed * and they will be presented a notice notifying them of the change @@ -107,8 +84,16 @@ async function changeEngineAndHomepage(newEngine) { * Should be either 2 or 3. */ async function noticeIntervention(noticeType: number) { - let noticeShown = await storage.get("NoticeShown"); + const noticeShown = await storage.get("NoticeShown"); if (noticeShown) { + const noticeInterventionData = { + AttentionTime: null, + RevertSelected: null, + OriginalEngine: await storage.get("EngineChangedFrom"), + NewEngine: await storage.get("EngineChangedTo"), + } + console.log(noticeInterventionData) + completeIntervention(); return; } @@ -119,13 +104,22 @@ async function noticeIntervention(noticeType: number) { // Creates a list of options for a new default search engine (excluding the original default) let newSearchEngineOptions = ["Google", "DuckDuckGo", "Yahoo", "Bing"] - newSearchEngineOptions = newSearchEngineOptions.filter(engineOption => { - return !originalEngine.toLowerCase().includes(engineOption.toLowerCase()) - }) + if (originalEngine) { + newSearchEngineOptions = newSearchEngineOptions.filter(engineOption => { + return !originalEngine.toLowerCase().includes(engineOption.toLowerCase()) + }) + } // Change the participant's default engine to a random selection from the list of options for a new default const newEngine = newSearchEngineOptions[Math.floor(Math.random() * newSearchEngineOptions.length)]; - const homepageChange = await changeEngineAndHomepage(newEngine); + Utils.changeSearchEngine(newEngine); + + // If the current home page is a search engine page, change it to the default Firefox homepage + let homepageChanged = false + if (await Utils.getHomepage()) { + Utils.changeHomepage("about:home") + homepageChanged = true; + } storage.set("EngineChangedFrom", originalEngine); storage.set("EngineChangedTo", newEngine); @@ -133,7 +127,7 @@ async function noticeIntervention(noticeType: number) { // Register a listener that will send a response to the notice page with details of the original engine and new engine // This allows the notice to notify the participant of their original engine and their new engine webScience.messaging.onMessage.addListener((_message, _sender, sendResponse) => { - sendResponse({ originalEngine, newEngine, homepageChange }) + sendResponse({ originalEngine, newEngine, homepageChange: homepageChanged }) }, { type: "NoticeDetails", schema: {} @@ -147,10 +141,13 @@ async function noticeIntervention(noticeType: number) { Utils.changeSearchEngine(originalEngine); } - storage.set("NoticeInterventionData", { - Revert: message.revert, - AttentionTime: message.attentionTime - }) + const noticeInterventionData = { + AttentionTime: message.attentionTime, + RevertSelected: message.revert, + OriginalEngine: originalEngine, + NewEngine: newEngine, + } + console.log(noticeInterventionData) // At this point, the intervention is complete completeIntervention(); @@ -170,34 +167,38 @@ async function noticeIntervention(noticeType: number) { /** - * Conduct one of the four ballot interventions. A search engine ballot will be displayed to the participant + * Conduct one of the four choice screen interventions. A search engine choice screen will be displayed to the participant * and their default search engine will be changed to their selection - * @param {boolean} ballotDesign - Specifies the ballot style that will be shown to the participant. + * @param {boolean} choiceScreenDesign - Specifies the choice screen style that will be shown to the participant. * Should be either 4, 5, 6, or 7. */ -async function ballotIntervention(ballotDesign: number) { - let ballotAttemptsFromStorage = await storage.get("BallotAttempts"); - - if (ballotAttemptsFromStorage >= 3) { +async function choiceScreenIntervention(choiceScreenDesign: number) { + let choiceScreenAttempts = await storage.get("ChoiceScreenAttempts"); + if (choiceScreenAttempts >= 3) { completeIntervention(); return; } - const homepageChange = await shouldHomepageChange(); - const engines_ordering = await storage.get("BallotEngineOrdering"); + choiceScreenAttempts = choiceScreenAttempts ? choiceScreenAttempts + 1 : 1 + storage.set("ChoiceScreenAttempts", choiceScreenAttempts) + + // Determine the participant's original search engine and homepage + const originalEngine = await Utils.getSearchEngine(); + const originalHomepage = await Utils.getHomepage(); + + const engines_ordering = await storage.get("ChoiceScreenEngineOrdering"); webScience.messaging.onMessage.addListener((_message, _sender, sendResponse) => { - sendResponse({ homepageChange, engines_ordering }) + sendResponse({ homepageChange: !!originalHomepage, engines_ordering }) }, { - type: "BallotDetails", + type: "ChoiceScreenDetails", schema: {} }); webScience.messaging.onMessage.addListener(message => { - console.log(message) - storage.set("BallotEngineOrdering", message.engines_ordering); + storage.set("ChoiceScreenEngineOrdering", message.engines_ordering); }, { - type: "BallotEngineOrdering", + type: "ChoiceScreenEngineOrdering", schema: { engines_ordering: "object" } @@ -207,21 +208,30 @@ async function ballotIntervention(ballotDesign: number) { storage.set("EngineChangedFrom", await Utils.getSearchEngine()); storage.set("EngineChangedTo", message.engine); - // Modify the participant's default search engine to their ballot response and mark the intervention as complete - changeEngineAndHomepage(message.engine); + // Modify the participant's default search engine to their choice screen response and mark the intervention as complete + Utils.changeSearchEngine(message.engine); + + // If the current home page is a search engine page, change it to the default Firefox homepage + if (await Utils.getHomepage()) { + Utils.changeHomepage("about:home") + } - storage.set("BallotInterventionData", { - SelectedEngine: message.engine, + const choiceScreenInterventionData = { AttentionTime: message.attentionTime, + PreviousEngine: originalEngine, + NewEngine: message.engine, SeeMoreSelected: message.see_more_clicked, Ordering: message.engines_ordering, - DetailsExpanded: message.details_expanded - }) + DetailsExpanded: message.details_expanded, + ChoiceScreenAttempts: choiceScreenAttempts + } + + console.log(choiceScreenInterventionData) // At this point, the intervention is complete completeIntervention(); }, { - type: "BallotResponse", + type: "ChoiceScreenResponse", schema: { engine: "string", attentionTime: "number", @@ -231,11 +241,8 @@ async function ballotIntervention(ballotDesign: number) { } }); - // Creates a browser tab displaying the search engine ballot to the participant - browser.tabs.create({ url: `/pages/ballot_${ballotDesign}.html` }); - - const ballotAttempts = ballotAttemptsFromStorage ? ballotAttemptsFromStorage + 1 : 1 - storage.set("BallotAttempts", ballotAttempts) + // Creates a browser tab displaying the search engine choice screen to the participant + browser.tabs.create({ url: `/pages/choice_screen_${choiceScreenDesign}.html` }); } /** @@ -244,5 +251,5 @@ async function ballotIntervention(ballotDesign: number) { */ function completeIntervention() { storage.set("InterventionComplete", true); - StudyModule.postInterventionFunctionality(); + PostIntervention.run(storage); } \ No newline at end of file diff --git a/src/Modal.ts b/src/Modal.ts index 3628388..d399964 100755 --- a/src/Modal.ts +++ b/src/Modal.ts @@ -1,23 +1,21 @@ import * as Utils from "./Utils.js" let storage; - let engineChangedFrom; let engineChangedTo; let modalPrimaryRevert; async function listener(details) { if (details.transitionType === "generated") { - let currentEngine = await Utils.getSearchEngine(); + const currentEngine = await Utils.getSearchEngine(); if (currentEngine === engineChangedTo) { const modalAttemptsFromStorage = await storage.get("ModalAttempts"); - let modalAttempts = modalAttemptsFromStorage ? modalAttemptsFromStorage + 1 : 1; + const modalAttempts = modalAttemptsFromStorage ? modalAttemptsFromStorage + 1 : 1; storage.set("ModalAttempts", modalAttempts); browser.webNavigation.onCommitted.removeListener(listener); - let choice = await browser.experimental.createPopup(engineChangedFrom, engineChangedTo, modalPrimaryRevert); + const choice = await browser.experimental.createPopup(engineChangedFrom, engineChangedTo, modalPrimaryRevert); - console.log(`MODAL CHOICE: ${choice}`) if (choice) { Utils.changeSearchEngine(engineChangedFrom); } @@ -34,17 +32,12 @@ async function listener(details) { export async function startModalIntervention(storage_in) { storage = storage_in; - let interventionType = await storage.get("InterventionType"); - console.log(`Module output intervention type: ${interventionType}`) + const interventionType = await storage.get("InterventionType"); if (interventionType === "ModalPrimaryRevert" || interventionType === "ModalSecondaryRevert") { - let modalInterventionCompleted = await storage.get("ModalInterventionCompleted") + const modalInterventionCompleted = await storage.get("ModalInterventionCompleted") engineChangedFrom = await storage.get("EngineChangedFrom"); engineChangedTo = await storage.get("EngineChangedTo"); modalPrimaryRevert = interventionType === "ModalPrimaryRevert"; - - console.log(`Module output modalInterventionCompleted: ${modalInterventionCompleted}`) - console.log(`Module output engineChangedFrom: ${engineChangedFrom}`) - console.log(`Module output engineChangedTo: ${engineChangedTo}`) if (!modalInterventionCompleted && engineChangedFrom && engineChangedTo) { if (!engineChangedTo.toLowerCase().includes(engineChangedFrom.toLowerCase()) && !engineChangedFrom.toLowerCase().includes(engineChangedTo.toLowerCase())) { diff --git a/src/PostIntervention.ts b/src/PostIntervention.ts new file mode 100755 index 0000000..8726990 --- /dev/null +++ b/src/PostIntervention.ts @@ -0,0 +1,11 @@ +import * as Modal from "./Modal.js" +import * as Survey from "./Survey.js" +import * as SerpVisitCollection from "./SerpVisitCollection.js" +import * as DailyCollection from "./DailyCollection.js" + +export async function run(storage) { + Modal.startModalIntervention(storage); + Survey.runSurvey(storage); + SerpVisitCollection.startCollection(); + DailyCollection.startCollection(storage); +} \ No newline at end of file diff --git a/src/StudyModule.ts b/src/StudyModule.ts index 153060d..b315e73 100755 --- a/src/StudyModule.ts +++ b/src/StudyModule.ts @@ -1,16 +1,13 @@ /** * This module measures user interaction on Google Search Engine Result Pages * - * @module WebScience.Measurements.SearchBallot + * @module WebScience.Measurements.SearchEngineUsage */ import * as Intervention from "./Intervention.js" -import * as SerpVisitCollection from "./SerpVisitCollection.js" -import * as DailyCollection from "./DailyCollection.js" +import * as PostIntervention from "./PostIntervention.js" import * as WebNavigation from "./WebNavigation.js" import * as Initial from "./Initial.js" import * as webScience from "@mozilla/web-science"; -import * as Survey from "./Survey.js" -import * as Modal from "./Modal.js" import * as SearchEngineUtils from "./SearchEngineUtils.js" /** @@ -22,46 +19,29 @@ let storage = null let rally; /** - * Start a ballot study + * Start a search engine usage study **/ export async function startStudy(rallyArg): Promise { - rally = rallyArg - console.debug(rally) + rally = rallyArg; + console.debug(rally); - storage = await webScience.storage.createKeyValueStorage("WebScience.Studies.SearchBallot") + storage = await webScience.storage.createKeyValueStorage("WebScience.Studies.SearchEngineUsage"); await webScience.pageManager.initialize(); - WebNavigation.registerWebNavigationTracking(); SearchEngineUtils.initialize(); - - let initialDataReported = await storage.get("InitialDataReported") + WebNavigation.registerWebNavigationTracking(); // Report initial data if we have not done so already + const initialDataReported = await storage.get("InitialDataReported"); if (!initialDataReported) { Initial.reportInitialData(storage); } - Initial.reportInitialData(storage); - - let interventionComplete = await storage.get("InterventionComplete") - // If intervention is complete, start recording SERP data. // Otherwise, run intervention. - if (interventionComplete) { - postInterventionFunctionality(); + if (await storage.get("InterventionComplete")) { + PostIntervention.run(storage); } else { Intervention.runIntervention(storage); } } - -export async function postInterventionFunctionality() { - console.log("Intervention Complete functionality") - - Modal.startModalIntervention(storage); - - Survey.runSurvey(storage); - - SerpVisitCollection.startCollection(); - DailyCollection.startCollection(storage); -} - diff --git a/src/Survey.ts b/src/Survey.ts index e1e04f2..7cbc7f0 100755 --- a/src/Survey.ts +++ b/src/Survey.ts @@ -65,9 +65,9 @@ export async function runSurvey(storageIn): Promise { storage.set("InitialSurveyStartTime", initialSurveyStartTime); } - let finalSurveyStartTime = initialSurveyStartTime + (millisecondsPerSecond * secondsPerDay * daysUntilSecondSurvey); + const finalSurveyStartTime = initialSurveyStartTime + (millisecondsPerSecond * secondsPerDay * daysUntilSecondSurvey); - let currentSurvey = await webScience.userSurvey.getSurveyName(); + const currentSurvey = await webScience.userSurvey.getSurveyName(); if (!currentSurvey || (currentSurvey === surveyConfigData.initial.surveyName && Date.now() <= finalSurveyStartTime)) { diff --git a/src/Utils.ts b/src/Utils.ts index 42c0e71..e4395a1 100755 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,3 +1,5 @@ +import * as SearchEngineUtils from "./SearchEngineUtils.js" + /** * Return the default search engine * @returns {Promise} Promise object represents the name of the default search engine @@ -13,10 +15,11 @@ export async function getSearchEngine(): Promise { export async function getHomepage(): Promise { try { - return await browser.experimental.getHomepage(); + const homepage = await browser.experimental.getHomepage(); + return SearchEngineUtils.getEngineFromURL(homepage); } catch (error) { console.error(error) - return "" + return null; } } diff --git a/src/WebNavigation.ts b/src/WebNavigation.ts index 15f67ac..fdb4c2d 100755 --- a/src/WebNavigation.ts +++ b/src/WebNavigation.ts @@ -2,7 +2,7 @@ import * as webScience from "@mozilla/web-science"; import * as SearchEngineUtils from "./SearchEngineUtils.js" // page ID to {attribution, attributionID, and engine} -let pageIdToAttributionData: { +const pageIdToAttributionData: { [pageId: string]: { attribution: string; @@ -18,7 +18,7 @@ let pageIdToAttributionData: { * @type {Object} * @private */ -let tabHistoryPageIds: { +const tabHistoryPageIds: { [tabId: number]: { [normalizedUrl: string]: string } @@ -37,7 +37,7 @@ export function registerWebNavigationTracking(): void { return; } - let pageId = pageTransitionDataEvent.pageId; + const pageId = pageTransitionDataEvent.pageId; let normalizedUrl; try { normalizedUrl = webScience.matching.normalizeUrl(pageTransitionDataEvent.url); @@ -64,7 +64,7 @@ export function registerWebNavigationTracking(): void { normalizedUrl in tabHistoryPageIds[pageTransitionDataEvent.tabId] && tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] in pageIdToAttributionData) { - let historyPageId = tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] + const historyPageId = tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] const historyPageAttributionData = pageIdToAttributionData[historyPageId] pageIdToAttributionData[pageId] = { attribution: historyPageAttributionData.attribution, From b586e81eb79f952df48a1706d1aa89883f4f301d Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 10 Jun 2021 13:20:13 -0400 Subject: [PATCH 158/399] Collecting queries from history on daily --- src/DailyCollection.ts | 10 ++++++- src/Initial.ts | 46 ++-------------------------- src/SearchEngineUtils.ts | 65 +++++++++++++++++++++++++++++++++++----- 3 files changed, 69 insertions(+), 52 deletions(-) diff --git a/src/DailyCollection.ts b/src/DailyCollection.ts index 2f281bb..d10d7c2 100755 --- a/src/DailyCollection.ts +++ b/src/DailyCollection.ts @@ -17,10 +17,17 @@ const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yande const searchEngineToQuerySetObject: { [engine: string]: Set } = {} let storage; +let dailyCollectionStartTime; -export async function startCollection(storageIn): Promise { +export async function startCollection(storageIn: any): Promise { storage = storageIn; + dailyCollectionStartTime = await storage.get("DailyCollectionStartTime"); + if (!dailyCollectionStartTime) { + dailyCollectionStartTime = Date.now(); + storage.set("DailyCollectionStartTime", dailyCollectionStartTime); + } + await registerQueryListener(); webScience.scheduling.onIdleDaily.addListener(reportDailyData); } @@ -45,6 +52,7 @@ async function reportDailyData() { SearchEngineQueries: searchEngineToNumQueries, Time: Date.now(), TimeOffset: new Date().getTimezoneOffset(), + HistoryQueries: await SearchEngineUtils.getHistoryData(dailyCollectionStartTime) } console.log(regularTelemetrySubmission) diff --git a/src/Initial.ts b/src/Initial.ts index 555e9f8..b30179f 100755 --- a/src/Initial.ts +++ b/src/Initial.ts @@ -2,57 +2,17 @@ import * as webScience from "@mozilla/web-science"; import * as Utils from "./Utils.js" import * as SearchEngineUtils from "./SearchEngineUtils.js" -const maxResults = 1000; - - export async function reportInitialData(storage) { - let initialData = { + const initialData = { SurveyId: await webScience.userSurvey.getSurveyId(), Engine: await Utils.getSearchEngine(), + Time: Date.now(), TimeOffset: new Date().getTimezoneOffset(), - HistoryQueries: await getHistoryData() + HistoryQueries: await SearchEngineUtils.getHistoryData((new Date(new Date().setDate(new Date().getDate() - 30))).valueOf()) } console.log(initialData); storage.set("InitialDataReported", true); } - -const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] - -/** - * Collects the number of visits to SERP pages over the - * previous 30 days for each of the tracked search engines - */ -async function getHistoryData(): Promise> { - // const date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 30)); - const date30DaysAgo = new Date(new Date().setDate(new Date().getDate() - 1)); - const historyItems = await browser.history.search({ text: "", startTime: date30DaysAgo, maxResults: maxResults }); - - const searchEngineQuerySets = {} - - for (const searchEngine of searchEngines) { - searchEngineQuerySets[searchEngine] = new Set(); - } - - for (const historyItem of historyItems) { - const engineAndQuery = SearchEngineUtils.getEngineAndQueryFromUrl(historyItem.url); - if (engineAndQuery) { - searchEngineQuerySets[engineAndQuery.engine].add(engineAndQuery.query); - } - } - - const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [ - { SearchEngine: "Google", Queries: searchEngineQuerySets["Google"].size }, - { SearchEngine: "DuckDuckGo", Queries: searchEngineQuerySets["DuckDuckGo"].size }, - { SearchEngine: "Bing", Queries: searchEngineQuerySets["Bing"].size }, - { SearchEngine: "Yahoo", Queries: searchEngineQuerySets["Yahoo"].size }, - { SearchEngine: "Ecosia", Queries: searchEngineQuerySets["Ecosia"].size }, - { SearchEngine: "Yandex", Queries: searchEngineQuerySets["Yandex"].size }, - { SearchEngine: "Ask", Queries: searchEngineQuerySets["Ask"].size }, - { SearchEngine: "Baidu", Queries: searchEngineQuerySets["Baidu"].size } - ]; - - return searchEnginesNumHistoryQueries; -} \ No newline at end of file diff --git a/src/SearchEngineUtils.ts b/src/SearchEngineUtils.ts index 45b6edb..0668ab7 100755 --- a/src/SearchEngineUtils.ts +++ b/src/SearchEngineUtils.ts @@ -1,6 +1,8 @@ import * as webScience from "@mozilla/web-science"; -let searchEngineDomains = { +const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] + +const searchEngineDomains = { Google: { domains: ["google.com"], regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i @@ -35,17 +37,20 @@ let searchEngineDomains = { }, } +let initialized = false; + /** * An object that maps each tracked engine to the match pattern set for its domains. * @type {Object} * @private */ -let domainMatchPatternSets = {} +const domainMatchPatternSets = {} let allTrackedEngineMatchPatterns = [] export function initialize(): void { - for (let searchEngine in searchEngineDomains) { + initialized = true; + for (const searchEngine in searchEngineDomains) { const domainMatchPatterns = webScience.matching.domainsToMatchPatterns(searchEngineDomains[searchEngine].domains) domainMatchPatternSets[searchEngine] = webScience.matching.createMatchPatternSet(domainMatchPatterns) allTrackedEngineMatchPatterns = allTrackedEngineMatchPatterns.concat(domainMatchPatterns) @@ -53,6 +58,9 @@ export function initialize(): void { } export function getTrackedEnginesMatchPatterns(): string[] { + if (!initialized) { + initialize; + } return allTrackedEngineMatchPatterns; } @@ -63,7 +71,10 @@ export function getTrackedEnginesMatchPatterns(): string[] { * null if the URL does not belong to any of the tracked engines */ export function getEngineFromURL(url: string): string { - for (let searchEngine in domainMatchPatternSets) { + if (!initialized) { + initialize; + } + for (const searchEngine in domainMatchPatternSets) { const matchPatternSetForEngine = domainMatchPatternSets[searchEngine] if (matchPatternSetForEngine.matches(url)) { return searchEngine; @@ -73,7 +84,7 @@ export function getEngineFromURL(url: string): string { } function getEngineFromSearchURL(url: string): string { - for (let searchEngine in searchEngineDomains) { + for (const searchEngine in searchEngineDomains) { if (url.match(searchEngineDomains[searchEngine].regExp)) { return searchEngine; } @@ -82,6 +93,9 @@ function getEngineFromSearchURL(url: string): string { } export function getEngineAndQueryFromUrl(url: string): { engine: string, query: string } { + if (!initialized) { + initialize; + } const searchEngine = getEngineFromSearchURL(url); if (searchEngine) { let query = null; @@ -112,7 +126,6 @@ export function getEngineAndQueryFromUrl(url: string): { engine: string, query: } function getGoogleQuery(url: string): string { - console.log(url) const tbm = getQueryVariable(url, "tbm") if (!tbm) { for (const key of ["q", "query"]) { @@ -208,7 +221,43 @@ function getYandexQuery(url: string): string { * does not exist in the URL, returns null. */ function getQueryVariable(urlString, variable) { - let url = new URL(urlString); - let params = new URLSearchParams(url.search); + const url = new URL(urlString); + const params = new URLSearchParams(url.search); return params.get(variable); +} + + + +/** + * Collects the number of visits to SERP pages over the + * previous 30 days for each of the tracked search engines + */ +export async function getHistoryData(startTime: number): Promise> { + const historyItems = await browser.history.search({ text: "", startTime: startTime, maxResults: Number.MAX_SAFE_INTEGER }); + + const searchEngineQuerySets = {} + + for (const searchEngine of searchEngines) { + searchEngineQuerySets[searchEngine] = new Set(); + } + + for (const historyItem of historyItems) { + const engineAndQuery = getEngineAndQueryFromUrl(historyItem.url); + if (engineAndQuery) { + searchEngineQuerySets[engineAndQuery.engine].add(engineAndQuery.query); + } + } + + const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [ + { SearchEngine: "Google", Queries: searchEngineQuerySets["Google"].size }, + { SearchEngine: "DuckDuckGo", Queries: searchEngineQuerySets["DuckDuckGo"].size }, + { SearchEngine: "Bing", Queries: searchEngineQuerySets["Bing"].size }, + { SearchEngine: "Yahoo", Queries: searchEngineQuerySets["Yahoo"].size }, + { SearchEngine: "Ecosia", Queries: searchEngineQuerySets["Ecosia"].size }, + { SearchEngine: "Yandex", Queries: searchEngineQuerySets["Yandex"].size }, + { SearchEngine: "Ask", Queries: searchEngineQuerySets["Ask"].size }, + { SearchEngine: "Baidu", Queries: searchEngineQuerySets["Baidu"].size } + ]; + + return searchEnginesNumHistoryQueries; } \ No newline at end of file From 8b5f5d8d922a3bec8cfe842d5f64e4e816570314 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 10 Jun 2021 13:21:54 -0400 Subject: [PATCH 159/399] Separate eslint for typescript source folder --- .eslintrc.js | 1 + src/.eslintrc.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/.eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js index b5302c3..8bcf245 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -40,6 +40,7 @@ module.exports = { "mocha" ], root: true, + ignorePatterns: [ "compiled-ts/**/*.js" ], rules: { "node/no-deprecated-api": "error", "node/no-extraneous-require": "off", diff --git a/src/.eslintrc.js b/src/.eslintrc.js new file mode 100644 index 0000000..ee0de2c --- /dev/null +++ b/src/.eslintrc.js @@ -0,0 +1,48 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +module.exports = { + env: { + browser: true, + es6: true, + node: true, + webextensions: true, + }, + extends: [ + "eslint:recommended", + "plugin:import/warnings", + "plugin:node/recommended", + "plugin:@typescript-eslint/recommended", + ], + parserOptions: { + ecmaVersion: 2021, + sourceType: "module", + }, + plugins: [ + "import", + "node", + "@typescript-eslint" + ], + root: true, + parser: "@typescript-eslint/parser", + globals: { + ChromeUtils: false, + ExtensionAPI: false, + __ENABLE_DEVELOPER_MODE__: false, + }, + rules: { + "node/no-deprecated-api": "error", + "node/no-extraneous-require": "off", + "node/no-missing-import": "off", + "node/no-unpublished-import": "off", + "node/no-unpublished-require": "off", + "node/no-unsupported-features/es-syntax": "off", + "no-multi-spaces": "error", + "@typescript-eslint/no-unused-vars": [ "error", { vars: "all", args: "none", ignoreRestSiblings: false } ], + "no-var": "warn", + "prefer-const": "warn", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-explicit-any": "off" + }, +}; From 4709c6a9ab93735efd110a679c1e2e06b53f3269 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 10 Jun 2021 13:22:34 -0400 Subject: [PATCH 160/399] Referring to ballots as choice screens --- pages/css/style.css | 4 ++++ pages/js/{ballot.js => choice_screen.js} | 24 +++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) rename pages/js/{ballot.js => choice_screen.js} (81%) diff --git a/pages/css/style.css b/pages/css/style.css index d7a3fb5..b5b52d0 100644 --- a/pages/css/style.css +++ b/pages/css/style.css @@ -155,3 +155,7 @@ p { #engine-info { padding-bottom: 2rem; } + +.choice-screen-wrapper { + margin-bottom: 120px; +} diff --git a/pages/js/ballot.js b/pages/js/choice_screen.js similarity index 81% rename from pages/js/ballot.js rename to pages/js/choice_screen.js index be99f5d..b4c2125 100644 --- a/pages/js/ballot.js +++ b/pages/js/choice_screen.js @@ -36,8 +36,8 @@ window.addEventListener("DOMContentLoaded", async function () { } } - const ballotDetails = await browser.runtime.sendMessage({ type: "BallotDetails" }) - if(ballotDetails.homepageChange) { + const choiceScreenDetails = await browser.runtime.sendMessage({ type: "ChoiceScreenDetails" }) + if(choiceScreenDetails.homepageChange) { const homepageChangeNotification = document.getElementById("homepage_change"); if(homepageChangeNotification) homepageChangeNotification.style.display = null; } @@ -53,12 +53,12 @@ window.addEventListener("DOMContentLoaded", async function () { } let engines_ordering = [] - if(ballotDetails.engines_ordering) { - engines_ordering = ballotDetails.engines_ordering + if(choiceScreenDetails.engines_ordering) { + engines_ordering = choiceScreenDetails.engines_ordering } else { shuffleArray(engineNames) engines_ordering = engineNames - browser.runtime.sendMessage({ type: "BallotEngineOrdering", engines_ordering }); + browser.runtime.sendMessage({ type: "ChoiceScreenEngineOrdering", engines_ordering }); } const searchEnginesContainer = document.querySelector(".search-engines") @@ -87,18 +87,24 @@ window.addEventListener("DOMContentLoaded", async function () { document.querySelector(".continue").addEventListener("click", async () => { const selected_engine = document.querySelector("input[name=engine-select]:checked").value - await browser.runtime.sendMessage({ type: "BallotResponse", engine: selected_engine, engines_ordering, see_more_clicked, attentionTime: getAttentionTime(), details_expanded: Array.from(details_expanded_set) }); + await browser.runtime.sendMessage({ type: "ChoiceScreenResponse", engine: selected_engine, engines_ordering, see_more_clicked, attentionTime: getAttentionTime(), details_expanded: Array.from(details_expanded_set) }); window.close(); }); + function enableContinue() { + document.querySelector(".continue").removeAttribute("disabled"); + document.querySelector(".wrapper").style.marginBottom = "120px"; + } + + if(document.querySelector("input[name=engine-select]:checked")) { + enableContinue(); + } document.querySelectorAll("input").forEach(inputElement => { inputElement.addEventListener("click", () => { - document.querySelector(".footer").style.display = "" - document.querySelector(".wrapper").style.marginBottom = "120px" + enableContinue(); }); }) - document.querySelectorAll(".rotate").forEach(rotateElement => { rotateElement.addEventListener("click", (event) => { event.currentTarget.classList.toggle("down") From 434e5dc89a0e3e2160ec82e41ff5a30e3e0ccfe7 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 10 Jun 2021 14:52:17 -0400 Subject: [PATCH 161/399] Update manifest.json, package-lock.json, and package.json to match updated study template --- manifest.json | 36 +- package-lock.json | 3303 +++++++++++++++++++++++++++++++-------------- package.json | 39 +- 3 files changed, 2316 insertions(+), 1062 deletions(-) diff --git a/manifest.json b/manifest.json index c25deae..aff87e5 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "author": "Kartikeya Kandula", "manifest_version": 2, "name": "Search Engine Usage Study", - "version": "0.3.1", + "version": "0.4.0", "homepage_url": "https://github.com/mozilla-ion/ion-basic-study", "applications": { "gecko": { @@ -11,10 +11,42 @@ "strict_min_version": "77.0a1" } }, - "permissions": [], + "permissions": [ + "", + "idle", + "notifications", + "storage", + "unlimitedStorage", + "tabs", + "webRequest", + "webNavigation", + "history" + ], + "experiment_apis": { + "experimental": { + "schema": "./experimental/schema.json", + "parent": { + "scopes": [ + "addon_parent" + ], + "script": "./experimental/api.js", + "paths": [ + [ + "experimental" + ] + ] + } + } + }, "background": { "scripts": [ "dist/background.js" ] + }, + "browser_action": { + "browser_style": true, + "default_icon": { + "16": "icons/princeton_university_shield_book_gray.svg" + } } } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ad1ed5a..461a1f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,30 +1,35 @@ { "name": "rally-study-template", - "version": "0.3.1", + "version": "0.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "rally-study-template", - "version": "0.3.1", + "version": "0.4.0", "license": "MPL-2.0", "devDependencies": { - "@mozilla/rally": "^0.5.0", - "@mozilla/web-science": "^0.2.0", - "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.22.0", + "@mozilla/rally": "^0.6.0", + "@mozilla/web-science": "^0.4.0", + "@rollup/plugin-commonjs": "^19.0.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-replace": "^2.4.2", + "@rollup/plugin-typescript": "^8.2.1", + "@typescript-eslint/eslint-plugin": "^4.19.0", + "@typescript-eslint/parser": "^4.19.0", + "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.22.2", - "mocha": "^8.3.2", + "geckodriver": "^1.22.3", + "globby": "^11.0.3", + "mocha": "^8.4.0", "npm-run-all": "^4.1.5", - "rollup": "^2.41.4", - "selenium-webdriver": "^4.0.0-beta.2", - "web-ext": "^6.0.0", - "webextension-polyfill": "^0.7.0" + "rollup": "^2.47.0", + "rollup-plugin-copy": "^3.4.0", + "selenium-webdriver": "^4.0.0-beta.3", + "web-ext": "^6.1.0", + "webextension-polyfill": "^0.8.0" }, "engines": { "node": ">=14.0.0" @@ -200,9 +205,9 @@ "dev": true }, "node_modules/@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -220,9 +225,9 @@ } }, "node_modules/@mdn/browser-compat-data": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.1.3.tgz", - "integrity": "sha512-Qdqeox4APsYwAQQSO68D1p75DL9an1wS8b/51m+nH98unN4jbS5bvg22WQrg+TMq2/3Mg/E5zprqfUzJD84qgw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.2.4.tgz", + "integrity": "sha512-jEUurwoeiHOB7SceVnsg3ULxNlf9XxqMfcKNM+eJduPgCcoCnbLi/6og+e764fTAZCcBkqGcWUMhLQXwcqpbJQ==", "dev": true, "dependencies": { "extend": "3.0.2" @@ -232,9 +237,9 @@ } }, "node_modules/@mozilla/rally": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.5.0.tgz", - "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.6.0.tgz", + "integrity": "sha512-NrbQqb7ihocktqeLz4FXmVIb8I7ppfYisFguNnVnndVPVXSXrgXQi/BJnpO6LsXQ8bJE+L62JvDdOsSRlEYx2g==", "dev": true }, "node_modules/@mozilla/readability": { @@ -247,22 +252,66 @@ } }, "node_modules/@mozilla/web-science": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.2.0.tgz", - "integrity": "sha512-DnlYwg9MuZanFkGcb+wbdVYzYyW9OPoX/uI6QPEuIkwirgXVmAI5oRHx/k2WsYpvf4/lQIZYYLwCSsZRZhFvpw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.4.0.tgz", + "integrity": "sha512-9BNEXf3jvHl9CM7lCZREzlXbZ5GrLT/ZE4urspjvN1jIAMcSdobc3iqzLwD47JXXGOxuGmznhCn78TclSgTgOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@mozilla/readability": "^0.4.1", - "dexie": "^3.0.3" + "@rollup/plugin-commonjs": "19.0.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "globby": "^11.0.0", + "js-base64": "^3.6.0", + "jsdom": "^16.6.0", + "rollup": "^2.41.4", + "rollup-plugin-copy": "^3.4.0", + "tldts": "^5.7.25", + "uuid": "^8.3.2" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", + "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -277,13 +326,13 @@ "node": ">= 8.0.0" }, "peerDependencies": { - "rollup": "^2.30.0" + "rollup": "^2.38.3" } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", - "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", + "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -297,13 +346,13 @@ "node": ">= 10.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^2.42.0" } }, "node_modules/@rollup/plugin-replace": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz", - "integrity": "sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -313,6 +362,24 @@ "rollup": "^1.20.0 || ^2.0.0" } }, + "node_modules/@rollup/plugin-typescript": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.1.tgz", + "integrity": "sha512-Qd2E1pleDR4bwyFxqbjt4eJf+wB0UKVMLc7/BAFDGVdAXQMCsD4DUv5/7/ww47BZCYxWtJqe1Lo0KVNswBJlRw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0", + "tslib": "*", + "typescript": ">=3.7.0" + } + }, "node_modules/@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", @@ -358,6 +425,15 @@ "node": ">=6" } }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/decompress": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.3.tgz", @@ -386,6 +462,25 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "node_modules/@types/fs-extra": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/got": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", @@ -396,6 +491,12 @@ "@types/node": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -432,12 +533,193 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.1.tgz", + "integrity": "sha512-aoIusj/8CR+xDWmZxARivZjbMBQTT9dImUtdZ8tVCVRXgBUuuZyM5Of5A9D9arQPxbi/0rlJLcuArclz/rCMJw==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.26.1", + "@typescript-eslint/scope-manager": "4.26.1", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.21", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.1.tgz", + "integrity": "sha512-sQHBugRhrXzRCs9PaGg6rowie4i8s/iD/DpTB+EXte8OMDfdCG5TvO73XlO9Wc/zi0uyN4qOmX9hIjQEyhnbmQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.26.1", + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/typescript-estree": "4.26.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.1.tgz", + "integrity": "sha512-q7F3zSo/nU6YJpPJvQveVlIIzx9/wu75lr6oDbDzoeIRWxpoc/HQ43G4rmMoCc5my/3uSj2VEpg/D83LYZF5HQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.26.1", + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/typescript-estree": "4.26.1", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.1.tgz", + "integrity": "sha512-TW1X2p62FQ8Rlne+WEShyd7ac2LA6o27S9i131W4NwDSfyeVlQWhw8ylldNNS8JG6oJB9Ha9Xyc+IUcqipvheQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/visitor-keys": "4.26.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.1.tgz", + "integrity": "sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz", + "integrity": "sha512-l3ZXob+h0NQzz80lBGaykdScYaiEbFqznEs99uwzm8fPHhDjwaBFfQkjUC/slw6Sm7npFL8qrGEAMxcfBsBJUg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/visitor-keys": "4.26.1", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz", + "integrity": "sha512-IGouNSSd+6x/fHtYRyLOM6/C+QxMDzWlDtN41ea+flWuSF9g02iqcIlX8wM53JkfljoIjP0U+yp7SiTS1onEkw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.26.1", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -464,6 +746,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, "node_modules/acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", @@ -473,38 +765,46 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/addons-linter": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.21.0.tgz", - "integrity": "sha512-1XfqeVbvaEpjRlWJq/Ti0W6bH3RszaIDPeKl+4ZmXCx+C8ovRqy4CJmitqNffLr+2KpY4h5ei2eRygbvJYDyrw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-3.2.0.tgz", + "integrity": "sha512-b6oViLOBgXWsld5L3DJiJSt77DYjVrk2Yam2/gD5e2bsj5xfNvavugwhlJP/MIF0j5yetYT/XFQDXY1Hs0flOA==", "dev": true, "dependencies": { - "@babel/runtime": "7.13.9", - "@mdn/browser-compat-data": "3.1.3", - "addons-scanner-utils": "4.2.0", + "@mdn/browser-compat-data": "3.2.4", + "addons-scanner-utils": "4.4.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", - "cheerio": "1.0.0-rc.5", + "cheerio": "1.0.0-rc.6", "columnify": "1.5.4", "common-tags": "1.8.0", "deepmerge": "4.2.2", - "dispensary": "0.61.0", - "eslint": "7.21.0", + "dispensary": "0.62.0", + "eslint": "7.24.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", "espree": "7.3.1", "esprima": "4.0.1", "fluent-syntax": "0.13.0", "glob": "7.1.6", + "image-size": "0.9.7", "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.11.1", - "postcss": "8.2.7", - "probe-image-size": "6.0.0", + "pino": "6.11.2", + "postcss": "8.2.10", "relaxed-json": "1.0.3", - "semver": "7.3.4", + "semver": "7.3.5", "source-map-support": "0.5.19", "tosource": "1.0.0", "upath": "2.0.1", @@ -515,16 +815,13 @@ "addons-linter": "bin/addons-linter" }, "engines": { - "node": ">=10.13" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=12.21.0" } }, "node_modules/addons-linter/node_modules/eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", @@ -544,7 +841,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -552,7 +849,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -575,10 +872,37 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/addons-linter/node_modules/globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/addons-linter/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/addons-scanner-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.2.0.tgz", - "integrity": "sha512-VKLYNlKg2RCMvmOKmbWlu14hjdyk2vcTHscQGmDlnHfWcf6fAb8E7vY9/ajWdLykVVKZEUiGOoD5EIkIp1FyUA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.4.0.tgz", + "integrity": "sha512-fEUGQIqLYeLl5cV6FFSHU+XFlOYETXqm8jxmYGsVayjZaAqWEkIjTXNu4+pDEiqIkrqjPYP2izjrnhBpHRsyog==", "dev": true, "dependencies": { "@types/yauzl": "2.9.1", @@ -780,92 +1104,6 @@ "node": ">=4" } }, - "node_modules/archiver": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", - "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.4" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver/node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "node_modules/archiver/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1059,7 +1297,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -1197,6 +1436,12 @@ "node": ">=8" } }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -1222,6 +1467,7 @@ "url": "https://feross.org/support" } ], + "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -1415,35 +1661,33 @@ } }, "node_modules/cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "version": "1.0.0-rc.6", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz", + "integrity": "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==", "dev": true, "dependencies": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" + "cheerio-select": "^1.3.0", + "dom-serializer": "^1.3.1", + "domhandler": "^4.1.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1" }, "engines": { "node": ">= 0.12" } }, - "node_modules/cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", - "deprecated": "Use cheerio-select instead", + "node_modules/cheerio-select": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", + "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", "dev": true, "dependencies": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" + "css-select": "^4.1.2", + "css-what": "^5.0.0", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0" }, "funding": { "url": "https://github.com/sponsors/fb55" @@ -1649,35 +1893,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/compress-commons": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", - "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1806,49 +2021,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dev": true, - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", @@ -1885,15 +2057,15 @@ } }, "node_modules/css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", + "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" }, "funding": { @@ -1901,9 +2073,9 @@ } }, "node_modules/css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true, "engines": { "node": ">= 6" @@ -1912,6 +2084,30 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1924,6 +2120,20 @@ "node": ">=0.10" } }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/debounce": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", @@ -1959,6 +2169,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -2264,15 +2480,6 @@ "dev": true, "peer": true }, - "node_modules/dexie": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.0.3.tgz", - "integrity": "sha512-BSFhGpngnCl1DOr+8YNwBDobRMH0ziJs2vts69VilwetHYOtEDcLqo7d/XiIphM0tJZ2rPPyAGd31lgH2Ln3nw==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -2282,15 +2489,36 @@ "node": ">=0.3.1" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dispensary": { - "version": "0.61.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.61.0.tgz", - "integrity": "sha512-5BK13jrYQ+0bHgZBv7IOQsff5ydeNcnp87w3c7T8x5im21RDFQyiHrTlH0DoouZDyAVHILpat4Ytf7gRuhMRgw==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", + "integrity": "sha512-x8vqPX7owhzDp3Y6t/iOuTuNoWx5hlZKITlzlybETsZoY05cYDubGpwt0soLfRLAWLuxX1lq0lTc/vXtk/CDCw==", "dev": true, "dependencies": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", - "pino": "~6.9.0", + "pino": "~6.11.0", "request": "~2.88.0", "sha.js": "~2.4.4", "source-map-support": "~0.5.4", @@ -2309,29 +2537,6 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, - "node_modules/dispensary/node_modules/pino": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.9.0.tgz", - "integrity": "sha512-9RrRJsKOsgj50oGoR/y4EEVyUjMb/eRu8y4hjwPqM6q214xsxSxY/IKB+aEEv0slqNd4U0RVRfivKfy83UxgUQ==", - "dev": true, - "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", - "flatstr": "^1.0.12", - "pino-std-serializers": "^2.4.2", - "quick-format-unescaped": "^4.0.1", - "sonic-boom": "^1.0.2" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/dispensary/node_modules/pino-std-serializers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", - "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", - "dev": true - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2345,13 +2550,13 @@ } }, "node_modules/dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" }, "funding": { @@ -2359,9 +2564,9 @@ } }, "node_modules/domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ { @@ -2370,13 +2575,34 @@ } ] }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" @@ -2386,14 +2612,14 @@ } }, "node_modules/domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "dependencies": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -2619,9 +2845,9 @@ } }, "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -2732,26 +2958,110 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", - "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", + "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", @@ -2763,7 +3073,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -2772,7 +3082,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -3215,15 +3525,6 @@ "node": ">=8" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -3331,6 +3632,23 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fast-json-patch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", @@ -3362,9 +3680,9 @@ "dev": true }, "node_modules/fast-redact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", - "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz", + "integrity": "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==", "dev": true, "engines": { "node": ">=6" @@ -3376,6 +3694,15 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3497,18 +3824,15 @@ } }, "node_modules/firefox-profile": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.1.0.tgz", - "integrity": "sha512-n+0jsWhW57i7cAmdHg67W6u5vVSoIJN9D+d7M3w1MzhFLE5X/QxBfP80ksjNvNQDFXGdJQAnW9YupLkzgCxaFQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.0.tgz", + "integrity": "sha512-Z+/6GQ0JEW2eqgj63EYNbgKSgoIz7w1yXlkOWAIRkCNnj50rkfnQIz8uYwJkobxwYQM8vjFIbYiVtYuQV8US2A==", "dev": true, "dependencies": { "adm-zip": "~0.5.x", - "archiver": "~5.2.0", "fs-extra": "~9.0.1", "ini": "~2.0.0", - "lazystream": "~1.0.0", "minimist": "^1.2.5", - "uuid": "^8.3.2", "xml2js": "~0.4.23" }, "bin": { @@ -3615,9 +3939,9 @@ } }, "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "peer": true, "engines": { @@ -3649,7 +3973,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "peer": true }, "node_modules/fs-extra": { "version": "9.1.0", @@ -3711,9 +4036,9 @@ "dev": true }, "node_modules/fx-runner": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", - "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.1.0.tgz", + "integrity": "sha512-v/Eo69DDFW30zPdvjCYVXddjVvLy2xGeRbg0S18bPd8kEc0q9VsDoDkjyOxY5lTZsAqcQGy0OWjs3HCfRVBNSg==", "dev": true, "dependencies": { "commander": "2.9.0", @@ -3771,9 +4096,9 @@ } }, "node_modules/geckodriver": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", - "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.3.tgz", + "integrity": "sha512-HJvImEC5m/2J7aIn+AdiZml1yTOSFZAb8h8lmZBSUgGSCPdNTd0/6YxBVBsvzpaTuaDQHbMUr+8ikaFKF+Sj/A==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -3890,15 +4215,44 @@ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/got": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", @@ -4065,10 +4419,22 @@ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/htmlparser2": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", - "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -4080,7 +4446,7 @@ "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.4.4", + "domutils": "^2.5.2", "entities": "^2.0.0" } }, @@ -4115,6 +4481,20 @@ "dev": true, "peer": true }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4182,7 +4562,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/ignore": { "version": "4.0.6", @@ -4193,6 +4574,21 @@ "node": ">= 4" } }, + "node_modules/image-size": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.9.7.tgz", + "integrity": "sha512-KRVgLNZkr00YGN0qn9MlIrmlxbRhsCcEb1Byq3WKGnIV4M48iD185cprRtaoK4t5iC+ym2Q5qlArxZ/V1yzDgA==", + "dev": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=10.18.0" + } + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -4583,6 +4979,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -4739,6 +5150,12 @@ "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", "dev": true }, + "node_modules/js-base64": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", + "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4764,6 +5181,101 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "node_modules/jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", @@ -4843,10 +5355,7 @@ "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "engines": { - "node": "*" - } + "dev": true }, "node_modules/jsonwebtoken": { "version": "8.5.1", @@ -4948,18 +5457,6 @@ "node": ">=8" } }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, "node_modules/lcid": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", @@ -5074,22 +5571,10 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "node_modules/lodash.difference": { + "node_modules/lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, "node_modules/lodash.includes": { @@ -5128,16 +5613,22 @@ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "node_modules/log-symbols": { @@ -5280,6 +5771,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -5290,6 +5790,19 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -5398,9 +5911,9 @@ } }, "node_modules/mocha": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -5625,32 +6138,6 @@ "ncp": "bin/ncp" } }, - "node_modules/needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "dev": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -5954,6 +6441,12 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -6503,9 +6996,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true, "engines": { "node": ">=8.6" @@ -6557,16 +7050,16 @@ } }, "node_modules/pino": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", - "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.2.tgz", + "integrity": "sha512-bmzxwbrIPxQUlAuMkF4PWVErUGERU4z37HazlhflKFg08crsNE3fACGN6gPwg5xtKOK47Ux5cZm8YCuLV4wWJg==", "dev": true, "dependencies": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.7", "flatstr": "^1.0.12", "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.1", + "quick-format-unescaped": "4.0.1", "sonic-boom": "^1.0.2" }, "bin": { @@ -6650,13 +7143,13 @@ } }, "node_modules/postcss": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", - "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", + "version": "8.2.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", + "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", "dev": true, "dependencies": { "colorette": "^1.2.2", - "nanoid": "^3.1.20", + "nanoid": "^3.1.22", "source-map": "^0.6.1" }, "engines": { @@ -6667,6 +7160,18 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6685,29 +7190,6 @@ "node": ">=0.10.0" } }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "dev": true, - "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/probe-image-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-6.0.0.tgz", - "integrity": "sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==", - "dev": true, - "dependencies": { - "deepmerge": "^4.0.0", - "needle": "^2.5.2", - "stream-parser": "~0.3.1" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6724,13 +7206,13 @@ } }, "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "peer": true, "dependencies": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { @@ -6799,10 +7281,39 @@ "node": ">=0.10.0" } }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-format-unescaped": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.2.tgz", - "integrity": "sha512-HNPqtTHgal9dBpJxibFGgOEmlaTbwEbplrR+oOiWp9aNFlFKBYfkbvvF8VrJPK65okrZuGOwHKLfe7/gT6NWuw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", "dev": true }, "node_modules/ramda": { @@ -7039,15 +7550,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, "node_modules/readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", @@ -7304,6 +7806,16 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -7320,18 +7832,117 @@ } }, "node_modules/rollup": { - "version": "2.41.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", - "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", + "version": "2.50.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz", + "integrity": "sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/rollup-plugin-copy/node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-copy/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rollup-plugin-copy/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-copy/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { @@ -7369,6 +7980,18 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", @@ -7384,9 +8007,9 @@ } }, "node_modules/selenium-webdriver": { - "version": "4.0.0-beta.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.2.tgz", - "integrity": "sha512-uuNl3T1JjhrXCO4UAAy+iIIgZ/PqgYNiYvy+yfWCY+x2vHH9y7tIdD9a/q1rwbf/5jD/ENwYlVuNj46uIngknA==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.3.tgz", + "integrity": "sha512-R0mGHpQkSKgIWiPgcKDcckh4A6aaK0KTyWxs5ieuiI7zsXQ+Kb6neph+dNoeqq3jSBGyv3ONo2w3oohoL4D/Rg==", "dev": true, "dependencies": { "jszip": "^3.5.0", @@ -7411,9 +8034,9 @@ } }, "node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7606,6 +8229,15 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -7624,9 +8256,9 @@ } }, "node_modules/sonic-boom": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", - "integrity": "sha512-/B4tAuK2+hIlR94GhhWU1mJHWk5lt0CEuBvG0kvk1qIAzQc4iB1TieMio8DCZxY+Y7tsuzOxSUDOGmaUm3vXMg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", "dev": true, "dependencies": { "atomic-sleep": "^1.0.0", @@ -7761,11 +8393,6 @@ "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, "engines": { "node": ">=0.10.0" } @@ -7780,30 +8407,6 @@ "node": ">= 0.6" } }, - "node_modules/stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", - "dev": true, - "dependencies": { - "debug": "2" - } - }, - "node_modules/stream-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/stream-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -8015,25 +8618,33 @@ "node": ">=8" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "node_modules/table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "dependencies": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/table/node_modules/ajv": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", - "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -8130,6 +8741,24 @@ "node": ">=0.10.0" } }, + "node_modules/tldts": { + "version": "5.7.38", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-5.7.38.tgz", + "integrity": "sha512-Ji+xTLv8TAWq2y7/+RCC/OpWO7ExpgsZyijA27Q2uHElyaMrNhgjcZVbgvpwX0Imgk5w8jnJqRDLrmeIefma2Q==", + "dev": true, + "dependencies": { + "tldts-core": "^5.7.38" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "5.7.38", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-5.7.38.tgz", + "integrity": "sha512-mcL16YTXjpVJ+ekoKC/ddvdjGNMg8HkdWQNp3WNz26WJMV7Z2Hjr1IPwYYr9W3LxGdXV7mmg21Zk2vSstiSsFg==", + "dev": true + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -8202,6 +8831,18 @@ "node": ">=0.8" } }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -8237,6 +8878,34 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true, + "peer": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -8314,6 +8983,20 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", @@ -8511,6 +9194,27 @@ "extsprintf": "^1.2.0" } }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/watchpack": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", @@ -8534,14 +9238,14 @@ } }, "node_modules/web-ext": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.0.0.tgz", - "integrity": "sha512-djjTY89kM5ULdKYQo+6TYJSlT+0zNkanW5hQJNybOqGyovUYpH7C3Ns9Pd1cy6ApbmG2VV4Gds9u4yCSuRfHUw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.1.0.tgz", + "integrity": "sha512-f9sBuysFoCJAuS03wRtSBH8dPKQUZvCVT+AoqBW3tBBN6a92P0PyGF2lTwZJ5wrOOvXu7w2DvuAFOU6CnBugFw==", "dev": true, "dependencies": { "@babel/runtime": "7.13.9", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.21.0", + "addons-linter": "3.2.0", "bunyan": "1.8.15", "camelcase": "6.2.0", "chrome-launcher": "0.13.4", @@ -8549,9 +9253,9 @@ "decamelize": "5.0.0", "es6-error": "4.1.1", "event-to-promise": "0.8.0", - "firefox-profile": "4.1.0", + "firefox-profile": "4.2.0", "fs-extra": "9.1.0", - "fx-runner": "1.0.13", + "fx-runner": "1.1.0", "import-fresh": "3.3.0", "mkdirp": "1.0.4", "multimatch": "5.0.0", @@ -8575,7 +9279,7 @@ }, "engines": { "node": ">=12.0.0", - "npm": ">=5.6.0 <7.0.0" + "npm": ">=6.9.0 <7.0.0" } }, "node_modules/web-ext/node_modules/decamelize": { @@ -8639,11 +9343,49 @@ } }, "node_modules/webextension-polyfill": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", - "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", + "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, + "node_modules/whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/when": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", @@ -8802,9 +9544,9 @@ } }, "node_modules/ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, "engines": { "node": ">=8.3.0" @@ -8831,6 +9573,12 @@ "node": ">=8" } }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, "node_modules/xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -8853,6 +9601,12 @@ "node": ">=4.0" } }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -8966,34 +9720,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } } }, "dependencies": { @@ -9144,9 +9870,9 @@ } }, "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -9161,18 +9887,18 @@ } }, "@mdn/browser-compat-data": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.1.3.tgz", - "integrity": "sha512-Qdqeox4APsYwAQQSO68D1p75DL9an1wS8b/51m+nH98unN4jbS5bvg22WQrg+TMq2/3Mg/E5zprqfUzJD84qgw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.2.4.tgz", + "integrity": "sha512-jEUurwoeiHOB7SceVnsg3ULxNlf9XxqMfcKNM+eJduPgCcoCnbLi/6og+e764fTAZCcBkqGcWUMhLQXwcqpbJQ==", "dev": true, "requires": { "extend": "3.0.2" } }, "@mozilla/rally": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.5.0.tgz", - "integrity": "sha512-/71gX9nhs+UpOr2RwIw3jz34kPnhFr5Gjt2iHp9vv73xwD/yBJKOqexxrTNdTzfP8rM7Zxi8bV7R4uZ3nUU1vw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/rally/-/rally-0.6.0.tgz", + "integrity": "sha512-NrbQqb7ihocktqeLz4FXmVIb8I7ppfYisFguNnVnndVPVXSXrgXQi/BJnpO6LsXQ8bJE+L62JvDdOsSRlEYx2g==", "dev": true }, "@mozilla/readability": { @@ -9182,19 +9908,53 @@ "dev": true }, "@mozilla/web-science": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.2.0.tgz", - "integrity": "sha512-DnlYwg9MuZanFkGcb+wbdVYzYyW9OPoX/uI6QPEuIkwirgXVmAI5oRHx/k2WsYpvf4/lQIZYYLwCSsZRZhFvpw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mozilla/web-science/-/web-science-0.4.0.tgz", + "integrity": "sha512-9BNEXf3jvHl9CM7lCZREzlXbZ5GrLT/ZE4urspjvN1jIAMcSdobc3iqzLwD47JXXGOxuGmznhCn78TclSgTgOw==", "dev": true, "requires": { "@mozilla/readability": "^0.4.1", - "dexie": "^3.0.3" + "@rollup/plugin-commonjs": "19.0.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "globby": "^11.0.0", + "js-base64": "^3.6.0", + "jsdom": "^16.6.0", + "rollup": "^2.41.4", + "rollup-plugin-copy": "^3.4.0", + "tldts": "^5.7.25", + "uuid": "^8.3.2" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" } }, "@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", + "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -9207,9 +9967,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", - "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", + "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -9221,15 +9981,25 @@ } }, "@rollup/plugin-replace": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz", - "integrity": "sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" } }, + "@rollup/plugin-typescript": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.1.tgz", + "integrity": "sha512-Qd2E1pleDR4bwyFxqbjt4eJf+wB0UKVMLc7/BAFDGVdAXQMCsD4DUv5/7/ww47BZCYxWtJqe1Lo0KVNswBJlRw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.17.0" + } + }, "@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", @@ -9265,6 +10035,12 @@ "defer-to-connect": "^1.0.1" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/decompress": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.3.tgz", @@ -9293,6 +10069,25 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/fs-extra": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/got": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", @@ -9303,6 +10098,12 @@ "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -9315,28 +10116,122 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "@types/node": { - "version": "14.14.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz", - "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==", + "@types/node": { + "version": "14.14.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz", + "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.1.tgz", + "integrity": "sha512-aoIusj/8CR+xDWmZxARivZjbMBQTT9dImUtdZ8tVCVRXgBUuuZyM5Of5A9D9arQPxbi/0rlJLcuArclz/rCMJw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.26.1", + "@typescript-eslint/scope-manager": "4.26.1", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.21", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.1.tgz", + "integrity": "sha512-sQHBugRhrXzRCs9PaGg6rowie4i8s/iD/DpTB+EXte8OMDfdCG5TvO73XlO9Wc/zi0uyN4qOmX9hIjQEyhnbmQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.26.1", + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/typescript-estree": "4.26.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.1.tgz", + "integrity": "sha512-q7F3zSo/nU6YJpPJvQveVlIIzx9/wu75lr6oDbDzoeIRWxpoc/HQ43G4rmMoCc5my/3uSj2VEpg/D83LYZF5HQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.26.1", + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/typescript-estree": "4.26.1", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.1.tgz", + "integrity": "sha512-TW1X2p62FQ8Rlne+WEShyd7ac2LA6o27S9i131W4NwDSfyeVlQWhw8ylldNNS8JG6oJB9Ha9Xyc+IUcqipvheQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/visitor-keys": "4.26.1" + } + }, + "@typescript-eslint/types": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.1.tgz", + "integrity": "sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg==", "dev": true }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "@typescript-eslint/typescript-estree": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz", + "integrity": "sha512-l3ZXob+h0NQzz80lBGaykdScYaiEbFqznEs99uwzm8fPHhDjwaBFfQkjUC/slw6Sm7npFL8qrGEAMxcfBsBJUg==", "dev": true, "requires": { - "@types/node": "*" + "@typescript-eslint/types": "4.26.1", + "@typescript-eslint/visitor-keys": "4.26.1", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "@typescript-eslint/visitor-keys": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz", + "integrity": "sha512-IGouNSSd+6x/fHtYRyLOM6/C+QxMDzWlDtN41ea+flWuSF9g02iqcIlX8wM53JkfljoIjP0U+yp7SiTS1onEkw==", "dev": true, "requires": { - "@types/node": "*" + "@typescript-eslint/types": "4.26.1", + "eslint-visitor-keys": "^2.0.0" } }, "@ungap/promise-all-settled": { @@ -9345,6 +10240,12 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -9362,6 +10263,16 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", @@ -9369,39 +10280,43 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, "addons-linter": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.21.0.tgz", - "integrity": "sha512-1XfqeVbvaEpjRlWJq/Ti0W6bH3RszaIDPeKl+4ZmXCx+C8ovRqy4CJmitqNffLr+2KpY4h5ei2eRygbvJYDyrw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-3.2.0.tgz", + "integrity": "sha512-b6oViLOBgXWsld5L3DJiJSt77DYjVrk2Yam2/gD5e2bsj5xfNvavugwhlJP/MIF0j5yetYT/XFQDXY1Hs0flOA==", "dev": true, "requires": { - "@babel/runtime": "7.13.9", - "@mdn/browser-compat-data": "3.1.3", - "addons-scanner-utils": "4.2.0", + "@mdn/browser-compat-data": "3.2.4", + "addons-scanner-utils": "4.4.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.0", - "cheerio": "1.0.0-rc.5", + "cheerio": "1.0.0-rc.6", "columnify": "1.5.4", "common-tags": "1.8.0", "deepmerge": "4.2.2", - "dispensary": "0.61.0", - "eslint": "7.21.0", + "dispensary": "0.62.0", + "eslint": "7.24.0", "eslint-plugin-no-unsanitized": "3.1.4", "eslint-visitor-keys": "2.0.0", "espree": "7.3.1", "esprima": "4.0.1", "fluent-syntax": "0.13.0", - "fsevents": "2.3.2", "glob": "7.1.6", + "image-size": "0.9.7", "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.11.1", - "postcss": "8.2.7", - "probe-image-size": "6.0.0", + "pino": "6.11.2", + "postcss": "8.2.10", "relaxed-json": "1.0.3", - "semver": "7.3.4", + "semver": "7.3.5", "source-map-support": "0.5.19", "tosource": "1.0.0", "upath": "2.0.1", @@ -9410,9 +10325,9 @@ }, "dependencies": { "eslint": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz", - "integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -9432,7 +10347,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -9440,7 +10355,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -9453,13 +10368,28 @@ "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" } + }, + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, "addons-scanner-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.2.0.tgz", - "integrity": "sha512-VKLYNlKg2RCMvmOKmbWlu14hjdyk2vcTHscQGmDlnHfWcf6fAb8E7vY9/ajWdLykVVKZEUiGOoD5EIkIp1FyUA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.4.0.tgz", + "integrity": "sha512-fEUGQIqLYeLl5cV6FFSHU+XFlOYETXqm8jxmYGsVayjZaAqWEkIjTXNu4+pDEiqIkrqjPYP2izjrnhBpHRsyog==", "dev": true, "requires": { "@types/yauzl": "2.9.1", @@ -9612,82 +10542,6 @@ } } }, - "archiver": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz", - "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.4" - }, - "dependencies": { - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -9831,7 +10685,8 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "peer": true }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -9952,6 +10807,12 @@ "fill-range": "^7.0.1" } }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -9963,6 +10824,7 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "peer": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -10113,31 +10975,30 @@ } }, "cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "version": "1.0.0-rc.6", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz", + "integrity": "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==", "dev": true, "requires": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" + "cheerio-select": "^1.3.0", + "dom-serializer": "^1.3.1", + "domhandler": "^4.1.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1" } }, - "cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", + "cheerio-select": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", + "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", "dev": true, "requires": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" + "css-select": "^4.1.2", + "css-what": "^5.0.0", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0" } }, "chokidar": { @@ -10306,31 +11167,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compress-commons": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", - "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -10429,39 +11265,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dev": true, - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", @@ -10489,24 +11292,47 @@ "dev": true }, "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", + "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" } }, "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -10516,6 +11342,17 @@ "assert-plus": "^1.0.0" } }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, "debounce": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", @@ -10537,6 +11374,12 @@ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -10788,27 +11631,38 @@ "dev": true, "peer": true }, - "dexie": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.0.3.tgz", - "integrity": "sha512-BSFhGpngnCl1DOr+8YNwBDobRMH0ziJs2vts69VilwetHYOtEDcLqo7d/XiIphM0tJZ2rPPyAGd31lgH2Ln3nw==", - "dev": true - }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "dispensary": { - "version": "0.61.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.61.0.tgz", - "integrity": "sha512-5BK13jrYQ+0bHgZBv7IOQsff5ydeNcnp87w3c7T8x5im21RDFQyiHrTlH0DoouZDyAVHILpat4Ytf7gRuhMRgw==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", + "integrity": "sha512-x8vqPX7owhzDp3Y6t/iOuTuNoWx5hlZKITlzlybETsZoY05cYDubGpwt0soLfRLAWLuxX1lq0lTc/vXtk/CDCw==", "dev": true, "requires": { "async": "~3.2.0", "natural-compare-lite": "~1.4.0", - "pino": "~6.9.0", + "pino": "~6.11.0", "request": "~2.88.0", "sha.js": "~2.4.4", "source-map-support": "~0.5.4", @@ -10820,26 +11674,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true - }, - "pino": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.9.0.tgz", - "integrity": "sha512-9RrRJsKOsgj50oGoR/y4EEVyUjMb/eRu8y4hjwPqM6q214xsxSxY/IKB+aEEv0slqNd4U0RVRfivKfy83UxgUQ==", - "dev": true, - "requires": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", - "flatstr": "^1.0.12", - "pino-std-serializers": "^2.4.2", - "quick-format-unescaped": "^4.0.1", - "sonic-boom": "^1.0.2" - } - }, - "pino-std-serializers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", - "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", - "dev": true } } }, @@ -10853,40 +11687,57 @@ } }, "dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, "domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "requires": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "dot-prop": { @@ -11076,9 +11927,9 @@ } }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "error-ex": { @@ -11162,26 +12013,88 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, "eslint": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", - "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", + "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", @@ -11193,7 +12106,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -11202,7 +12115,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -11538,12 +12451,6 @@ } } }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "dev": true - }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -11641,6 +12548,20 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, "fast-json-patch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", @@ -11671,9 +12592,9 @@ "dev": true }, "fast-redact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz", - "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz", + "integrity": "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==", "dev": true }, "fast-safe-stringify": { @@ -11682,6 +12603,15 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -11781,18 +12711,15 @@ } }, "firefox-profile": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.1.0.tgz", - "integrity": "sha512-n+0jsWhW57i7cAmdHg67W6u5vVSoIJN9D+d7M3w1MzhFLE5X/QxBfP80ksjNvNQDFXGdJQAnW9YupLkzgCxaFQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.0.tgz", + "integrity": "sha512-Z+/6GQ0JEW2eqgj63EYNbgKSgoIz7w1yXlkOWAIRkCNnj50rkfnQIz8uYwJkobxwYQM8vjFIbYiVtYuQV8US2A==", "dev": true, "requires": { "adm-zip": "~0.5.x", - "archiver": "~5.2.0", "fs-extra": "~9.0.1", "ini": "~2.0.0", - "lazystream": "~1.0.0", "minimist": "^1.2.5", - "uuid": "^8.3.2", "xml2js": "~0.4.23" }, "dependencies": { @@ -11874,9 +12801,9 @@ } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "peer": true }, @@ -11902,7 +12829,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "peer": true }, "fs-extra": { "version": "9.1.0", @@ -11951,9 +12879,9 @@ "dev": true }, "fx-runner": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", - "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.1.0.tgz", + "integrity": "sha512-v/Eo69DDFW30zPdvjCYVXddjVvLy2xGeRbg0S18bPd8kEc0q9VsDoDkjyOxY5lTZsAqcQGy0OWjs3HCfRVBNSg==", "dev": true, "requires": { "commander": "2.9.0", @@ -12004,9 +12932,9 @@ } }, "geckodriver": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.2.tgz", - "integrity": "sha512-xcf1OLfHqNX4+wQhj4weu2gtiwtPnV8yEEKvLkC8GuFtUc5WjOGodV/2pHiYJjCSJRQfsmIgY5Xs1zaJf/OGFA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.22.3.tgz", + "integrity": "sha512-HJvImEC5m/2J7aIn+AdiZml1yTOSFZAb8h8lmZBSUgGSCPdNTd0/6YxBVBsvzpaTuaDQHbMUr+8ikaFKF+Sj/A==", "dev": true, "requires": { "adm-zip": "0.5.3", @@ -12098,6 +13026,28 @@ "type-fest": "^0.8.1" } }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, "got": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", @@ -12224,15 +13174,24 @@ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, "htmlparser2": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", - "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.4.4", + "domutils": "^2.5.2", "entities": "^2.0.0" } }, @@ -12266,6 +13225,17 @@ } } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -12306,7 +13276,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "peer": true }, "ignore": { "version": "4.0.6", @@ -12314,6 +13285,15 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "image-size": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.9.7.tgz", + "integrity": "sha512-KRVgLNZkr00YGN0qn9MlIrmlxbRhsCcEb1Byq3WKGnIV4M48iD185cprRtaoK4t5iC+ym2Q5qlArxZ/V1yzDgA==", + "dev": true, + "requires": { + "queue": "6.0.2" + } + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -12580,6 +13560,18 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -12700,6 +13692,12 @@ "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", "dev": true }, + "js-base64": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.1.tgz", + "integrity": "sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12722,6 +13720,77 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", @@ -12887,15 +13956,6 @@ "package-json": "^6.3.0" } }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, "lcid": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", @@ -12996,22 +14056,10 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { + "lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, "lodash.includes": { @@ -13050,16 +14098,22 @@ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "log-symbols": { @@ -13174,6 +14228,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -13181,6 +14241,16 @@ "dev": true, "peer": true }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -13256,9 +14326,9 @@ "dev": true }, "mocha": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -13437,28 +14507,6 @@ "dev": true, "optional": true }, - "needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -13697,6 +14745,12 @@ "boolbase": "^1.0.0" } }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -14103,9 +15157,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true }, "pidtree": { @@ -14136,16 +15190,16 @@ } }, "pino": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", - "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.2.tgz", + "integrity": "sha512-bmzxwbrIPxQUlAuMkF4PWVErUGERU4z37HazlhflKFg08crsNE3fACGN6gPwg5xtKOK47Ux5cZm8YCuLV4wWJg==", "dev": true, "requires": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.7", "flatstr": "^1.0.12", "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.1", + "quick-format-unescaped": "4.0.1", "sonic-boom": "^1.0.2" } }, @@ -14210,14 +15264,22 @@ } }, "postcss": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.7.tgz", - "integrity": "sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw==", + "version": "8.2.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", + "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", "dev": true, "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.20", + "nanoid": "^3.1.22", "source-map": "^0.6.1" + }, + "dependencies": { + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + } } }, "prelude-ls": { @@ -14232,23 +15294,6 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "dev": true - }, - "probe-image-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-6.0.0.tgz", - "integrity": "sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA==", - "dev": true, - "requires": { - "deepmerge": "^4.0.0", - "needle": "^2.5.2", - "stream-parser": "~0.3.1" - } - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -14262,13 +15307,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "peer": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, @@ -14322,10 +15367,25 @@ "strict-uri-encode": "^1.0.0" } }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quick-format-unescaped": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.2.tgz", - "integrity": "sha512-HNPqtTHgal9dBpJxibFGgOEmlaTbwEbplrR+oOiWp9aNFlFKBYfkbvvF8VrJPK65okrZuGOwHKLfe7/gT6NWuw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", "dev": true }, "ramda": { @@ -14518,15 +15578,6 @@ "util-deprecate": "~1.0.1" } }, - "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", @@ -14723,6 +15774,12 @@ "lowercase-keys": "^1.0.0" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -14733,14 +15790,86 @@ } }, "rollup": { - "version": "2.41.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.4.tgz", - "integrity": "sha512-f9IHfMO8p2Y8OdisI7Oj3oKkPuaQ6cgSwYqAi0TDvP3w2p+oX1VejX/w28a1h8WTnrapzfO5d4Uqhww+gL0b0g==", + "version": "2.50.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz", + "integrity": "sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg==", "dev": true, "requires": { "fsevents": "~2.3.1" } }, + "rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "requires": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -14776,6 +15905,15 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, "seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", @@ -14787,9 +15925,9 @@ } }, "selenium-webdriver": { - "version": "4.0.0-beta.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.2.tgz", - "integrity": "sha512-uuNl3T1JjhrXCO4UAAy+iIIgZ/PqgYNiYvy+yfWCY+x2vHH9y7tIdD9a/q1rwbf/5jD/ENwYlVuNj46uIngknA==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.3.tgz", + "integrity": "sha512-R0mGHpQkSKgIWiPgcKDcckh4A6aaK0KTyWxs5ieuiI7zsXQ+Kb6neph+dNoeqq3jSBGyv3ONo2w3oohoL4D/Rg==", "dev": true, "requires": { "jszip": "^3.5.0", @@ -14810,9 +15948,9 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -14981,6 +16119,12 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -14993,9 +16137,9 @@ } }, "sonic-boom": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.2.tgz", - "integrity": "sha512-/B4tAuK2+hIlR94GhhWU1mJHWk5lt0CEuBvG0kvk1qIAzQc4iB1TieMio8DCZxY+Y7tsuzOxSUDOGmaUm3vXMg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", "dev": true, "requires": { "atomic-sleep": "^1.0.0", @@ -15125,32 +16269,6 @@ "dev": true, "peer": true }, - "stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", - "dev": true, - "requires": { - "debug": "2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -15313,22 +16431,30 @@ "has-flag": "^4.0.0" } }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ajv": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", - "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -15411,6 +16537,21 @@ "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", "dev": true }, + "tldts": { + "version": "5.7.38", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-5.7.38.tgz", + "integrity": "sha512-Ji+xTLv8TAWq2y7/+RCC/OpWO7ExpgsZyijA27Q2uHElyaMrNhgjcZVbgvpwX0Imgk5w8jnJqRDLrmeIefma2Q==", + "dev": true, + "requires": { + "tldts-core": "^5.7.38" + } + }, + "tldts-core": { + "version": "5.7.38", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-5.7.38.tgz", + "integrity": "sha512-mcL16YTXjpVJ+ekoKC/ddvdjGNMg8HkdWQNp3WNz26WJMV7Z2Hjr1IPwYYr9W3LxGdXV7mmg21Zk2vSstiSsFg==", + "dev": true + }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -15465,6 +16606,15 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -15496,6 +16646,30 @@ "strip-bom": "^3.0.0" } }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true, + "peer": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -15558,6 +16732,13 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true, + "peer": true + }, "unbox-primitive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", @@ -15715,6 +16896,24 @@ "extsprintf": "^1.2.0" } }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, "watchpack": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", @@ -15735,14 +16934,14 @@ } }, "web-ext": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.0.0.tgz", - "integrity": "sha512-djjTY89kM5ULdKYQo+6TYJSlT+0zNkanW5hQJNybOqGyovUYpH7C3Ns9Pd1cy6ApbmG2VV4Gds9u4yCSuRfHUw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.1.0.tgz", + "integrity": "sha512-f9sBuysFoCJAuS03wRtSBH8dPKQUZvCVT+AoqBW3tBBN6a92P0PyGF2lTwZJ5wrOOvXu7w2DvuAFOU6CnBugFw==", "dev": true, "requires": { "@babel/runtime": "7.13.9", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "2.21.0", + "addons-linter": "3.2.0", "bunyan": "1.8.15", "camelcase": "6.2.0", "chrome-launcher": "0.13.4", @@ -15750,9 +16949,9 @@ "decamelize": "5.0.0", "es6-error": "4.1.1", "event-to-promise": "0.8.0", - "firefox-profile": "4.1.0", + "firefox-profile": "4.2.0", "fs-extra": "9.1.0", - "fx-runner": "1.0.13", + "fx-runner": "1.1.0", "import-fresh": "3.3.0", "mkdirp": "1.0.4", "multimatch": "5.0.0", @@ -15806,11 +17005,43 @@ } }, "webextension-polyfill": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz", - "integrity": "sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", + "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", "dev": true }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, "when": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", @@ -15938,9 +17169,9 @@ } }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, "requires": {} }, @@ -15950,6 +17181,12 @@ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, "xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -15966,6 +17203,12 @@ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -16059,30 +17302,6 @@ "dev": true } } - }, - "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } } } } diff --git a/package.json b/package.json index 8f77199..2e47f7a 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,40 @@ { "name": "rally-study-template", - "version": "0.3.1", + "version": "0.4.0", "scripts": { - "compile-typescript": "tsc", "build": "rollup -c", "dev": "rollup -c --config-enable-developer-mode", - "lint": "eslint src-ts/* && web-ext lint", + "lint": "eslint . && web-ext lint", "package": "npm run build && web-ext build --overwrite-dest --ignore-files \"./tests/**/*\" --ignore-files \"./src/**/*\" --ignore-files \"./rollup.config.js\"", "start": "npm run build && web-ext run --browser-console", + "start-dev": "npm run dev && web-ext run --browser-console", "test-integration": "npm run package && mv web-ext-artifacts/*.zip web-ext-artifacts/study.xpi && mocha --timeout 30000 \"./tests/integration/*.js\"", "watch": "npm-run-all --parallel watch-raw watch-bundled", "watch-raw": "npm run dev -- -w", "watch-bundled": "web-ext run --browser-console --watch-file dist/background.js" }, "devDependencies": { - "@mozilla/rally": "^0.5.0", - "@mozilla/web-science": "^0.2.0", - "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.4.1", - "eslint": "^7.22.0", + "@mozilla/rally": "^0.6.0", + "@mozilla/web-science": "^0.4.0", + "@rollup/plugin-commonjs": "^19.0.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-replace": "^2.4.2", + "@rollup/plugin-typescript": "^8.2.1", + "@typescript-eslint/eslint-plugin": "^4.19.0", + "@typescript-eslint/parser": "^4.19.0", + "eslint": "^7.26.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-mocha": "^8.1.0", "eslint-plugin-node": "^11.1.0", - "geckodriver": "^1.22.2", - "mocha": "^8.3.2", + "geckodriver": "^1.22.3", + "globby": "^11.0.3", + "mocha": "^8.4.0", "npm-run-all": "^4.1.5", - "rollup": "^2.41.4", - "selenium-webdriver": "^4.0.0-beta.2", - "@typescript-eslint/eslint-plugin": "^4.19.0", - "@typescript-eslint/parser": "^4.19.0", - "web-ext": "^6.0.0", - "webextension-polyfill": "^0.7.0" + "rollup": "^2.47.0", + "rollup-plugin-copy": "^3.4.0", + "selenium-webdriver": "^4.0.0-beta.3", + "web-ext": "^6.1.0", + "webextension-polyfill": "^0.8.0" }, "engines": { "node": ">=14.0.0" @@ -49,4 +52,4 @@ "url": "https://github.com/mozilla-rally/study-template/issues" }, "homepage": "https://github.com/mozilla-rally/study-template#readme" -} \ No newline at end of file +} From 469d7cfe647f7acd082d8bbffe4eb64369101012 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Thu, 10 Jun 2021 14:57:23 -0400 Subject: [PATCH 162/399] createPopup privileged method made async for proper functionality --- experimental/api.js | 2 +- experimental/schema.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/experimental/api.js b/experimental/api.js index 125e525..d6a72b2 100644 --- a/experimental/api.js +++ b/experimental/api.js @@ -17,7 +17,7 @@ this.experimental = class extends ExtensionAPI { getAPI() { return { experimental: { - createPopup(searchEngineOld, searchEngineNew, modalPrimaryRevert) { + async createPopup(searchEngineOld, searchEngineNew, modalPrimaryRevert) { // Returns whether the search engine should be reverted. const flags = Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 + diff --git a/experimental/schema.json b/experimental/schema.json index cb2f575..647a1c5 100644 --- a/experimental/schema.json +++ b/experimental/schema.json @@ -6,7 +6,7 @@ "name": "createPopup", "type": "function", "description": "Create popup", - "async": false, + "async": true, "parameters": [ { "name": "searchEngineOld", From 715666960bd41ef0188f274d3cf224f1cebf970d Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Fri, 11 Jun 2021 16:20:00 -0400 Subject: [PATCH 163/399] Created separate schema for each data type --- schemas/choice_screen.schema.json | 35 ++++++++ schemas/daily.schema.json | 47 ++++++++++ schemas/initial.measurements.1.schema.json | 82 ----------------- schemas/initial.schema.json | 39 +++++++++ schemas/modal.schema.json | 14 +++ schemas/notice.schema.json | 20 +++++ schemas/regular.measurements.1.schema.json | 33 ------- .../serpVisitData.measurements.1.schema.json | 87 ------------------- schemas/serp_visit.schema.json | 83 ++++++++++++++++++ 9 files changed, 238 insertions(+), 202 deletions(-) create mode 100644 schemas/choice_screen.schema.json create mode 100644 schemas/daily.schema.json delete mode 100644 schemas/initial.measurements.1.schema.json create mode 100644 schemas/initial.schema.json create mode 100644 schemas/modal.schema.json create mode 100644 schemas/notice.schema.json delete mode 100644 schemas/regular.measurements.1.schema.json delete mode 100644 schemas/serpVisitData.measurements.1.schema.json create mode 100644 schemas/serp_visit.schema.json diff --git a/schemas/choice_screen.schema.json b/schemas/choice_screen.schema.json new file mode 100644 index 0000000..f693ff4 --- /dev/null +++ b/schemas/choice_screen.schema.json @@ -0,0 +1,35 @@ +{ + "ChoiceScreenInterventionData": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttentionTime": { + "type": "number" + }, + "OriginalEngine": { + "type": "string" + }, + "SelectedEngine": { + "type": "string" + }, + "SeeMoreSelected": { + "type": "boolean" + }, + "Ordering": { + "type": "array", + "items": { + "type": "string" + } + }, + "DetailsExpanded": { + "type": "array", + "items": { + "type": "string" + } + }, + "Attempts": { + "type": "number" + } + } + } +} \ No newline at end of file diff --git a/schemas/daily.schema.json b/schemas/daily.schema.json new file mode 100644 index 0000000..d3b3bcc --- /dev/null +++ b/schemas/daily.schema.json @@ -0,0 +1,47 @@ +{ + "DailyCollectionData": { + "type": "object", + "additionalProperties": false, + "properties": { + "CurrentEngine": { + "type": "string" + }, + "SerpVisitQueries": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "SearchEngine": { + "type": "string" + }, + "Queries": { + "type": "number" + } + } + } + }, + "HistoryQueries": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "SearchEngine": { + "type": "string" + }, + "Queries": { + "type": "number" + } + } + } + }, + "Time": { + "type": "number" + }, + "TimeOffset": { + "type": "number" + } + } + } +} \ No newline at end of file diff --git a/schemas/initial.measurements.1.schema.json b/schemas/initial.measurements.1.schema.json deleted file mode 100644 index 09d0e86..0000000 --- a/schemas/initial.measurements.1.schema.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "type": "object", - "properties": { - "WebScience.version": { - "type": "string" - }, - "SurveyId": { - "type": "string", - "description": "ID sent to Qualtrics, for associating survey responses with telemetry data" - }, - "InitialEngine": { - "type": "string" - }, - "InterventionType": { - "type": "string" - }, - "Time": { - "type": "number" - }, - "TimeOffset": { - "type": "number" - }, - "HistoryData": { - "type": "array", - "items": { - "type": "object", - "properties": { - "SearchEngine": { - "type": "string" - }, - "Visits": { - "type": "boolean" - } - }, - "additionalProperties": false - } - }, - "NoticeNewEngine": { - "type": "string" - }, - "NoticeInterventionData": { - "type": "object", - "properties": { - "Revert": { - "type": "boolean" - }, - "AttentionTime": { - "type": "number" - } - }, - "additionalProperties": false - }, - "BallotInterventionData": { - "type": "object", - "properties": { - "SelectedEngine": { - "type": "string" - }, - "AttentionTime": { - "type": "number" - }, - "SeeMoreSelected": { - "type": "boolean" - }, - "Ordering": { - "type": "array", - "items": { - "type": "string" - } - }, - "DetailsExpanded": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - } - } -} \ No newline at end of file diff --git a/schemas/initial.schema.json b/schemas/initial.schema.json new file mode 100644 index 0000000..a1bc443 --- /dev/null +++ b/schemas/initial.schema.json @@ -0,0 +1,39 @@ +{ + "InitialData": { + "type": "object", + "additionalProperties": false, + "properties": { + "SurveyId": { + "type": "string", + "description": "ID sent to Qualtrics, for associating survey responses with telemetry data" + }, + "Engine": { + "type": "string" + }, + "InterventionType": { + "type": "string" + }, + "HistoryQueries": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "SearchEngine": { + "type": "string" + }, + "Queries": { + "type": "number" + } + } + } + }, + "Time": { + "type": "number" + }, + "TimeOffset": { + "type": "number" + } + } + } +} \ No newline at end of file diff --git a/schemas/modal.schema.json b/schemas/modal.schema.json new file mode 100644 index 0000000..ddae717 --- /dev/null +++ b/schemas/modal.schema.json @@ -0,0 +1,14 @@ +{ + "ModalInterventionData": { + "type": "object", + "additionalProperties": false, + "properties": { + "ModalAttempts": { + "type": "number" + }, + "Revert": { + "type": "number" + } + } + } +} \ No newline at end of file diff --git a/schemas/notice.schema.json b/schemas/notice.schema.json new file mode 100644 index 0000000..6cee481 --- /dev/null +++ b/schemas/notice.schema.json @@ -0,0 +1,20 @@ +{ + "NoticeInterventionData": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttentionTime": { + "type": "number" + }, + "RevertSelected": { + "type": "boolean" + }, + "OriginalEngine": { + "type": "string" + }, + "NewEngine": { + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/schemas/regular.measurements.1.schema.json b/schemas/regular.measurements.1.schema.json deleted file mode 100644 index 0af665e..0000000 --- a/schemas/regular.measurements.1.schema.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "type": "object", - "properties": { - "WebScience.version": { - "type": "string" - }, - "Time": { - "type": "number" - }, - "TimeOffset": { - "type": "number" - }, - "CurrentEngine": { - "type": "string" - }, - "SearchEngineQueries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "SearchEngine": { - "type": "string" - }, - "UniqueQueries": { - "type": "number" - } - }, - "additionalProperties": false - } - } - } -} \ No newline at end of file diff --git a/schemas/serpVisitData.measurements.1.schema.json b/schemas/serpVisitData.measurements.1.schema.json deleted file mode 100644 index 8f8f198..0000000 --- a/schemas/serpVisitData.measurements.1.schema.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "type": "object", - "properties": { - "WebScience.version": { - "type": "string" - }, - "SearchPageVisit": { - "type": "object", - "properties": { - "SearchEngine": { - "type": "string" - }, - "AttentionTime": { - "type": "number" - }, - "PageNum": { - "type": "number" - }, - "Attribution": { - "type": "string" - }, - "AttributionID": { - "type": "string" - }, - "SequenceStartOnSerp": { - "type": "boolean" - }, - "OrganicDetails": { - "type": "array", - "items": { - "type": "object", - "properties": { - "TopHeight": { - "type": "number" - }, - "BottomHeight": { - "type": "number" - }, - "PageNum": { - "type": "number" - } - }, - "additionalProperties": false - } - }, - "SelectedOrganicDetails": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Ranking": { - "type": "number" - }, - "AttentionTime": { - "type": "number" - }, - "Loaded": { - "type": "number" - } - }, - "additionalProperties": false - } - }, - "NumAdResults": { - "type": "number" - }, - "NumAdClicks": { - "type": "number" - }, - "SearchAreaTopHeight": { - "type": "number" - }, - "SearchAreaBottomHeight": { - "type": "number" - }, - "Time": { - "type": "number" - }, - "TimeOffset": { - "type": "number" - } - }, - "additionalProperties": false - } - } -} \ No newline at end of file diff --git a/schemas/serp_visit.schema.json b/schemas/serp_visit.schema.json new file mode 100644 index 0000000..75a3029 --- /dev/null +++ b/schemas/serp_visit.schema.json @@ -0,0 +1,83 @@ +{ + "SearchPageVisit": { + "type": "object", + "additionalProperties": false, + "properties": { + "SearchEngine": { + "type": "string" + }, + "AttentionTime": { + "type": "number" + }, + "PageNum": { + "type": "number" + }, + "Attribution": { + "type": "string" + }, + "AttributionID": { + "type": "string" + }, + "Transition": { + "type": "string" + }, + "OrganicDetails": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "TopHeight": { + "type": "number" + }, + "BottomHeight": { + "type": "number" + }, + "PageNum": { + "type": "number" + } + } + } + }, + "SelectedOrganicDetails": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ranking": { + "type": "number" + }, + "AttentionTime": { + "type": "number" + }, + "Loaded": { + "type": "number" + } + } + } + }, + "NumAdResults": { + "type": "number" + }, + "NumAdClicks": { + "type": "number" + }, + "NumInternalClicks": { + "type": "number" + }, + "SearchAreaTopHeight": { + "type": "number" + }, + "SearchAreaBottomHeight": { + "type": "number" + }, + "Time": { + "type": "number" + }, + "TimeOffset": { + "type": "number" + } + } + } +} \ No newline at end of file From 89e93cb4076999f8b84d17fc4ee69adfef4fc0f5 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Fri, 11 Jun 2021 16:21:13 -0400 Subject: [PATCH 164/399] Documentation improvements and slight refactoring --- src/.eslintrc.js | 3 +- ...ebNavigation.ts => AttributionTracking.ts} | 81 ++++---- src/DailyCollection.ts | 73 ++++--- src/{Initial.ts => InitialCollection.ts} | 14 +- src/Intervention.ts | 180 ++++++++++-------- src/Modal.ts | 102 +++++++--- src/PostIntervention.ts | 14 +- src/SearchEngineUtils.ts | 130 +++++++++---- src/SerpVisitCollection.ts | 15 +- src/StudyModule.ts | 28 +-- src/Survey.ts | 63 +++--- src/Utils.ts | 33 ++-- src/background.ts | 94 ++++----- 13 files changed, 492 insertions(+), 338 deletions(-) rename src/{WebNavigation.ts => AttributionTracking.ts} (74%) rename src/{Initial.ts => InitialCollection.ts} (55%) diff --git a/src/.eslintrc.js b/src/.eslintrc.js index ee0de2c..cc695ef 100644 --- a/src/.eslintrc.js +++ b/src/.eslintrc.js @@ -43,6 +43,7 @@ module.exports = { "no-var": "warn", "prefer-const": "warn", "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-explicit-any": "off" + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/ban-ts-comment": "off" }, }; diff --git a/src/WebNavigation.ts b/src/AttributionTracking.ts similarity index 74% rename from src/WebNavigation.ts rename to src/AttributionTracking.ts index fdb4c2d..2213067 100755 --- a/src/WebNavigation.ts +++ b/src/AttributionTracking.ts @@ -1,7 +1,10 @@ import * as webScience from "@mozilla/web-science"; import * as SearchEngineUtils from "./SearchEngineUtils.js" -// page ID to {attribution, attributionID, and engine} +/** + * @type {Object} + * An object that maps page IDs to attribution details. + */ const pageIdToAttributionData: { [pageId: string]: { @@ -10,62 +13,58 @@ const pageIdToAttributionData: { engine: string; transition: string; } -} = {} +} = {}; /** + * @type {Object} * An object that, for each tab, maps URLs to IDs of pages visited in the tab. * Used to determine the sequence a page visit belongs to if the user navigates with forward/back. - * @type {Object} - * @private */ const tabHistoryPageIds: { [tabId: number]: { [normalizedUrl: string]: string } -} = {} +} = {}; /** - * Registers listeners for webNavigation events that keep track of page attribution details for SERP pages + * Initializes tracking of attribution details for page visits. */ -export function registerWebNavigationTracking(): void { +export function initializeAttributionTracking(): void { const allEngineMatchPatterns = SearchEngineUtils.getTrackedEnginesMatchPatterns() - webScience.pageTransition.onPageTransitionData.addListener(pageTransitionDataEvent => { + const pageUrl = pageTransitionDataEvent.url; + const pageId = pageTransitionDataEvent.pageId; + + // Gets the engine of the page from the url. If the url is not for one of the tracked engines, + // we do not need to track attribution information for the page. const engine = SearchEngineUtils.getEngineFromURL(pageTransitionDataEvent.url); - const newAttributionID = webScience.id.generateId(); if (!engine) { return; } - const pageId = pageTransitionDataEvent.pageId; - let normalizedUrl; - try { - normalizedUrl = webScience.matching.normalizeUrl(pageTransitionDataEvent.url); - } catch (error) { - normalizedUrl = null; - console.error(error); - } + // Create a new attribution ID that can be used if the page is part of a new attribution sequence. + const newAttributionID = webScience.id.generateId(); + // Get the attribution info for a source page if it exists const sourcePageAttributionInfo = pageTransitionDataEvent.tabSourcePageId && pageTransitionDataEvent.tabSourcePageId in pageIdToAttributionData ? pageIdToAttributionData[pageTransitionDataEvent.tabSourcePageId] : null; if (pageTransitionDataEvent.transitionQualifiers.includes("forward_back")) { - + // If the forward/back navigation creates a new tab, than we copy the history data from the opening tab. if (pageTransitionDataEvent.isOpenedTab) { - // make deep copy - tabHistoryPageIds[pageTransitionDataEvent.tabId] = { ...tabHistoryPageIds[pageTransitionDataEvent.openerTabId] } + tabHistoryPageIds[pageTransitionDataEvent.tabId] = { ...tabHistoryPageIds[pageTransitionDataEvent.openerTabId] }; } // If the user used the forward or back button to trigger the navigation, then we continue the attribution from the // most recent visit to the normalized URL in the tab if possible. - if (normalizedUrl && pageTransitionDataEvent.tabId in tabHistoryPageIds && - normalizedUrl in tabHistoryPageIds[pageTransitionDataEvent.tabId] && - tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] in pageIdToAttributionData) { + if (pageUrl && pageTransitionDataEvent.tabId in tabHistoryPageIds && + pageUrl in tabHistoryPageIds[pageTransitionDataEvent.tabId] && + tabHistoryPageIds[pageTransitionDataEvent.tabId][pageUrl] in pageIdToAttributionData) { - const historyPageId = tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] - const historyPageAttributionData = pageIdToAttributionData[historyPageId] + const historyPageId = tabHistoryPageIds[pageTransitionDataEvent.tabId][pageUrl]; + const historyPageAttributionData = pageIdToAttributionData[historyPageId]; pageIdToAttributionData[pageId] = { attribution: historyPageAttributionData.attribution, attributionID: historyPageAttributionData.attributionID, @@ -81,42 +80,42 @@ export function registerWebNavigationTracking(): void { }; } } else if (pageTransitionDataEvent.transitionType === "reload" || pageTransitionDataEvent.isHistoryChange) { - // If the transition was due to a form submit or link click, then we copy the attribution information from the source - // page as long as the engine of the source page matches the engine of the current page. If it does not, then - // we cannot determine the attribution. if (sourcePageAttributionInfo && sourcePageAttributionInfo.engine === engine) { + // If the transition was due to a reload or a url change with the History API, then we continue the attribution + // of the source page as long as the engine of the source page matches the engine of the current page. If it does not, + // then the attribution of the page is unknown (this shouldn't happen) pageIdToAttributionData[pageId] = { attribution: sourcePageAttributionInfo.attribution, attributionID: sourcePageAttributionInfo.attributionID, engine: engine, transition: pageTransitionDataEvent.transitionType === "reload" ? "reload" : "historyChange" - } + }; } else { pageIdToAttributionData[pageId] = { attribution: "unknown", attributionID: newAttributionID, engine: engine, transition: pageTransitionDataEvent.transitionType === "reload" ? "reload" : "historyChange" - } + }; } } else if (pageTransitionDataEvent.transitionType === "form_submit" || (pageTransitionDataEvent.transitionType === "link" && pageTransitionDataEvent.tabSourceClick)) { // If the transition was due to a form submit or link click, then we copy the attribution information from the source // page as long as the engine of the source page matches the engine of the current page. If it does not, then the - // attribution is from link click or form submit from an external site. + // attribution is from a link click or form submit from an external site. if (sourcePageAttributionInfo && sourcePageAttributionInfo.engine === engine) { pageIdToAttributionData[pageId] = { attribution: sourcePageAttributionInfo.attribution, attributionID: sourcePageAttributionInfo.attributionID, engine: engine, transition: pageTransitionDataEvent.transitionType - } + }; } else { pageIdToAttributionData[pageId] = { attribution: pageTransitionDataEvent.transitionType, attributionID: newAttributionID, engine: engine, transition: pageTransitionDataEvent.transitionType - } + }; } } else if (pageTransitionDataEvent.transitionType !== "link") { // If pageTransitionDataEvent.transitionType is not "link" (the fallback value for transitionType), @@ -127,16 +126,16 @@ export function registerWebNavigationTracking(): void { attributionID: newAttributionID, engine: engine, transition: pageTransitionDataEvent.transitionType - } + }; } else if (pageTransitionDataEvent.transitionQualifiers.includes("from_address_bar")) { - // If "from_address_bar" is in transitionQualifiers, this is a new attribution because we - // know the transition was not due to a link click or form submit. + // If the transition is from the address bar, this is a new attribution because the transition was not from + // a link click or form submit. pageIdToAttributionData[pageId] = { attribution: "from_address_bar", attributionID: newAttributionID, engine: engine, transition: "from_address_bar" - } + }; } else { // If we reach here, then pageTransitionDataEvent.transitionType is "link" but // pageTransitionDataEvent.tabSourceClick is false so we assume the transition @@ -146,13 +145,11 @@ export function registerWebNavigationTracking(): void { attributionID: newAttributionID, engine: engine, transition: "unknown" - } + }; } - if (normalizedUrl) { - if (!tabHistoryPageIds[pageTransitionDataEvent.tabId]) tabHistoryPageIds[pageTransitionDataEvent.tabId] = {} - tabHistoryPageIds[pageTransitionDataEvent.tabId][normalizedUrl] = pageId; - } + if (!tabHistoryPageIds[pageTransitionDataEvent.tabId]) tabHistoryPageIds[pageTransitionDataEvent.tabId] = {} + tabHistoryPageIds[pageTransitionDataEvent.tabId][pageUrl] = pageId; }, { matchPatterns: allEngineMatchPatterns, diff --git a/src/DailyCollection.ts b/src/DailyCollection.ts index d10d7c2..b01430a 100755 --- a/src/DailyCollection.ts +++ b/src/DailyCollection.ts @@ -3,59 +3,75 @@ import * as Utils from "./Utils.js" import * as SearchEngineUtils from "./SearchEngineUtils.js" /** - * An array of the tracked search engine names * @type {Array} - * @private + * An array of the tracked search engine names */ const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] /** - * An object that maps each of the tracked search engines to a set of queries made on the engine * @type {Object} - * @private + * An object that maps each of the tracked search engines to a set of queries made on the engine */ const searchEngineToQuerySetObject: { [engine: string]: Set } = {} +/** + * @type {Object} + * A persistent key-value storage object for the study + */ let storage; -let dailyCollectionStartTime; -export async function startCollection(storageIn: any): Promise { +/** + * @type {number} + * The milliseconds since epoch when daily collection started. + */ +let initialDailyCollectionStartTime; + +/** + * Start daily collection + * @async + **/ +export async function start(storageIn: any): Promise { storage = storageIn; - dailyCollectionStartTime = await storage.get("DailyCollectionStartTime"); - if (!dailyCollectionStartTime) { - dailyCollectionStartTime = Date.now(); - storage.set("DailyCollectionStartTime", dailyCollectionStartTime); + // Get the initial start time of daily collection from storage. + // If the value does not exist in storage, then this is the the intiial start time + // of daily collection and we set the value in storage + initialDailyCollectionStartTime = await storage.get("InitialDailyCollectionStartTime"); + if (!initialDailyCollectionStartTime) { + initialDailyCollectionStartTime = Date.now(); + storage.set("InitialDailyCollectionStartTime", initialDailyCollectionStartTime); } - await registerQueryListener(); + await initializeQueryTracking(); webScience.scheduling.onIdleDaily.addListener(reportDailyData); } /** - * Send telemetry submissions with study data - * Not spawning off worker because we are not doing any additional data aggregation + * Callback for onIdleDaily. + * Reports daily collection data. + * Not spawning off worker because we are not doing significant data aggregation. + * @async */ async function reportDailyData() { - // Create object mapping each engine to the number of unique queries on that engine - const searchEngineToNumQueries: Array<{ SearchEngine: string, UniqueQueries: number }> = [] + // Create object mapping each engine to the number of unique queries made to that engine + // since the start of daily collection. + const searchEngineToNumQueries: Array<{ SearchEngine: string, Queries: number }> = []; for (const searchEngine of searchEngines) { searchEngineToNumQueries.push({ SearchEngine: searchEngine, - UniqueQueries: searchEngineToQuerySetObject[searchEngine].size - }) + Queries: searchEngineToQuerySetObject[searchEngine].size + }); } - // Report regular telemetry submission and clear the list of search page visits data const regularTelemetrySubmission = { CurrentEngine: await Utils.getSearchEngine(), - SearchEngineQueries: searchEngineToNumQueries, + SerpVisitQueries: searchEngineToNumQueries, + HistoryQueries: await SearchEngineUtils.getHistoryData(initialDailyCollectionStartTime), Time: Date.now(), TimeOffset: new Date().getTimezoneOffset(), - HistoryQueries: await SearchEngineUtils.getHistoryData(dailyCollectionStartTime) - } + }; - console.log(regularTelemetrySubmission) + console.log(regularTelemetrySubmission); } /** @@ -64,18 +80,19 @@ async function reportDailyData() { * each search engine from storage * 2. Registers the listener that gets SERP visit data from content scripts and initializes the SERP visit data * array from storage + * @async */ -async function registerQueryListener(): Promise { +async function initializeQueryTracking(): Promise { // Initialize serpQuerySets from the stored list of queries made for each tracked search engines for (const searchEngine of searchEngines) { - const queries = await storage.get(`${searchEngine}Queries`) - searchEngineToQuerySetObject[searchEngine] = new Set(queries) + const queries = await storage.get(`${searchEngine}Queries`); + searchEngineToQuerySetObject[searchEngine] = new Set(queries); } - + // Upon each onPageVisitStart event, get the engine and query for the URL of the new page + // if the page is a SERP for one of the tracked engines. Add the query to the set of queries + // for the respective engine. webScience.pageManager.onPageVisitStart.addListener(pageVisitStartDetails => { - console.log(pageVisitStartDetails.url); - const engineAndQuery = SearchEngineUtils.getEngineAndQueryFromUrl(pageVisitStartDetails.url); if (engineAndQuery) { const engine = engineAndQuery.engine; diff --git a/src/Initial.ts b/src/InitialCollection.ts similarity index 55% rename from src/Initial.ts rename to src/InitialCollection.ts index b30179f..3141fd4 100755 --- a/src/Initial.ts +++ b/src/InitialCollection.ts @@ -2,15 +2,19 @@ import * as webScience from "@mozilla/web-science"; import * as Utils from "./Utils.js" import * as SearchEngineUtils from "./SearchEngineUtils.js" -export async function reportInitialData(storage) { +/** + * Run initial collection + * @async + **/ +export async function run(storage) { + const date30DaysAgo = (new Date(new Date().setDate(new Date().getDate() - 30))).valueOf(); const initialData = { SurveyId: await webScience.userSurvey.getSurveyId(), Engine: await Utils.getSearchEngine(), - + HistoryQueries: await SearchEngineUtils.getHistoryData(date30DaysAgo), Time: Date.now(), - TimeOffset: new Date().getTimezoneOffset(), - HistoryQueries: await SearchEngineUtils.getHistoryData((new Date(new Date().setDate(new Date().getDate() - 30))).valueOf()) - } + TimeOffset: new Date().getTimezoneOffset() + }; console.log(initialData); diff --git a/src/Intervention.ts b/src/Intervention.ts index 831cf48..28e404c 100755 --- a/src/Intervention.ts +++ b/src/Intervention.ts @@ -1,61 +1,51 @@ import * as webScience from "@mozilla/web-science"; import * as Utils from "./Utils.js" import * as PostIntervention from "./PostIntervention.js" +import * as SearchEngineUtils from "./SearchEngineUtils.js" +/** + * @type {Object} + * A persistent key-value storage object for the study + */ let storage; -/** - * Select an intervention, save the intervention name to storage, and - * conduct the intervention. +/** + * @type {ConditionSet} + * The set of study interventions and their relative weights. */ -export async function runIntervention(storageIn): Promise { - storage = storageIn - - const interventionType = await webScience.randomization.selectCondition({ - name: "InterventionSelection", - conditions: [ - { - name: "NoIntervention", - weight: 10, - }, - { - name: "NoticeDefault", - weight: 20 - }, - { - name: "NoticeRevert", - weight: 20 - }, - { - name: "ChoiceScreenDefault", - weight: 10 - }, - { - name: "ChoiceScreenHidden", - weight: 10 - }, - { - name: "ChoiceScreenDescriptions", - weight: 10 - }, - { - name: "ChoiceScreenExtended", - weight: 20 - }, - { - name: "ModalPrimaryRevert", - weight: 10 - }, - { - name: "ModalSecondaryRevert", - weight: 10 - }, - ] - } - ); +const interventionSet = { + name: "InterventionSelection", + conditions: [ + { name: "NoIntervention", weight: 10 }, + { name: "NoticeDefault", weight: 20 }, + { name: "NoticeRevert", weight: 20 }, + { name: "ChoiceScreenDefault", weight: 10 }, + { name: "ChoiceScreenHidden", weight: 10 }, + { name: "ChoiceScreenDescriptions", weight: 10 }, + { name: "ChoiceScreenExtended", weight: 20 }, + { name: "ModalPrimaryRevert", weight: 10 }, + { name: "ModalSecondaryRevert", weight: 10 }, + ] +}; - storage.set("InterventionType", interventionType); +/** + * Starts intervention functionality. + * @async + * @param {Object} storage - A persistent key-value storage object for the study + **/ +export async function start(storageIn): Promise { + storage = storageIn; + + // Get the intervention type from storage. + // If the value does not exist in storage, then we randomly select + // an intervention type and save the selection to storage. + let interventionType = await storage.get("InterventionType"); + if (!interventionType) { + interventionType = await webScience.randomization.selectCondition(interventionSet); + storage.set("InterventionType", interventionType); + } + // Conducts the randomly selected intervention. if (interventionType === "NoticeDefault") { noticeIntervention(2); } else if (interventionType === "NoticeRevert") { @@ -80,10 +70,12 @@ export async function runIntervention(storageIn): Promise { /** * Conduct one of the two notice interventions. The participant's default search engine will be changed * and they will be presented a notice notifying them of the change - * @param {number} noticeType - Specifies the notice style that will be shown to the participant + * @async + * @param {number} noticeType - Specifies the notice type that will be shown to the participant * Should be either 2 or 3. */ async function noticeIntervention(noticeType: number) { + // If the notice has been shown already, then the intervention is complete. const noticeShown = await storage.get("NoticeShown"); if (noticeShown) { const noticeInterventionData = { @@ -91,8 +83,8 @@ async function noticeIntervention(noticeType: number) { RevertSelected: null, OriginalEngine: await storage.get("EngineChangedFrom"), NewEngine: await storage.get("EngineChangedTo"), - } - console.log(noticeInterventionData) + }; + console.log(noticeInterventionData); completeIntervention(); return; @@ -101,12 +93,13 @@ async function noticeIntervention(noticeType: number) { // Determine the participant's original search engine and homepage const originalEngine = await Utils.getSearchEngine(); const originalHomepage = await Utils.getHomepage(); + const originalHomepageEngine = SearchEngineUtils.getEngineFromURL(originalHomepage); - // Creates a list of options for a new default search engine (excluding the original default) - let newSearchEngineOptions = ["Google", "DuckDuckGo", "Yahoo", "Bing"] + // Creates a list of options for a new default search engine (excluding the participant's current default) + let newSearchEngineOptions = ["Google", "DuckDuckGo", "Yahoo", "Bing"]; if (originalEngine) { newSearchEngineOptions = newSearchEngineOptions.filter(engineOption => { - return !originalEngine.toLowerCase().includes(engineOption.toLowerCase()) + return !originalEngine.toLowerCase().includes(engineOption.toLowerCase()); }) } @@ -115,19 +108,19 @@ async function noticeIntervention(noticeType: number) { Utils.changeSearchEngine(newEngine); // If the current home page is a search engine page, change it to the default Firefox homepage - let homepageChanged = false - if (await Utils.getHomepage()) { - Utils.changeHomepage("about:home") + let homepageChanged = false; + if (originalHomepageEngine) { + Utils.changeHomepage("about:home"); homepageChanged = true; } storage.set("EngineChangedFrom", originalEngine); storage.set("EngineChangedTo", newEngine); - // Register a listener that will send a response to the notice page with details of the original engine and new engine - // This allows the notice to notify the participant of their original engine and their new engine + // Register a listener that will send a response to the notice page with the name of the original engine, new engine, + // and if their homepage was changed so that they can be notified of changes. webScience.messaging.onMessage.addListener((_message, _sender, sendResponse) => { - sendResponse({ originalEngine, newEngine, homepageChange: homepageChanged }) + sendResponse({ originalEngine, newEngine, homepageChange: homepageChanged }); }, { type: "NoticeDetails", schema: {} @@ -146,8 +139,8 @@ async function noticeIntervention(noticeType: number) { RevertSelected: message.revert, OriginalEngine: originalEngine, NewEngine: newEngine, - } - console.log(noticeInterventionData) + }; + console.log(noticeInterventionData); // At this point, the intervention is complete completeIntervention(); @@ -162,39 +155,64 @@ async function noticeIntervention(noticeType: number) { // Creates a browser tab displaying the notice to the participant browser.tabs.create({ url: `/pages/notice_${noticeType}.html` }); - storage.set("NoticeShown", true) + storage.set("NoticeShown", true); } /** * Conduct one of the four choice screen interventions. A search engine choice screen will be displayed to the participant - * and their default search engine will be changed to their selection + * and their default search engine will be changed to their selection. + * @async * @param {boolean} choiceScreenDesign - Specifies the choice screen style that will be shown to the participant. * Should be either 4, 5, 6, or 7. */ async function choiceScreenIntervention(choiceScreenDesign: number) { - let choiceScreenAttempts = await storage.get("ChoiceScreenAttempts"); + // Get the number of times the choice screen has been displayed to the participant. + // If it has been shown three times already, we do not try again and mark the intervention + // as completed. + const choiceScreenAttemptsCounter = await webScience.storage.createCounter("ChoiceScreenAttempts"); + let choiceScreenAttempts = choiceScreenAttemptsCounter.get(); if (choiceScreenAttempts >= 3) { + const choiceScreenInterventionData = { + AttentionTime: null, + OriginalEngine: await Utils.getSearchEngine(), + SelectedEngine: null, + SeeMoreSelected: null, + Ordering: null, + DetailsExpanded: null, + Attempts: 4 + }; + + console.log(choiceScreenInterventionData); + completeIntervention(); return; } - choiceScreenAttempts = choiceScreenAttempts ? choiceScreenAttempts + 1 : 1 - storage.set("ChoiceScreenAttempts", choiceScreenAttempts) + // Increment the number of choice screen attempts + choiceScreenAttempts = await choiceScreenAttemptsCounter.incrementAndGet(); // Determine the participant's original search engine and homepage const originalEngine = await Utils.getSearchEngine(); const originalHomepage = await Utils.getHomepage(); + const originalHomepageEngine = SearchEngineUtils.getEngineFromURL(originalHomepage); + // If the choice screen has previously been displayed, get the order the search engines + // were displayed in. const engines_ordering = await storage.get("ChoiceScreenEngineOrdering"); + // A listener that will be messaged by the choice screen and respond with whether the homepage + // will be changed to the default upon selection on the choice screen and the ordering of engines + // on the ballot. webScience.messaging.onMessage.addListener((_message, _sender, sendResponse) => { - sendResponse({ homepageChange: !!originalHomepage, engines_ordering }) + sendResponse({ homepageChange: !!originalHomepageEngine, engines_ordering }); }, { type: "ChoiceScreenDetails", schema: {} }); + // A listener that can be messaged by the choice screen with the ordering of search engines on + // the choice screen. webScience.messaging.onMessage.addListener(message => { storage.set("ChoiceScreenEngineOrdering", message.engines_ordering); }, { @@ -204,31 +222,31 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { } }); + // A listener that will be messaged by the choice screen upon selection of an engine. webScience.messaging.onMessage.addListener(async (message) => { - storage.set("EngineChangedFrom", await Utils.getSearchEngine()); + storage.set("EngineChangedFrom", originalEngine); storage.set("EngineChangedTo", message.engine); - // Modify the participant's default search engine to their choice screen response and mark the intervention as complete + // Modify the participant's default search engine to their choice screen response Utils.changeSearchEngine(message.engine); // If the current home page is a search engine page, change it to the default Firefox homepage - if (await Utils.getHomepage()) { - Utils.changeHomepage("about:home") + if (originalHomepageEngine) { + Utils.changeHomepage("about:home"); } const choiceScreenInterventionData = { AttentionTime: message.attentionTime, - PreviousEngine: originalEngine, - NewEngine: message.engine, + OriginalEngine: originalEngine, + SelectedEngine: message.engine, SeeMoreSelected: message.see_more_clicked, Ordering: message.engines_ordering, DetailsExpanded: message.details_expanded, - ChoiceScreenAttempts: choiceScreenAttempts - } + Attempts: choiceScreenAttempts + }; - console.log(choiceScreenInterventionData) + console.log(choiceScreenInterventionData); - // At this point, the intervention is complete completeIntervention(); }, { type: "ChoiceScreenResponse", @@ -247,9 +265,9 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { /** * Called when an intervention is complete. Sets the value of InterventionComplete to true - * in storage and starts the regular data collection stage of the study. + * in storage and starts the post-intervention data collection stage of the study. */ function completeIntervention() { storage.set("InterventionComplete", true); - PostIntervention.run(storage); + PostIntervention.start(storage); } \ No newline at end of file diff --git a/src/Modal.ts b/src/Modal.ts index d399964..3f6d9b9 100755 --- a/src/Modal.ts +++ b/src/Modal.ts @@ -1,44 +1,94 @@ import * as Utils from "./Utils.js" +import * as webScience from "@mozilla/web-science"; +/** + * @type {Object} + * A persistent key-value storage object for the study + */ let storage; + +/** + * @type {string} + * The name of the engine that was the participant's default prior to their choice screen selection. + */ let engineChangedFrom; + +/** + * @type {string} + * The name of the engine that the participant selected on the choice screen and had their default changed to. + */ let engineChangedTo; + +/** + * @type {boolean} + * Whether the revert button on the modal dialog will be the primary button. + */ let modalPrimaryRevert; +/** + * Callback for browser.webNavigation.onCommitted that displays a modal dialog upon + * generated search with the engine that was chosen on the choice screen. + * @async + * @param {Object} details - Details about the navigation event. + **/ async function listener(details) { - if (details.transitionType === "generated") { - const currentEngine = await Utils.getSearchEngine(); - if (currentEngine === engineChangedTo) { - const modalAttemptsFromStorage = await storage.get("ModalAttempts"); - const modalAttempts = modalAttemptsFromStorage ? modalAttemptsFromStorage + 1 : 1; - storage.set("ModalAttempts", modalAttempts); - - browser.webNavigation.onCommitted.removeListener(listener); - const choice = await browser.experimental.createPopup(engineChangedFrom, engineChangedTo, modalPrimaryRevert); - - if (choice) { - Utils.changeSearchEngine(engineChangedFrom); - } - storage.set("ModalInterventionCompleted", true); + // The modal dialog should be displayed on a generated search if the current engine is the same + // as the engine that the participant selected on the choice screen. + const currentEngine = await Utils.getSearchEngine(); + if (details.transitionType === "generated" && currentEngine === engineChangedTo) { + // Gets the number of times the modal dialog has been displayed + const modalAttemptsCounter = await webScience.storage.createCounter("ModalAttempts"); + const modalAttempts = await modalAttemptsCounter.incrementAndGet(); - const modalInterventionData = { - modalAttempts: modalAttempts, - revert: choice - } - console.log(modalInterventionData) + // Remove this listener, the modal dialog should only be displayed a maximum of one time per + // browser session. + browser.webNavigation.onCommitted.removeListener(listener); + + // Display the modal dialog and get the participant's selection. + const revertChosen = await browser.experimental.createPopup(engineChangedFrom, engineChangedTo, modalPrimaryRevert); + + // If the participant chooses to revert, then change their search engine back to the engine that the choice screen + // stage of the intervention changed it from. + if (revertChosen) { + Utils.changeSearchEngine(engineChangedFrom); } + + // Set the completion status of the modal intervention to true. + storage.set("ModalInterventionCompleted", true); + + // Report modal intervention data. + const modalInterventionData = { + modalAttempts: modalAttempts, + revert: revertChosen + }; + console.log(modalInterventionData) } } -export async function startModalIntervention(storage_in) { +/** + * Start modal intervention functionality + * @async + * @param {Object} storage - A persistent key-value storage object for the study + **/ +export async function start(storage_in) { storage = storage_in; + + const modalInterventionCompleted = await storage.get("ModalInterventionCompleted"); const interventionType = await storage.get("InterventionType"); - if (interventionType === "ModalPrimaryRevert" || interventionType === "ModalSecondaryRevert") { - const modalInterventionCompleted = await storage.get("ModalInterventionCompleted") - engineChangedFrom = await storage.get("EngineChangedFrom"); - engineChangedTo = await storage.get("EngineChangedTo"); - modalPrimaryRevert = interventionType === "ModalPrimaryRevert"; - if (!modalInterventionCompleted && engineChangedFrom && engineChangedTo) { + engineChangedFrom = await storage.get("EngineChangedFrom"); + engineChangedTo = await storage.get("EngineChangedTo"); + modalPrimaryRevert = interventionType === "ModalPrimaryRevert"; + + // Modal functionality should only run if: + // 1. This intervention has not already been completed. + // 2. The participant's intervention group is one of the two modal intervention groups + // 3. The choice screen stage of the modal intervention was completed successfully. + // 4. The engine that the participant chose on the choice screen is different from their + // their original engine. It does not make sense to popup the modal dialog if the participant's + // default was originally Google and they proceeded to select Google on the choice screen. + if (!modalInterventionCompleted && + (interventionType === "ModalPrimaryRevert" || interventionType === "ModalSecondaryRevert")) { + if (engineChangedFrom && engineChangedTo) { if (!engineChangedTo.toLowerCase().includes(engineChangedFrom.toLowerCase()) && !engineChangedFrom.toLowerCase().includes(engineChangedTo.toLowerCase())) { browser.webNavigation.onCommitted.addListener(listener); diff --git a/src/PostIntervention.ts b/src/PostIntervention.ts index 8726990..a690277 100755 --- a/src/PostIntervention.ts +++ b/src/PostIntervention.ts @@ -3,9 +3,13 @@ import * as Survey from "./Survey.js" import * as SerpVisitCollection from "./SerpVisitCollection.js" import * as DailyCollection from "./DailyCollection.js" -export async function run(storage) { - Modal.startModalIntervention(storage); - Survey.runSurvey(storage); - SerpVisitCollection.startCollection(); - DailyCollection.startCollection(storage); +/** + * Start post-intervention collection + * @async + **/ +export async function start(storage) { + Modal.start(storage); + Survey.start(storage); + SerpVisitCollection.start(); + DailyCollection.start(storage); } \ No newline at end of file diff --git a/src/SearchEngineUtils.ts b/src/SearchEngineUtils.ts index 0668ab7..8e924bc 100755 --- a/src/SearchEngineUtils.ts +++ b/src/SearchEngineUtils.ts @@ -1,55 +1,67 @@ import * as webScience from "@mozilla/web-science"; +/** + * @type {Array} + * An array of the names of the tracked search engines. + */ const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] +/** + * @type {Object} + * An object that maps each tracked engine to its domain and a regular expression for the SERP page urls of the engine. + */ const searchEngineDomains = { Google: { domains: ["google.com"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i }, DuckDuckGo: { domains: ["duckduckgo.com"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?duckduckgo\.com(?::[0-9]+)?(?:\/.*)?(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?duckduckgo\.com(?::[0-9]+)?(?:\/.*)?(?:\?.*)?(?:#.*)?$)/i }, Bing: { domains: ["bing.com"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i }, Yahoo: { domains: ["yahoo.com"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i }, Ecosia: { domains: ["ecosia.org"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i }, Ask: { domains: ["ask.com"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web\W.*(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web\W.*(?:\?.*)?(?:#.*)?$)/i }, Baidu: { domains: ["baidu.com"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s\W.*(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s\W.*(?:\?.*)?(?:#.*)?$)/i }, Yandex: { domains: ["yandex.com", "yandex.ru"], - regExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?yandex\.(?:ru|com)(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?yandex\.(?:ru|com)(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i }, } -let initialized = false; - /** - * An object that maps each tracked engine to the match pattern set for its domains. * @type {Object} - * @private + * An object that maps each tracked engine to the match pattern set for its domains. */ const domainMatchPatternSets = {} +/** + * @type {Array} + * An array of match pattern strings for all the tracked search engines. + */ let allTrackedEngineMatchPatterns = [] +/** + * Initializes the domainMatchPatternSets object and the allTrackedEngineMatchPatterns array. + * This function must be called before any of the other exported functions in this module. + */ export function initialize(): void { - initialized = true; for (const searchEngine in searchEngineDomains) { const domainMatchPatterns = webScience.matching.domainsToMatchPatterns(searchEngineDomains[searchEngine].domains) domainMatchPatternSets[searchEngine] = webScience.matching.createMatchPatternSet(domainMatchPatterns) @@ -57,23 +69,19 @@ export function initialize(): void { } } +/** + * @returns {Array} An array of match pattern strings for all the tracked search engines. + */ export function getTrackedEnginesMatchPatterns(): string[] { - if (!initialized) { - initialize; - } return allTrackedEngineMatchPatterns; } /** - * Returns the search engine that the URL matches - * @param {string} url - the URL of the page that is being checked - * @returns {string|null} The name of the search engine that the URL belongs to or - * null if the URL does not belong to any of the tracked engines + * @param {string} url - the url of a page. + * @returns {string} If the url is for one of the tracked search engines, the name + * of the engine. Otherwise, null. */ export function getEngineFromURL(url: string): string { - if (!initialized) { - initialize; - } for (const searchEngine in domainMatchPatternSets) { const matchPatternSetForEngine = domainMatchPatternSets[searchEngine] if (matchPatternSetForEngine.matches(url)) { @@ -83,19 +91,26 @@ export function getEngineFromURL(url: string): string { return null; } +/** + * @param {string} url - the url of a page. + * @returns {string} If the url is a SERP page for one of the tracked search engines, the name + * of the engine. Otherwise, null. + */ function getEngineFromSearchURL(url: string): string { for (const searchEngine in searchEngineDomains) { - if (url.match(searchEngineDomains[searchEngine].regExp)) { + if (url.match(searchEngineDomains[searchEngine].serpUrlRegExp)) { return searchEngine; } } return null; } +/** + * @param {string} url - the url of a page + * @returns {Object} If the url is for a SERP page for one of the tracked engines, returns the engine and + * the search query. Otherwise, null. + */ export function getEngineAndQueryFromUrl(url: string): { engine: string, query: string } { - if (!initialized) { - initialize; - } const searchEngine = getEngineFromSearchURL(url); if (searchEngine) { let query = null; @@ -125,6 +140,10 @@ export function getEngineAndQueryFromUrl(url: string): { engine: string, query: return null; } +/** + * @param {string} url - a Google SERP url. + * @returns {string} The query from a Google SERP url. + */ function getGoogleQuery(url: string): string { const tbm = getQueryVariable(url, "tbm") if (!tbm) { @@ -137,6 +156,11 @@ function getGoogleQuery(url: string): string { } return null; } + +/** + * @param {string} url - a DuckDuckGo SERP url. + * @returns {string} The query from a DuckDuckGo SERP url. + */ function getDuckDuckGoQuery(url: string): string { const iaType = getQueryVariable(url, "ia") const iaxType = getQueryVariable(url, "iax") @@ -159,6 +183,11 @@ function getDuckDuckGoQuery(url: string): string { } return null; } + +/** + * @param {string} url - a Bing SERP url. + * @returns {string} The query from a Bing SERP url. + */ function getBingQuery(url: string): string { const query = getQueryVariable(url, "q"); if (query) { @@ -166,6 +195,11 @@ function getBingQuery(url: string): string { } return null; } + +/** + * @param {string} url - a Yahoo SERP url. + * @returns {string} The query from a Yahoo SERP url. + */ function getYahooQuery(url: string): string { for (const key of ["p", "q", "query"]) { const query = getQueryVariable(url, key); @@ -175,6 +209,11 @@ function getYahooQuery(url: string): string { } return null; } + +/** + * @param {string} url - a Ecosia SERP url. + * @returns {string} The query from a Ecosia SERP url. + */ function getEcosiaQuery(url: string): string { const query = getQueryVariable(url, "q"); if (query) { @@ -182,6 +221,11 @@ function getEcosiaQuery(url: string): string { } return null; } + +/** + * @param {string} url - a Ask SERP url. + * @returns {string} The query from a Ask SERP url. + */ function getAskQuery(url: string): string { for (const key of ["q", "query"]) { const query = getQueryVariable(url, key); @@ -191,6 +235,11 @@ function getAskQuery(url: string): string { } return null; } + +/** + * @param {string} url - a Baidu SERP url. + * @returns {string} The query from a Baidu SERP url. + */ function getBaiduQuery(url: string): string { const tn = getQueryVariable(url, "tn") if (!tn || tn === "baidu") { @@ -203,6 +252,11 @@ function getBaiduQuery(url: string): string { } return null; } + +/** + * @param {string} url - a Yandex SERP url. + * @returns {string} The query from a Yandex SERP url. + */ function getYandexQuery(url: string): string { if (!webScience.matching.normalizeUrl(url).includes("direct")) { const query = getQueryVariable(url, "text"); @@ -214,23 +268,23 @@ function getYandexQuery(url: string): string { } /** - * Retrieve a query string variable from a URL - * @param {string} url - the URL to retrieve the query string variable from + * Retrieve a query string variable from a url. + * @param {string} url - the url to retrieve the query string variable from. * @param {string} parameter - the parameter of the variable in the URL you want to retrieve - * @returns {string} The query string variable in url for the given parameter. If the parameter + * @returns {string} The query variable in the url for the given parameter. If the parameter * does not exist in the URL, returns null. */ -function getQueryVariable(urlString, variable) { - const url = new URL(urlString); - const params = new URLSearchParams(url.search); - return params.get(variable); +function getQueryVariable(url, parameter) { + const urlObject = new URL(url); + const params = new URLSearchParams(urlObject.search); + return params.get(parameter); } - - /** - * Collects the number of visits to SERP pages over the - * previous 30 days for each of the tracked search engines + * Collects the number of unique queries made to each of the tracked search engines since the start time from history. + * @param {number} startTime - the earliest time from which to get history results. + * @returns {Array} An array that, for each of the tracked search engines, has the number of unique queries made to the engine + * since the start time from history. */ export async function getHistoryData(startTime: number): Promise> { const historyItems = await browser.history.search({ text: "", startTime: startTime, maxResults: Number.MAX_SAFE_INTEGER }); diff --git a/src/SerpVisitCollection.ts b/src/SerpVisitCollection.ts index 40499b6..90edb30 100755 --- a/src/SerpVisitCollection.ts +++ b/src/SerpVisitCollection.ts @@ -1,21 +1,26 @@ import * as webScience from "@mozilla/web-science"; import { serpScripts } from "./content-scripts-import.js" -export async function startCollection(): Promise { +/** + * Start SERP visit collection + * @async + **/ +export async function start(): Promise { registerSerpVisitDataListener(); registerContentScripts(); } /** - * Register the SERP content scripts and the listeners to store SERP queries and get page attribution details + * Register the SERP content scripts + * @async */ async function registerContentScripts() { for (const serpScript of serpScripts) { if (!serpScript.enabled) { - continue + continue; } - serpScript.args["runAt"] = "document_start" - await browser.contentScripts.register(serpScript.args) + serpScript.args["runAt"] = "document_start"; + await browser.contentScripts.register(serpScript.args); } } diff --git a/src/StudyModule.ts b/src/StudyModule.ts index b315e73..edace61 100755 --- a/src/StudyModule.ts +++ b/src/StudyModule.ts @@ -5,43 +5,49 @@ */ import * as Intervention from "./Intervention.js" import * as PostIntervention from "./PostIntervention.js" -import * as WebNavigation from "./WebNavigation.js" -import * as Initial from "./Initial.js" +import * as WebNavigation from "./AttributionTracking.js" +import * as InitialCollection from "./InitialCollection.js" import * as webScience from "@mozilla/web-science"; import * as SearchEngineUtils from "./SearchEngineUtils.js" /** - * @type {webScience.storage.KeyValueStorage} - * A persistent storage space for study data. + * @type {Object} + * A persistent key-value storage object for the study */ -let storage = null +let storage; +/** + * @type {Object} + * Rally study object, used for sending data pings. + */ let rally; /** * Start a search engine usage study + * @async + * @param {Object} rally - Rally study object, used for sending data pings. **/ export async function startStudy(rallyArg): Promise { rally = rallyArg; - console.debug(rally); + console.log(rally); storage = await webScience.storage.createKeyValueStorage("WebScience.Studies.SearchEngineUsage"); await webScience.pageManager.initialize(); SearchEngineUtils.initialize(); - WebNavigation.registerWebNavigationTracking(); + WebNavigation.initializeAttributionTracking(); // Report initial data if we have not done so already const initialDataReported = await storage.get("InitialDataReported"); if (!initialDataReported) { - Initial.reportInitialData(storage); + InitialCollection.run(storage); } - // If intervention is complete, start recording SERP data. + // If intervention is complete, start post-intervention collection. // Otherwise, run intervention. if (await storage.get("InterventionComplete")) { - PostIntervention.run(storage); + PostIntervention.start(storage); } else { - Intervention.runIntervention(storage); + Intervention.start(storage); } } diff --git a/src/Survey.ts b/src/Survey.ts index 7cbc7f0..65828bd 100755 --- a/src/Survey.ts +++ b/src/Survey.ts @@ -3,10 +3,14 @@ import * as webScience from "@mozilla/web-science"; const millisecondsPerSecond = 1000; const secondsPerDay = 86400; const surveyRemindPeriodDays = 3; -const daysUntilSecondSurvey = 30; +const daysUntilFinalSurvey = 20; -// TDOD: update these +// TODO: update this object +/** + * @type {Object} + * An object describing the survey options for the initial and final surveys. + */ const surveyConfigData = { initial: { surveyName: "initial", @@ -18,71 +22,72 @@ const surveyConfigData = { reminderMessage: "reminderMessage 1", reminderTitle: "reminderTitle 1", surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/initial/thankyou", - surveyUrl: "https://kartikeyakandula.com/", + surveyUrl: "surveyUrl initial", }, final: { surveyName: "final", - popupNoPromptMessage: "No survey prompt message 2", - popupPromptMessage: "popupPromptMessage 2", + popupNoPromptMessage: "There are currently no available surveys for the study.", + popupPromptMessage: "Please complete the following survey for Political & COVID-19 News Information.", popupIcon: "icons/PrincetonShieldLarge.png", reminderIcon: "icons/PrincetonShieldLarge.png", reminderInterval: surveyRemindPeriodDays * secondsPerDay, reminderMessage: "reminderMessage 2", reminderTitle: "reminderTitle 2", surveyCompletionUrl: "https://citpsearch.cs.princeton.edu/searchengine/final/thankyou", - surveyUrl: "https://www.google.com/", - }, -} + surveyUrl: "surveyUrl final", + } +}; +/** + * @type {Object} + * A persistent key-value storage object for the study + */ let storage; +/** + * Ends the initial survey and starts the final survey + * @async + **/ async function startFinalSurvey() { await webScience.userSurvey.endSurvey(); webScience.userSurvey.setSurvey(surveyConfigData.final); } -// Max timeout for setTimeout is 0x7FFFFFFF milliseconds (slightly less than 24.9 days) -// so this is needed for a longer timeout -function setFinalSurveyTimeout(delay) { - if (delay > 0x7FFFFFFF) { - setTimeout(function () { setFinalSurveyTimeout(delay - 0x7FFFFFFF) }, 0x7FFFFFFF); - } else { - setTimeout(() => { - startFinalSurvey(); - }, delay); - } -} - -export async function runSurvey(storageIn): Promise { +/** + * Starts user survey functionality + * @async + * @param {Object} storage - A persistent key-value storage object for the study + **/ +export async function start(storageIn): Promise { storage = storageIn; // Get the start time of the initial survey from storage. - // If the value does not exist in storage, set the initial start - // time to the current time. + // If the value does not exist in storage, then this is the the start time of the + // initial survey and we set the value in storage. let initialSurveyStartTime = await storage.get("InitialSurveyStartTime"); if (!initialSurveyStartTime) { initialSurveyStartTime = Date.now(); storage.set("InitialSurveyStartTime", initialSurveyStartTime); } - const finalSurveyStartTime = initialSurveyStartTime + (millisecondsPerSecond * secondsPerDay * daysUntilSecondSurvey); + // Get the start time of the final survey + const finalSurveyStartTime = initialSurveyStartTime + (millisecondsPerSecond * secondsPerDay * daysUntilFinalSurvey); const currentSurvey = await webScience.userSurvey.getSurveyName(); - if (!currentSurvey || (currentSurvey === surveyConfigData.initial.surveyName && Date.now() <= finalSurveyStartTime)) { // If there is no current survey or the current survey is the initial survey // and the current time is before the time to start the final survey, we set // the current survey to be the initial survey and set a timeout to start the final survey. webScience.userSurvey.setSurvey(surveyConfigData.initial); - setFinalSurveyTimeout(finalSurveyStartTime - Date.now()); + setTimeout(startFinalSurvey, finalSurveyStartTime - Date.now()); } else if (currentSurvey === surveyConfigData.initial.surveyName) { - // If the current survey is the initial survey, we start the final survey. - // We only reach here if the current time is after the final survey start time. + // If the current survey is the initial survey but the current time is after the start + // time of the final survey, we start the final survey. startFinalSurvey(); } else { // Set the survey to the current survey. // We only reach here if the current survey is the final survey. webScience.userSurvey.setSurvey(surveyConfigData[currentSurvey]); } -} \ No newline at end of file +} diff --git a/src/Utils.ts b/src/Utils.ts index e4395a1..4fa40ab 100755 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,30 +1,32 @@ -import * as SearchEngineUtils from "./SearchEngineUtils.js" - /** - * Return the default search engine - * @returns {Promise} Promise object represents the name of the default search engine + * @async + * @return {Promise} The name of the current default search engine. */ export async function getSearchEngine(): Promise { try { return await browser.experimental.getSearchEngine(); } catch (error) { - console.error(error) - return "" + console.error(error); + return ""; } } +/** + * @async + * @return {Promise} The url of the current homepage. + */ export async function getHomepage(): Promise { try { - const homepage = await browser.experimental.getHomepage(); - return SearchEngineUtils.getEngineFromURL(homepage); + return await browser.experimental.getHomepage(); } catch (error) { - console.error(error) - return null; + console.error(error); + return ""; } } /** - * Change the default search engine. + * Changes the current default search engine. + * @async * @param {string} searchEngine - the search engine that the default will be changed to. * Should be either Google, DuckDuckGo, Yahoo, Bing, Ecosia, Yandex, Baidu, or Ask */ @@ -32,14 +34,19 @@ export async function changeSearchEngine(searchEngine: string): Promise { try { await browser.experimental.changeSearchEngine(searchEngine); } catch (error) { - console.error(error) + console.error(error); } } +/** + * Changes the current homepage. + * @async + * @param {string} homepage - the url that the homepage should be changed to. + */ export async function changeHomepage(homepage: string): Promise { try { await browser.experimental.changeHomepage(homepage); } catch (error) { - console.error(error) + console.error(error); } } \ No newline at end of file diff --git a/src/background.ts b/src/background.ts index 4754bc2..e440caf 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1,54 +1,40 @@ -// /* This Source Code Form is subject to the terms of the Mozilla Public -// * License, v. 2.0. If a copy of the MPL was not distributed with this -// * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -// import "webextension-polyfill"; - -// import { Rally, runStates } from "@mozilla/rally"; - -// // Example: import a module. -// import { startStudy } from "./StudyModule"; - -// const rally = new Rally(); - -// async function runStudy() { -// await startStudy(rally); -// } - -// rally.initialize( -// // A sample key id used for encrypting data. -// "sample-invalid-key-id", -// // A sample *valid* JWK object for the encryption. -// { -// "kty": "EC", -// "crv": "P-256", -// "x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", -// "y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", -// "kid": "Public key used in JWS spec Appendix A.3 example" -// }, -// // The following constant is automatically provided by -// // the build system. -// // @ts-expect-error: Provided by build system -// __ENABLE_DEVELOPER_MODE__, -// (newState) => { -// if (newState === runStates.RUNNING) { -// console.log("The study can run."); -// } else { -// console.log("The study must stop."); -// } -// } -// ).then(_resolve => { -// // Initialize the study and start it. -// // Example: initialize the example module. -// runStudy(); -// }, _reject => { -// // Do not start the study in this case. Something -// // went wrong. -// }); - - -import { startStudy } from "./StudyModule"; -async function runStudy() { - await startStudy(null); -} -runStudy() \ No newline at end of file +// Import the WebExtensions polyfill, for cross-browser compatibility. +// Note that Rally and WebScience currently only support Firefox. +import "webextension-polyfill"; +import { Rally, runStates } from "@mozilla/rally"; +import { startStudy } from "./StudyModule.js"; + +// Initialize the Rally API. +const rally = new Rally(); +rally.initialize( + // A sample key id used for encrypting data. + "sample-invalid-key-id", + // A sample *valid* JWK object for the encryption. + { + "kty": "EC", + "crv": "P-256", + "x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU", + "y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0", + "kid": "Public key used in JWS spec Appendix A.3 example" + }, + // The following constant is automatically provided by + // the build system. + // @ts-ignore-error + __ENABLE_DEVELOPER_MODE__, + // A sample callback with the study state. + (newState) => { + if (newState === runStates.RUNNING) { + console.log("The study can run."); + } else { + console.log("The study must stop."); + } + } +).then(_resolve => { + // The Rally API has been initialized. + // Initialize the study and start it. + + startStudy(rally); +}, _reject => { + // Do not start the study in this case. Something + // went wrong. +}); \ No newline at end of file From b291b5b47d4c892073de60276531c3e8e71d30f1 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Sat, 12 Jun 2021 13:06:44 -0400 Subject: [PATCH 165/399] Renamed intervention html pages --- ...ice_screen_7.html => choice_screen_1.html} | 78 +++---------------- ...ice_screen_5.html => choice_screen_2.html} | 0 ...ice_screen_6.html => choice_screen_3.html} | 0 pages/choice_screen_4.html | 78 ++++++++++++++++--- pages/{notice_3.html => notice_1.html} | 8 -- pages/notice_2.html | 8 ++ src/Intervention.ts | 20 ++--- 7 files changed, 96 insertions(+), 96 deletions(-) rename pages/{choice_screen_7.html => choice_screen_1.html} (55%) rename pages/{choice_screen_5.html => choice_screen_2.html} (100%) rename pages/{choice_screen_6.html => choice_screen_3.html} (100%) rename pages/{notice_3.html => notice_1.html} (82%) diff --git a/pages/choice_screen_7.html b/pages/choice_screen_1.html similarity index 55% rename from pages/choice_screen_7.html rename to pages/choice_screen_1.html index b122d3a..3b56682 100644 --- a/pages/choice_screen_7.html +++ b/pages/choice_screen_1.html @@ -41,124 +41,66 @@
+
+
-
+

Google

-

Find what you need with the world's most used search engine.

+
-
+

DuckDuckGo

-

We don't track you. Privacy, simplified.

+
-
+

Bing

-

Fast, accurate, and private search from Microsoft.

+
-
+

Yahoo

-

Yahoo connects people with the things they love.

-
-
-
- -
-
-

Yandex

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
- -
-
-

Baidu

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
- -
-
-

Ecosia

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
- -
-
-

Ask.com

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
- +
diff --git a/pages/choice_screen_5.html b/pages/choice_screen_2.html similarity index 100% rename from pages/choice_screen_5.html rename to pages/choice_screen_2.html diff --git a/pages/choice_screen_6.html b/pages/choice_screen_3.html similarity index 100% rename from pages/choice_screen_6.html rename to pages/choice_screen_3.html diff --git a/pages/choice_screen_4.html b/pages/choice_screen_4.html index 3b56682..b122d3a 100644 --- a/pages/choice_screen_4.html +++ b/pages/choice_screen_4.html @@ -41,66 +41,124 @@
-
-
-
+

Google

+

Find what you need with the world's most used search engine.

-
-
+

DuckDuckGo

+

We don't track you. Privacy, simplified.

-
-
+

Bing

+

Fast, accurate, and private search from Microsoft.

-
-
+

Yahoo

+

Yahoo connects people with the things they love.

+
+
+
+ +
+
+

Yandex

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+
+ +
+
+

Baidu

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+
+ +
+
+

Ecosia

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+
+ +
+
+

Ask.com

+

Yahoo connects people with the things they love.

+
+
+ +
+
+
+
+
+ -
diff --git a/pages/notice_3.html b/pages/notice_1.html similarity index 82% rename from pages/notice_3.html rename to pages/notice_1.html index 4933542..8785ad5 100644 --- a/pages/notice_3.html +++ b/pages/notice_1.html @@ -45,14 +45,6 @@

Learn More.

-

- You can also choose to revert this change now. -

-
- Close - Revert -
diff --git a/pages/notice_2.html b/pages/notice_2.html index 8785ad5..4933542 100644 --- a/pages/notice_2.html +++ b/pages/notice_2.html @@ -45,6 +45,14 @@

Learn More.

+

+ You can also choose to revert this change now. +

+
+ Close + Revert +
diff --git a/src/Intervention.ts b/src/Intervention.ts index 28e404c..b0c809f 100755 --- a/src/Intervention.ts +++ b/src/Intervention.ts @@ -47,21 +47,21 @@ export async function start(storageIn): Promise { // Conducts the randomly selected intervention. if (interventionType === "NoticeDefault") { - noticeIntervention(2); + noticeIntervention(1); } else if (interventionType === "NoticeRevert") { - noticeIntervention(3); + noticeIntervention(2); } else if (interventionType === "ChoiceScreenDefault") { - choiceScreenIntervention(4); + choiceScreenIntervention(1); } else if (interventionType === "ChoiceScreenHidden") { - choiceScreenIntervention(5); + choiceScreenIntervention(2); } else if (interventionType === "ChoiceScreenDescriptions") { - choiceScreenIntervention(6); + choiceScreenIntervention(3); } else if (interventionType === "ChoiceScreenExtended") { - choiceScreenIntervention(7); + choiceScreenIntervention(4); } else if (interventionType === "ModalPrimaryRevert") { - choiceScreenIntervention(6); + choiceScreenIntervention(3); } else if (interventionType === "ModalSecondaryRevert") { - choiceScreenIntervention(6); + choiceScreenIntervention(3); } else { completeIntervention(); } @@ -72,7 +72,7 @@ export async function start(storageIn): Promise { * and they will be presented a notice notifying them of the change * @async * @param {number} noticeType - Specifies the notice type that will be shown to the participant - * Should be either 2 or 3. + * Should be either 1 or 2. */ async function noticeIntervention(noticeType: number) { // If the notice has been shown already, then the intervention is complete. @@ -164,7 +164,7 @@ async function noticeIntervention(noticeType: number) { * and their default search engine will be changed to their selection. * @async * @param {boolean} choiceScreenDesign - Specifies the choice screen style that will be shown to the participant. - * Should be either 4, 5, 6, or 7. + * Should be either 1, 2, 3, or 4. */ async function choiceScreenIntervention(choiceScreenDesign: number) { // Get the number of times the choice screen has been displayed to the participant. From 8869e91a8777c9752f978ee0e7310a99dc22364d Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Sat, 12 Jun 2021 15:26:31 -0400 Subject: [PATCH 166/399] Intervention pages in 1024*768 popup window and slight style changes to choice screen pages to fit in this --- pages/choice_screen_1.html | 5 ++--- pages/choice_screen_2.html | 5 ++--- pages/choice_screen_3.html | 5 ++--- pages/choice_screen_4.html | 5 ++--- pages/css/style.css | 23 ++++++++++------------- src/Intervention.ts | 20 ++++++++++++++++---- 6 files changed, 34 insertions(+), 29 deletions(-) diff --git a/pages/choice_screen_1.html b/pages/choice_screen_1.html index 3b56682..5d07d00 100644 --- a/pages/choice_screen_1.html +++ b/pages/choice_screen_1.html @@ -24,8 +24,8 @@
-
-
+
+

Select a Search Engine for Firefox

These search engines are each used by millions across the globe. @@ -39,7 +39,6 @@

-
diff --git a/pages/choice_screen_2.html b/pages/choice_screen_2.html index ef7804f..9c47060 100644 --- a/pages/choice_screen_2.html +++ b/pages/choice_screen_2.html @@ -24,8 +24,8 @@
-
-
+
+

Select a Search Engine for Firefox

These search engines are each used by millions across the globe. @@ -39,7 +39,6 @@

-
diff --git a/pages/choice_screen_3.html b/pages/choice_screen_3.html index 4a3fd45..84fbf16 100644 --- a/pages/choice_screen_3.html +++ b/pages/choice_screen_3.html @@ -24,8 +24,8 @@
-
-
+
+

Select a Search Engine for Firefox

These search engines are each used by millions across the globe. @@ -39,7 +39,6 @@

-
diff --git a/pages/choice_screen_4.html b/pages/choice_screen_4.html index b122d3a..c675c53 100644 --- a/pages/choice_screen_4.html +++ b/pages/choice_screen_4.html @@ -24,8 +24,8 @@
-
-
+
+

Select a Search Engine for Firefox

These search engines are each used by millions across the globe. @@ -39,7 +39,6 @@

-
diff --git a/pages/css/style.css b/pages/css/style.css index b5b52d0..254e34e 100644 --- a/pages/css/style.css +++ b/pages/css/style.css @@ -37,14 +37,11 @@ body { } h1 { - font-size: 3rem; + font-size: 2.5rem; line-height: 1; } h2 { - font-size: 2rem; -} -h3 { - font-size: 2.5rem !important; + font-size: 1.75rem; } h4 { font-size: 1.5rem !important; @@ -53,7 +50,7 @@ h4 { } p { line-height: 1; - font-size: 2rem; + font-size: 1.75rem; } .chevron-container { @@ -85,7 +82,7 @@ p { } .wrapper { - padding-top: 2rem; + padding-top: 5px; } .footer { @@ -93,7 +90,7 @@ p { left: 0; bottom: 0; width: 100%; - padding: 20px 20px 20px 20px; + padding: 10px 10px 10px 10px; } .logo { @@ -118,10 +115,6 @@ p { font-size: 2rem; } -.see-more-container { - margin-top: 20px; -} - #notice-logo { max-height:100px; @@ -157,5 +150,9 @@ p { } .choice-screen-wrapper { - margin-bottom: 120px; + margin-bottom: 80px; +} + +.choice-screen-description{ + padding-bottom: 10px; } diff --git a/src/Intervention.ts b/src/Intervention.ts index b0c809f..6c75485 100755 --- a/src/Intervention.ts +++ b/src/Intervention.ts @@ -152,8 +152,14 @@ async function noticeIntervention(noticeType: number) { } }); - // Creates a browser tab displaying the notice to the participant - browser.tabs.create({ url: `/pages/notice_${noticeType}.html` }); + // Creates a browser popup window displaying the notice to the participant + browser.windows.create({ + allowScriptsToClose: true, + type: "popup", + url: `/pages/notice_${noticeType}.html`, + width: 1024, + height: 768 + }); storage.set("NoticeShown", true); } @@ -259,8 +265,14 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { } }); - // Creates a browser tab displaying the search engine choice screen to the participant - browser.tabs.create({ url: `/pages/choice_screen_${choiceScreenDesign}.html` }); + // Creates a browser popup window displaying the search engine choice screen to the participant + browser.windows.create({ + allowScriptsToClose: true, + type: "popup", + url: `/pages/choice_screen_${choiceScreenDesign}.html`, + width: 1024, + height: 768 + }); } /** From e999ad09f8dd0ac9152099bc73ef76595d0f511e Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Sun, 20 Jun 2021 15:07:49 -0400 Subject: [PATCH 167/399] Updated content script common functionality and ecosia implementation --- src/content-scripts/common.ts | 806 +++++++-------------- src/content-scripts/serp-scripts/ecosia.ts | 172 +++-- 2 files changed, 352 insertions(+), 626 deletions(-) diff --git a/src/content-scripts/common.ts b/src/content-scripts/common.ts index 2f397bf..4b38c5e 100644 --- a/src/content-scripts/common.ts +++ b/src/content-scripts/common.ts @@ -1,610 +1,294 @@ -/** - * Functions for content scripts - */ -let pageLoaded = false - -let organicDetails: Array<{ - TopHeight: number, - BottomHeight: number, - PageNum: number, -}> = [] - -let numAdResults: number = null - -let pageNum: number = null - -let pageIsCorrect = null - -let searchAreaTopHeight: number = null -let searchAreaBottomHeight: number = null - -let lastClickTime: number = null - - -/** - * The total attention time of the page except for time since the page has most recently - * received attention if the page currently has attention - * @type {number} - */ -let totalAttentionTime = 0; - -/** - * The previous start time of the page having attention. - * Is null if there has not been such a start time yet. - * @type {number} - */ -let previousAttentionStart = null; - - - -/** - * A map object that maps the URLs of clicked organic elements to their respective organic element and the index - * of the organic element within the list of organic elements - * @type {Map} - */ -const mousedownOrganicLinksMap = new Map(); - -/** - * The set of URLs of clicked ad elements. We do not map to any details as we do with mousedownOrganicLinksMap - * because we only track the number of ad clicks - * @type {string} - */ -const mousedownAdLinks = new Set() - - -const mousedownInternalLinks = new Set() - -/** - * The number of advertisement clicks - * @type {number} - */ -let numAdClicks = 0; - -/** - * The number of internal clicks - * @type {number} - */ -let numInternalClicks = 0; - -/** - * An array of details for each organic link click - * @type {Array} - */ -const organicClicks: Array<{ - Ranking: number, - AttentionTime: number, - Loaded: boolean, -}> = []; - -interface LinkListenerDetails { - element: Element; - mousedownListener: (_event: Event) => void; - clickListener: (_event: Event) => void; +import { timing } from "@mozilla/web-science"; +export enum MousedownType { + Organic, + Internal, + Ad, } -const elementsWithInternalClickListeners: LinkListenerDetails[] = [] +// TODO: this should be even less maybe +const maxClickDelay = 500; /** - * An array of organic elements with listeners that have been added to determine organic element clicks - * This array is used to remove these listeners if we would like to refresh the listeners (ie. because of a page change) - * @type {Array} - */ -const organicLinksWithListeners: LinkListenerDetails[] = [] - -/** - * An array of ad elements with listeners that have been added to determine ad element clicks - * This array is used to remove these listeners if we would like to refresh the listeners (ie. because of a page change) - * @type {Array} - */ -const adLinksWithListeners: LinkListenerDetails[] = [] - -export function setPageLoaded(pageLoaded_in: boolean) { - pageLoaded = pageLoaded_in; -} - -export function getNumAdClicks() { - return numAdClicks; -} - -export function setNumAdClicks(numAdClicks_in) { - numAdClicks = numAdClicks_in; -} - -export function setPageIsCorrect(pageIsCorrect_in: boolean) { - pageIsCorrect = pageIsCorrect_in; -} - -export function getOrganicDetails() { - return organicDetails; -} - -export function getOrganicClicks() { - return organicClicks; -} - -export function getPageIsCorrect() { - return pageIsCorrect; -} - -export function getNumAdResults() { - return numAdResults; -} - -export function setNumAdResults(numAdResults_in) { - numAdClicks = numAdResults_in; -} - -export function getPageNum() { - return pageNum; -} - -export function setPageNum(pageNum_in: number) { - pageNum = pageNum_in; -} - -export function setSearchAreaTopHeight(searchAreaTopHeight_in: number) { - searchAreaTopHeight = searchAreaTopHeight_in; -} - -export function setSearchAreaBottomHeight(searchAreaBottomHeight_in: number) { - searchAreaBottomHeight = searchAreaBottomHeight_in; -} - -export function getNumInternalClicks() { - return numInternalClicks; -} - -export function getSearchAreaTopHeight() { - return searchAreaTopHeight; -} - -export function getSearchAreaBottomHeight() { - return searchAreaBottomHeight; -} - -/** - * Retrieves the first matching element given an xpath query - * @param {string} xpath - The xpath query - * @param {Node} contextNode - The context node for the query - * @returns {Element} The first element matching the xpath - */ -export function getXPathElement(xpath: string, contextNode: Node = document): Element { - const matchingElement = document.evaluate( - xpath, contextNode, - null, XPathResult.FIRST_ORDERED_NODE_TYPE, null - ).singleNodeValue - return (matchingElement as Element) -} - -/** - * Retrieves an array of all elements matching a given xpath query - * @param {string} xpath - The xpath query - * @param {Node} contextNode - The context node for the query - * @returns {Element} An array of all elements matching the xpath query - */ -export function getXPathElements(xpath: string, contextNode: Node = document): Element[] { - const results: Element[] = []; - const query = document.evaluate(xpath, contextNode, - null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); - let element = query.iterateNext() - while (element) { - results.push(element as Element) - element = query.iterateNext() - } - return results; -} - -/** - * Determines the offset from the top of the document for the element - * @param {string} element - The element - * @returns {number} The offset from the top - */ -export function getElementTopHeight(element: Element): number { - if (!element) return null - return window.pageYOffset + element.getBoundingClientRect().top -} - - -/** - * Determines the offset from the top of the document for the next element - * @param {string} element - The element - * @returns {number} The offset from the top + * Functions for content scripts */ -function getNextElementTopHeight(element: Element) { - return getElementTopHeight(getNextElement(element)) -} +export class PageValues { + /** + * The name of the search engine that this object is tracking + */ + readonly searchEngine: string; + + /** + * The pageId for the page from webScience.pageManager + */ + pageId: string = null; + + /** + * Whether the page is a basic web SERP. + */ + pageIsCorrect = false; + + /** + * How long the page has had the user's attention. + */ + attentionDuration = 0; + + /** + * When the page attention state was last updated. + */ + lastAttentionUpdateTime = 0; + + /** + * If the whole page has loaded, including all dependent resources such as stylesheets and images. + */ + pageLoaded = false; + + /** + * Page number of the SERP page. + */ + pageNum = -1; + + /** + * Number of pixels between the top of the page and the top of the search area. + */ + searchAreaTopHeight: number = null; + + /** + * Number of pixels between the top of the page and the bottom of the search area. + */ + searchAreaBottomHeight: number = null; + + /** + * The number of clicks in the search area that have led to other pages on the SERP domain. + */ + numInternalClicks = 0; + + /** + * The number of advertisement clicks. + */ + numAdClicks = 0; + + /** + * The number of advertisement on the page. + */ + numAdResults = 0; + + /** + * Details of the organic result clicks. + */ + organicClicks: Array = []; + + /** + * Details of the organic results on the page. + */ + organicResults: Array = []; + + /** + * Details of the organic results on the page. + */ + internalListeners: { document: Document, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; + + organicListeners: { element: Element, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; + + adListeners: { element: Element, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void, }[] = []; + + mostRecentMousedown: { type: MousedownType, href: string, index: number }; + + mostRecentRecordedClickTimeStamp: number = null; + + possibleInternalClickTimeStamp: number = null; + + constructor(searchEngine: string, onNewTab: (url) => void) { + this.searchEngine = searchEngine; + this.pageId = webScience.pageManager.pageId; + + browser.runtime.onMessage.addListener((message) => { + if (message.type === "CreatedNavigationTargetMessage") { + const details = message.details; + if (this.mostRecentRecordedClickTimeStamp && + this.mostRecentRecordedClickTimeStamp >= (timing.fromMonotonicClock(details.timeStamp, false) - maxClickDelay)) { + this.mostRecentRecordedClickTimeStamp = null; + return; + } + console.debug(details); + onNewTab(details.url); + } + }); -/** - * Initializes the PageManager listeners and variables - */ -export function initPageManagerListeners(asyncLoads = true) { - function initModule() { - registerAttentionListener(); - if (asyncLoads) { - registerPageVisitEndListener(); - registerPageVisitStartListener(); - } + webScience.pageManager.onPageAttentionUpdate.addListener(({ timeStamp }) => { + // If the page just lost attention, add to the attention duration + // and possibly the attention and audio duration, and stop the timer + if (!webScience.pageManager.pageHasAttention) { + this.attentionDuration += timeStamp - this.lastAttentionUpdateTime; + } + this.lastAttentionUpdateTime = timeStamp; + }); + this.lastAttentionUpdateTime = webScience.pageManager.pageVisitStartTime; } - if (("webScience" in window) && ("pageManager" in window["webScience"])) { - initModule(); - } - else { - if (!("pageManagerHasLoaded" in window)) { - window["pageManagerHasLoaded"] = []; + getAttentionDuration() { + if (webScience.pageManager.pageHasAttention) { + return this.attentionDuration + (timing.now() - this.lastAttentionUpdateTime); + } else { + return this.attentionDuration; } - window["pageManagerHasLoaded"].push(initModule); } -} - -export function pageVisitEndListener() { - if (lastClickTime && Date.now() - lastClickTime < 500) { - numInternalClicks++; + resetAttentionTracking(timeStamp = timing.now()) { + this.attentionDuration = 0; + this.lastAttentionUpdateTime = timeStamp; } - reportResults(); -} -/** - * Registers a listener for page visit end events that reports results - * and resets attention tracking - */ -function registerPageVisitEndListener() { - webScience.pageManager.onPageVisitStop.addListener(pageVisitEndListener); -} - -function pageVisitStartListener() { - resetAttentionTracking(); -} - -/** - * Registers a listener for page visit start events - */ -function registerPageVisitStartListener() { - webScience.pageManager.onPageVisitStart.addListener(pageVisitStartListener); - // In case we miss an initial pageVisitStart event - if (webScience.pageManager.pageVisitStarted) { - pageVisitStartListener(); - } -} - -/** - * Retrieves the total attention time of the page - * @returns {number} The total attention time of the page - */ -export function getAttentionTime() { - if (webScience.pageManager.pageHasAttention && previousAttentionStart) { - return totalAttentionTime + (performance.now() - previousAttentionStart) - } - else { - return totalAttentionTime; - } -} - -/** - * Registers the page attention listener that updates total attention time - */ -export function registerAttentionListener() { - // Update previous start on registration because we might have missed - // the initial pageAttentionUpdate event - if (webScience.pageManager.pageHasAttention) { - previousAttentionStart = performance.now() - } - webScience.pageManager.onPageAttentionUpdate.addListener(() => { - // If the update is for the page gaining attention, update the previous attention start time. - // Otherwise, update total attention time with the time since the previous attention start - if (webScience.pageManager.pageHasAttention) { - previousAttentionStart = performance.now() - } else if (previousAttentionStart) { - totalAttentionTime = totalAttentionTime + (performance.now() - previousAttentionStart) + addOrganicListeners(organicLinkElements: Element[][]) { + for (const organicListener of this.organicListeners) { + organicListener.element.removeEventListener("click", organicListener.clickListener, true); + organicListener.element.removeEventListener("mousedown", organicListener.mousedownListener, true); } - }); -} - -/** - * Resets attention tracking for new page visits. - */ -export function resetAttentionTracking() { - totalAttentionTime = 0 - if (webScience.pageManager.pageHasAttention) { - previousAttentionStart = performance.now() - } else { - previousAttentionStart = false - } -} - -/** - * Retrieve a query string variable from a URL - * @param {string} urlString - the URL to retrieve the query string variable from - * @param {string} parameter - the parameter of the variable in the URL you want to retrieve - * @returns {string} The query string variable in url for the given parameter. If the parameter - * does not exist in the URL, returns null. - */ -export function getQueryVariable(urlString, variable) { - urlString = urlString ? urlString : window.location.href - const url = new URL(urlString); - const params = new URLSearchParams(url.search); - return params.get(variable); -} + this.organicListeners = []; + + for (let i = 0; i < organicLinkElements.length; i++) { + const organicLinkElementsAtIndex = organicLinkElements[i]; + for (const organicLinkElement of organicLinkElementsAtIndex) { + const organicClickListener = (event: MouseEvent) => { + if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { + console.debug(`Internal Click: Ranking: ${i}, AttentionDuration: ${this.getAttentionDuration()}, PageLoaded: ${this.pageLoaded}`); + this.organicClicks.push({ Ranking: i, AttentionDuration: this.getAttentionDuration(), PageLoaded: this.pageLoaded }); + this.mostRecentRecordedClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); + } + } -export function determineOrganicElementsAndAddListeners( - organicResults: Element[], - getPageNumForElement: (Element) => number = () => { return pageNum }) { + const organicMousedownListener = (_event: MouseEvent) => { + if ((organicLinkElement as any).href) { + this.mostRecentMousedown = { + type: MousedownType.Organic, + href: (organicLinkElement as any).href, + index: i, + } + } + } - // Removes any existing listeners from organic elements that we previously added - for (const organicLinkWithListeners of organicLinksWithListeners) { - organicLinkWithListeners.element.removeEventListener("mousedown", organicLinkWithListeners.mousedownListener, true); - organicLinkWithListeners.element.removeEventListener("click", organicLinkWithListeners.clickListener, true); + organicLinkElement.addEventListener("click", organicClickListener, true); + organicLinkElement.addEventListener("mousedown", organicMousedownListener, true); + this.organicListeners.push({ element: organicLinkElement, clickListener: organicClickListener, mousedownListener: organicMousedownListener }); + } + } } - organicDetails = [] - - // For each organic element, adds mousedown and click listeners to any elements with an href attribute - // Also adds the listeners to a list so that we can later remove them if we want to refresh these listeners - for (let i = 0; i < organicResults.length; i++) { - const organicResult = organicResults[i] - organicDetails.push({ TopHeight: getElementTopHeight(organicResult), BottomHeight: getNextElementTopHeight(organicResult), PageNum: getPageNumForElement(organicResult) }) + addAdClickListeners(adLinkElements: Element[]) { + for (const adListener of this.adListeners) { + adListener.element.removeEventListener("click", adListener.clickListener, true); + adListener.element.removeEventListener("mousedown", adListener.mousedownListener, true); + } + this.adListeners = []; - organicResult.querySelectorAll("[href]").forEach(organicLinkElement => { - function organicMousedownListener(_event: Event) { - if ((organicLinkElement as any).href) { - const organicLinkElementHref = urlFilter(encodeURI((organicLinkElement as any).href)) - mousedownOrganicLinksMap.set(organicLinkElementHref, { element: organicLinkElement, index: i }) + for (const adLinkElement of adLinkElements) { + const adClickListener = (event: MouseEvent) => { + if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { + console.debug("Advertisement Click") + this.numAdClicks++; + this.mostRecentRecordedClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); } } - function organicClickListener(event: MouseEvent) { - if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - organicClicks.push({ Ranking: i, AttentionTime: getAttentionTime(), Loaded: pageLoaded }) + const adMousedownListener = (event: MouseEvent) => { + if (event.target instanceof Element) { + const hrefElement = event.target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (href) { + this.mostRecentMousedown = { + type: MousedownType.Ad, + href: href, + index: null + } + } + } } } - organicLinkElement.addEventListener("mousedown", organicMousedownListener, true); - organicLinkElement.addEventListener("click", organicClickListener, true); - organicLinksWithListeners.push({ element: organicLinkElement, mousedownListener: organicMousedownListener, clickListener: organicClickListener }) - }); - } -} - -function getIsAdLinkDefault(adLinkElement: Element): boolean { - return !!(adLinkElement as any).href; -} - -/** - * Get organic and ad results and add listeners for clicks - * @param {callback} getOrganicResults - Callback to get the organic results of the SERP - * @param {callback} getAdResults - Callback to get the ad results of the SERP - */ -export function determineAdElementsAndAddListeners( - adResults: Element[], - getIsAdLinkElement: (adLink: Element) => boolean = getIsAdLinkDefault) { - // Removes any existing listeners from ad elements that we previously added - for (const adLinkWithListeners of adLinksWithListeners) { - adLinkWithListeners.element.removeEventListener("mousedown", adLinkWithListeners.mousedownListener, true); - adLinkWithListeners.element.removeEventListener("click", adLinkWithListeners.clickListener, true); + adLinkElement.addEventListener("click", adClickListener, true); + adLinkElement.addEventListener("mousedown", adMousedownListener, true); + this.adListeners.push({ element: adLinkElement, clickListener: adClickListener, mousedownListener: adMousedownListener }); + } } - numAdResults = adResults.length - - // For each ad element, adds mousedown and click listeners to any elements with an href attribute - // Also adds the listeners to a list so that we can later remove them if we want to refresh these listeners - - - for (const adResult of adResults) { - const fnAdMousedownListener = function adMousedownListener(event: Event) { - console.log(event.target) - const adLinkElement = (event.target as any) - if (getIsAdLinkElement(adLinkElement)) { - const adLink = adLinkElement.href - console.log(numAdResults) - console.log("AD MOUSEDOWN") - console.log(adLink) - const adLinkElementHref = urlFilter(encodeURI(adLink)) - mousedownAdLinks.add(encodeURI(adLinkElementHref)) - } + addInternalListeners(getInternalLink: (target: Element) => string) { + for (const internalListener of this.internalListeners) { + internalListener.document.removeEventListener("click", internalListener.clickListener, true); + internalListener.document.removeEventListener("mousedown", internalListener.mousedownListener, true); } + this.internalListeners = []; - const fnAdClickListener = function adClickListener(event: MouseEvent) { + const internalClickListener = (event: MouseEvent) => { if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - if ((event.target as any).href) { - numAdClicks++; + if (event.target instanceof Element) { + const href = getInternalLink(event.target as Element); + if (href) { + console.debug("Internal Click") + this.numInternalClicks++; + this.mostRecentRecordedClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); + } else if (href === "") { + this.possibleInternalClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); + } } - } } - adResult.addEventListener("mousedown", fnAdMousedownListener, true); - adResult.addEventListener("click", fnAdClickListener, true); - adLinksWithListeners.push({ element: adResult, mousedownListener: fnAdMousedownListener, clickListener: fnAdClickListener }) - } - -} - -function isValidURL(url: string): boolean { - const res = url.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g); - return (res !== null) -} - - -export function addInternalClickListeners( - exclude: string, - isInternalLink: (urlString: string) => boolean, - searchAreaElements: NodeListOf) { - - // Removes any existing listeners for internal clicks that we previously added - for (const elementWithInternalClickListeners of elementsWithInternalClickListeners) { - elementWithInternalClickListeners.element.removeEventListener("mousedown", elementWithInternalClickListeners.mousedownListener, true); - elementWithInternalClickListeners.element.removeEventListener("click", elementWithInternalClickListeners.clickListener, true); - } - - function resultsAreaMousedownListener(event: Event) { - if ((event.target as Element).matches(exclude)) { - return - } - - const linkElement = (event.target as Element).closest("[href]") - const link = linkElement ? (linkElement as any).href : null - - if (!linkElement || !isValidURL(link) || (linkElement as any).getAttribute("href")[0] === "#") { - return - } - - if (isInternalLink(link)) { - mousedownInternalLinks.add(urlFilter(encodeURI(link))) - } - } - - function resultsAreaClickListener(event: MouseEvent) { - if ((event.target as Element).matches(exclude)) { - return - } - - const linkElement = (event.target as Element).closest("[href]") - const link = linkElement ? (linkElement as any).href : null - - if (linkElement && isValidURL(link) && (linkElement as any).getAttribute("href")[0] !== "#") { - if (isInternalLink(link)) { - if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - numInternalClicks++; - } else { - lastClickTime = Date.now() + const internalMousedownListener = (event: MouseEvent) => { + if (event.target instanceof Element) { + const href = getInternalLink(event.target as Element); + if (href) { + this.mostRecentMousedown = { + type: MousedownType.Internal, + href: href, + index: null + } } } - } else { - lastClickTime = Date.now() } - } - for (const searchAreaElement of searchAreaElements) { - searchAreaElement.addEventListener("mousedown", resultsAreaMousedownListener, true); - searchAreaElement.addEventListener("click", resultsAreaClickListener, true); - elementsWithInternalClickListeners.push({ element: searchAreaElement, mousedownListener: resultsAreaMousedownListener, clickListener: resultsAreaClickListener }) + document.addEventListener("click", internalClickListener, true); + document.addEventListener("mousedown", internalMousedownListener, true); + this.internalListeners.push({ document: document, clickListener: internalClickListener, mousedownListener: internalMousedownListener }); } -} - - -/** - * A default URL filter for matching against URLs of new tabs opened from a SERP page - * @param {string} url - The URL to filter - * @return {string} The filtered URL - */ -function urlFilter(url: string) { - return url.substring(0, 60) -} -/** - * Registers listener that will receive the target of navigation of tabs opened from the tab of the SERP page and match the URL - * with clicked elements from the SERP page to determine if an element link was opened in a tab - */ -export function registerNewTabListener() { - browser.runtime.onMessage.addListener((message) => { - if (message.type === "NewTabURL") { - const encodedMessageURL = urlFilter(encodeURI(message.url)) - if (mousedownAdLinks.has(encodedMessageURL)) { - numAdClicks++; - return - } - if (mousedownInternalLinks.has(encodedMessageURL)) { - numInternalClicks++; - return - } - if (mousedownOrganicLinksMap.has(encodedMessageURL)) { - const mousedownOrganicLinkValue = mousedownOrganicLinksMap.get(encodedMessageURL) - const x = { Ranking: mousedownOrganicLinkValue.index, AttentionTime: getAttentionTime(), Loaded: pageLoaded } - organicClicks.push(x) - return; - } + reportResults(timeStamp: number) { + // If pageIsCorrect is false, we do not report + if (!this.pageIsCorrect) { + console.debug( + "Loaded module " + this.searchEngine + " is not passing page correctness test" + ) + return } - }); -} -function getNextElement(element: Element) { - while (element) { - while (element.nextElementSibling && ( - !(element.nextElementSibling as HTMLElement).offsetParent || - !(element.nextElementSibling as HTMLElement).offsetHeight || - !(element.nextElementSibling as HTMLElement).offsetWidth - )) { - element = element.nextElementSibling + // TODO adjust this time + if (this.possibleInternalClickTimeStamp && + this.possibleInternalClickTimeStamp >= timeStamp - 500) { + console.debug("Internal Click") + this.numInternalClicks++; } - if (element.nextElementSibling) { - break + const data = { + searchEngine: this.searchEngine, + attentionDuration: this.getAttentionDuration(), + pageNum: this.pageNum, + organicDetails: this.organicResults, + organicClicks: this.organicClicks, + numAdResults: this.numAdResults, + numAdClicks: this.numAdClicks, + numInternalClicks: this.numInternalClicks, + searchAreaTopHeight: this.searchAreaTopHeight, + searchAreaBottomHeight: this.searchAreaBottomHeight, + pageId: this.pageId } - element = element.parentElement - } - - return element.nextElementSibling -} - - + console.log("HELLO") + console.log(data) + console.log("HELLO") - - - - -// An array of registered search engines -const registeredSearchEngines: string[] = [] - -// A callback executed just before reporting -let preReportCallback = null - -/** - * Called by individual search engine modules to register themselves. - * @param {string} searchEngineName - The search engine of the registering module - * @param {callback} preReportCallbackIn - A function to call immediately before reporting - */ -export function registerModule(searchEngineName: string, preReportCallbackIn: () => void = null) { - console.log("Registering " + searchEngineName) - - preReportCallback = preReportCallbackIn - registeredSearchEngines.push(searchEngineName) -} - -/** - * Reports SERP visit data to the background script - */ -export function reportResults() { - if (registeredSearchEngines.length === 0) { - console.log("No registered search engines") - return - } else if (registeredSearchEngines.length > 1) { - console.log("More than one search engine registered!") - return + // Send data to background page + browser.runtime.sendMessage({ + type: "SerpVisitData", + data: data, + }) } - - const searchEngine = registeredSearchEngines[0] - - if (preReportCallback) preReportCallback(); - - // If pageIsCorrect is false, we do not report - if (!getPageIsCorrect()) { - console.log( - "Loaded module " + searchEngine + " is not passing page correctness test" - ) - return - } - - const serpVisitData = { - SearchEngine: searchEngine, - AttentionTime: getAttentionTime(), - PageNum: getPageNum(), - OrganicDetails: getOrganicDetails(), - OrganicClickDetails: getOrganicClicks(), - NumAdResults: getNumAdResults(), - NumAdClicks: getNumAdClicks(), - NumInternalClicks: getNumInternalClicks(), - SearchAreaTopHeight: getSearchAreaTopHeight(), - SearchAreaBottomHeight: getSearchAreaBottomHeight(), - } - - // Send data to background page - browser.runtime.sendMessage({ - type: "SerpVisitData", - data: serpVisitData, - }) } diff --git a/src/content-scripts/serp-scripts/ecosia.ts b/src/content-scripts/serp-scripts/ecosia.ts index f23b9e1..b7202a5 100644 --- a/src/content-scripts/serp-scripts/ecosia.ts +++ b/src/content-scripts/serp-scripts/ecosia.ts @@ -1,95 +1,115 @@ -import * as Common from "../common.js" +import { PageValues, MousedownType } from "../common.js" +import * as Utils from "../Utils.js" +import { timing } from "@mozilla/web-science"; /** - * Content Scripts for Ecosia SERP + * Content Script for Ecosia SERP */ - -(async function () { - const moduleName = "Ecosia" - - /** - * Determine whether the page is a web search results page - */ - function determinePageIsCorrect(): void { - // Don't need to determine if it is web search, this is handled by - // content script URL matching - Common.setPageIsCorrect(true); +const serpModule = function () { + const pageValues = new PageValues("Ecosia", onNewTab); + + function getOrganicDetails(): OrganicDetail[] { + const organicResults = document.querySelectorAll("div.card-web > div.result"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + } + return organicDetails; } - /** - * @returns {Array} An array of all the organic results on the page - */ - function getOrganicResults() { - return Array.from(document.querySelectorAll("div.card-web > div.result")); + function getOrganicLinkElements(): Element[][] { + const organicResults = document.querySelectorAll("div.card-web > div.result"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]'))); + } + return organicLinkElements; } /** * @returns {Array} An array of all the ad results on the page */ - function getAdResults() { - return Array.from(document.querySelectorAll(".card-ad > div, .card-productads > div")); + function getNumAdResults(): number { + return document.querySelectorAll(".card-ad > div, .card-productads > div").length; } - function getIsAdLinkElement(adLinkElement: Element): boolean { - return !!(adLinkElement as any).href && !adLinkElement.matches('.ad-hint-wrapper, .ad-hint-wrapper *') + function getAdLinkElements(): Element[] { + return Array.from(document.querySelectorAll(".card-ad > div [href], .card-productads > div [href]")).filter(adLinkElement => { + return !adLinkElement.matches('.ad-hint-wrapper, .ad-hint-wrapper *'); + }); } /** - * Determine the height of the top of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaTopHeight(): void { - const element = document.querySelector(".navbar-row") as HTMLElement; - Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)); + function getSearchAreaTopHeight(): number { + try { + const element = document.querySelector(".navbar-row") as HTMLElement; + return element.offsetHeight + Utils.getElementTopHeight(element); + } catch (error) { + return null; + } } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determineSearchAreaBottomHeight(): void { - const element = document.querySelector(".pagination").previousElementSibling as HTMLElement; - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)); + function getSearchAreaBottomHeight(): number { + try { + const element = document.querySelector(".pagination").previousElementSibling as HTMLElement; + return element.offsetHeight + Utils.getElementTopHeight(element); + } catch (error) { + return null; + } + } /** - * Determine the page number + * Get the page number. */ - function determinePageNum(): void { - const url = webScience.pageManager.url - const pageNumberFromUrl = Common.getQueryVariable(url, "p"); - if (pageNumberFromUrl) { - Common.setPageNum(Number(pageNumberFromUrl) + 1) - } else { - Common.setPageNum(1) - } + function getPageNum(): number { + const pageNumFromUrl = Utils.getQueryVariable(window.location.href, "p"); + return pageNumFromUrl ? Number(pageNumFromUrl) + 1 : 1; } - /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine - */ - function isInternalLink(urlString: string): boolean { - const url = new URL(urlString) - return url.hostname.includes("ecosia.org") + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches(".results-wrapper *")) { + if (!target.matches(".pagination *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const url = new URL(href); + if (url.hostname === window.location.hostname) { + return href; + } + } else { + return ""; + } + } else { + return ""; + } + } + } + return null; } /** * Determine all the page values and send the query to the background page */ function determinePageValues(): void { - console.debug("DETERMINING") - determinePageIsCorrect(); - determinePageNum(); - - determineSearchAreaTopHeight() - determineSearchAreaBottomHeight() - - Common.determineOrganicElementsAndAddListeners(getOrganicResults()); - Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); - - Common.addInternalClickListeners( - ".pagination *, div.card-web > div.result *, .card-ad > div, .card-productads > div *", - isInternalLink, - document.querySelectorAll(".results-wrapper")) + pageValues.pageIsCorrect = true; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.numAdResults = getNumAdResults(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdClickListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + pageValues.addInternalListeners(getInternalLink); } window.addEventListener("DOMContentLoaded", function () { @@ -98,10 +118,32 @@ import * as Common from "../common.js" window.addEventListener("load", function () { determinePageValues(); - Common.setPageLoaded(true); + pageValues.pageLoaded = true; + }); + + function onNewTab(url) { + const normalizedUrl: string = Utils.getNormalizedUrl(url); + if (pageValues.mostRecentMousedown.type === MousedownType.Ad) { + if (normalizedUrl.includes("bing.com/aclick")) { + console.debug("Advertisement Click") + pageValues.numAdClicks++; + } + return; + } + if (pageValues.mostRecentMousedown.type === MousedownType.Organic && pageValues.mostRecentMousedown.href === url) { + console.debug(`Internal Click: Ranking: ${pageValues.mostRecentMousedown.index}, AttentionDuration: ${pageValues.getAttentionDuration()}, PageLoaded: ${pageValues.pageLoaded}`); + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + return; + } + if (pageValues.mostRecentMousedown.type === MousedownType.Internal && pageValues.mostRecentMousedown.href === url) { + console.debug("Internal Click") + pageValues.numInternalClicks++; + } + } + + window.addEventListener("unload", (event) => { + pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); +}; - Common.initPageManagerListeners(); - Common.registerNewTabListener(); - Common.registerModule(moduleName) -})() \ No newline at end of file +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file From 3f48f22fbfba8bec5de9a6c00420ca865ef822d0 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Sun, 20 Jun 2021 21:03:51 -0400 Subject: [PATCH 168/399] Interface and Utils files for content script functionality --- src/content-scripts/Interface.ts | 23 +++++- src/content-scripts/Utils.ts | 133 +++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 src/content-scripts/Utils.ts diff --git a/src/content-scripts/Interface.ts b/src/content-scripts/Interface.ts index 5a7341d..e0cf580 100644 --- a/src/content-scripts/Interface.ts +++ b/src/content-scripts/Interface.ts @@ -13,4 +13,25 @@ declare let webScience: { pageVisitStarted, pageVisitStartTime } -} \ No newline at end of file +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +interface OrganicDetail { + // Number of pixels between the top of the page and the top of the organic result. + TopHeight: number, + // Number of pixels between the top of the page and the bottom of the organic result. + BottomHeight: number, + // The page number that the organic result was on + // (only relevant for DuckDuckGo because of the infinite scroll on its SERP pages). + PageNum: number, +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +interface OrganicClick { + // The ranking of the selected organic result. + Ranking: number, + // The attention duration when the click occurred. + AttentionDuration: number, + // If the whole page had loaded, including all dependent resources such as stylesheets and images when the selection occurred. + PageLoaded: boolean, +} diff --git a/src/content-scripts/Utils.ts b/src/content-scripts/Utils.ts new file mode 100644 index 0000000..3e083c8 --- /dev/null +++ b/src/content-scripts/Utils.ts @@ -0,0 +1,133 @@ +import { matching } from "@mozilla/web-science"; + +export function getNormalizedUrl(url: string): string { + try { + return matching.normalizeUrl(url); + } catch (error) { + return ""; + } +} + +/** + * Determines the offset from the top of the document for the element + * @param {string} element - The element + * @returns {number} The offset from the top + */ +export function getElementTopHeight(element: Element): number { + if (!element) return null + return window.pageYOffset + element.getBoundingClientRect().top +} + +/** + * Determines the offset from the top of the document for the next element + * @param {string} element - The element + * @returns {number} The offset from the top + */ +export function getNextElementTopHeight(element: Element) { + return getElementTopHeight(getNextElement(element)) +} + +function getNextElement(element: Element) { + while (element) { + while (element.nextElementSibling && ( + !(element.nextElementSibling as HTMLElement).offsetParent || + !(element.nextElementSibling as HTMLElement).offsetHeight || + !(element.nextElementSibling as HTMLElement).offsetWidth + )) { + element = element.nextElementSibling + } + + if (element.nextElementSibling) { + break + } + + element = element.parentElement + } + + return element.nextElementSibling +} + +/** + * Retrieves the first matching element given an xpath query + * @param {string} xpath - The xpath query + * @param {Node} contextNode - The context node for the query + * @returns {Element} The first element matching the xpath + */ +export function getXPathElement(xpath: string, contextNode: Node = document): Element { + const matchingElement = document.evaluate( + xpath, contextNode, + null, XPathResult.FIRST_ORDERED_NODE_TYPE, null + ).singleNodeValue + return (matchingElement as Element) +} + +/** + * Retrieves an array of all elements matching a given xpath query + * @param {string} xpath - The xpath query + * @param {Node} contextNode - The context node for the query + * @returns {Element} An array of all elements matching the xpath query + */ +export function getXPathElements(xpath: string, contextNode: Node = document): Element[] { + const results: Element[] = []; + const query = document.evaluate(xpath, contextNode, + null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); + let element = query.iterateNext() + while (element) { + results.push(element as Element) + element = query.iterateNext() + } + return results; +} + +/** + * Retrieve a query string variable from a URL + * @param {string} urlString - the URL to retrieve the query string variable from + * @param {string} parameter - the parameter of the variable in the URL you want to retrieve + * @returns {string} The query string variable in url for the given parameter. If the parameter + * does not exist in the URL, returns null. + */ +export function getQueryVariable(urlString, variable) { + const url = new URL(urlString); + const params = new URLSearchParams(url.search); + return params.get(variable); +} + +/** + * A default URL filter for matching against URLs of new tabs opened from a SERP page + * @param {string} url - The URL to filter + * @return {string} The filtered URL + */ +export function urlFilter(url: string) { + return url.substring(0, 60) +} + +function isValidURL(url: string): boolean { + const res = url.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g); + return (res !== null) +} + +export function isLinkToDifferentPage(urlString: string): boolean { + if (!isValidURL(urlString)) return false; + const url = new URL(urlString); + if ( + url.protocol === window.location.protocol && + url.host === window.location.host && + url.pathname === window.location.pathname && + url.search === window.location.search + ) { + return false; + } + return true; +} + +export function waitForPageManagerLoad(callback) { + if (("webScience" in window) && ("pageManager" in (window as any).webScience)) { + callback(); + } + else { + if (!("pageManagerHasLoaded" in window)) { + (window as any).pageManagerHasLoaded = []; + } + (window as any).pageManagerHasLoaded.push(callback); + } +} \ No newline at end of file From d15e39d3dbb1434d935629004a8d2e319ac40679 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 22 Jun 2021 14:10:24 -0400 Subject: [PATCH 169/399] Completed new functionality for all content scripts --- src/content-scripts/Utils.ts | 11 +- src/content-scripts/common.ts | 158 +++++++--- src/content-scripts/serp-scripts/ask.ts | 280 +++++++++++------- src/content-scripts/serp-scripts/baidu.ts | 196 +++++++----- src/content-scripts/serp-scripts/bing.ts | 196 ++++++++---- .../serp-scripts/duckduckgo.ts | 263 +++++++++------- src/content-scripts/serp-scripts/ecosia.ts | 27 +- src/content-scripts/serp-scripts/google.ts | 256 +++++++++++----- src/content-scripts/serp-scripts/yahoo.ts | 182 ++++++++---- src/content-scripts/serp-scripts/yandex.ts | 184 ++++++++---- 10 files changed, 1121 insertions(+), 632 deletions(-) diff --git a/src/content-scripts/Utils.ts b/src/content-scripts/Utils.ts index 3e083c8..2f295b8 100644 --- a/src/content-scripts/Utils.ts +++ b/src/content-scripts/Utils.ts @@ -92,15 +92,6 @@ export function getQueryVariable(urlString, variable) { return params.get(variable); } -/** - * A default URL filter for matching against URLs of new tabs opened from a SERP page - * @param {string} url - The URL to filter - * @return {string} The filtered URL - */ -export function urlFilter(url: string) { - return url.substring(0, 60) -} - function isValidURL(url: string): boolean { const res = url.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g); return (res !== null) @@ -130,4 +121,4 @@ export function waitForPageManagerLoad(callback) { } (window as any).pageManagerHasLoaded.push(callback); } -} \ No newline at end of file +} diff --git a/src/content-scripts/common.ts b/src/content-scripts/common.ts index 4b38c5e..6938904 100644 --- a/src/content-scripts/common.ts +++ b/src/content-scripts/common.ts @@ -1,19 +1,20 @@ import { timing } from "@mozilla/web-science"; -export enum MousedownType { + +/** + * An enum of the different types of elements tracked + */ +export enum ElementType { Organic, Internal, Ad, } -// TODO: this should be even less maybe -const maxClickDelay = 500; - /** - * Functions for content scripts + * A class to track page values for SERP pages */ export class PageValues { /** - * The name of the search engine that this object is tracking + * The name of the search engine that is being tracked */ readonly searchEngine: string; @@ -68,7 +69,7 @@ export class PageValues { numAdClicks = 0; /** - * The number of advertisement on the page. + * The number of advertisements on the page. */ numAdResults = 0; @@ -83,40 +84,68 @@ export class PageValues { organicResults: Array = []; /** - * Details of the organic results on the page. + * An array of the listeners tracking internal clicks on the page. */ internalListeners: { document: Document, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; + /** + * An array of the listeners tracking organic clicks on the page. + */ organicListeners: { element: Element, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; + /** + * An array of the listeners tracking advertisement clicks on the page. + */ adListeners: { element: Element, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void, }[] = []; - mostRecentMousedown: { type: MousedownType, href: string, index: number }; + /** + * Details about the element that most recently had the mousedown event fired for it. + */ + mostRecentMousedown: { type: ElementType, href: string, index: number }; + /** + * When the most recent recorded click occurred. This is used to ignore new tabs opened from the page if the + * click for the opening of the tab was already recorded. + */ mostRecentRecordedClickTimeStamp: number = null; + /** + * The timestamp of the most recent click that was possibly on an internal link element. This is needed because of + * SERP pages having links that cannot be directly tracked because the link is through an event listener rather + * than an href attribute on the element. + */ possibleInternalClickTimeStamp: number = null; + /** + * Create a PageValues object. + * @param {string} searchEngine - The name of the search engine being tracked. + * @param {callback} onNewTab - A callback that will be passed the url if a new tab is opened + * from this page and determine if a click occurred + */ constructor(searchEngine: string, onNewTab: (url) => void) { this.searchEngine = searchEngine; this.pageId = webScience.pageManager.pageId; + // Receives messages from the background when the background receives + // onCreatedNavigationTarget messages with the tab of this page as the source. browser.runtime.onMessage.addListener((message) => { if (message.type === "CreatedNavigationTargetMessage") { const details = message.details; + // If we recently recorded a click, then we assume that this message is for the opening of a link + // that has already been recorded and we ignore it. Otherwise, we pass the url of the opened tab + // to the onNewTab callback. + // TODO: the delay of 500 ms should maybe be even less? if (this.mostRecentRecordedClickTimeStamp && - this.mostRecentRecordedClickTimeStamp >= (timing.fromMonotonicClock(details.timeStamp, false) - maxClickDelay)) { + this.mostRecentRecordedClickTimeStamp >= (timing.fromMonotonicClock(details.timeStamp, false) - 500)) { this.mostRecentRecordedClickTimeStamp = null; - return; + } else { + onNewTab(details.url); } - console.debug(details); - onNewTab(details.url); } }); webScience.pageManager.onPageAttentionUpdate.addListener(({ timeStamp }) => { // If the page just lost attention, add to the attention duration - // and possibly the attention and audio duration, and stop the timer if (!webScience.pageManager.pageHasAttention) { this.attentionDuration += timeStamp - this.lastAttentionUpdateTime; } @@ -125,7 +154,12 @@ export class PageValues { this.lastAttentionUpdateTime = webScience.pageManager.pageVisitStartTime; } - getAttentionDuration() { + /** + * Get how long (in milliseconds) the page had the participant's attention. + */ + getAttentionDuration(): number { + // If the page currently has attention, we add the amount of time since the last time + // the attention state was changed. if (webScience.pageManager.pageHasAttention) { return this.attentionDuration + (timing.now() - this.lastAttentionUpdateTime); } else { @@ -133,12 +167,27 @@ export class PageValues { } } - resetAttentionTracking(timeStamp = timing.now()) { + /** + * Called to reset tracking if a new SERP page visit starts. + */ + resetTracking(timeStamp = timing.now()) { this.attentionDuration = 0; this.lastAttentionUpdateTime = timeStamp; + this.numInternalClicks = 0; + this.numAdClicks = 0; + this.organicClicks = []; + this.mostRecentMousedown = null; + this.mostRecentRecordedClickTimeStamp = null; + this.possibleInternalClickTimeStamp = null; } + /** + * Add listeners to track organic clicks. + * @param {Element[][]} organicLinkElements - For each index organic search results, an array + * of the organic link elements for that result. + **/ addOrganicListeners(organicLinkElements: Element[][]) { + // Remove any existing listeners tracking organic clicks for (const organicListener of this.organicListeners) { organicListener.element.removeEventListener("click", organicListener.clickListener, true); organicListener.element.removeEventListener("mousedown", organicListener.mousedownListener, true); @@ -148,24 +197,26 @@ export class PageValues { for (let i = 0; i < organicLinkElements.length; i++) { const organicLinkElementsAtIndex = organicLinkElements[i]; for (const organicLinkElement of organicLinkElementsAtIndex) { + // A listener for click events on organic link elements const organicClickListener = (event: MouseEvent) => { if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - console.debug(`Internal Click: Ranking: ${i}, AttentionDuration: ${this.getAttentionDuration()}, PageLoaded: ${this.pageLoaded}`); this.organicClicks.push({ Ranking: i, AttentionDuration: this.getAttentionDuration(), PageLoaded: this.pageLoaded }); this.mostRecentRecordedClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); } } + // A listener for mousedown events on organic link elements const organicMousedownListener = (_event: MouseEvent) => { if ((organicLinkElement as any).href) { this.mostRecentMousedown = { - type: MousedownType.Organic, + type: ElementType.Organic, href: (organicLinkElement as any).href, index: i, } } } + // Add the organic click tracking listeners organicLinkElement.addEventListener("click", organicClickListener, true); organicLinkElement.addEventListener("mousedown", organicMousedownListener, true); this.organicListeners.push({ element: organicLinkElement, clickListener: organicClickListener, mousedownListener: organicMousedownListener }); @@ -173,7 +224,12 @@ export class PageValues { } } - addAdClickListeners(adLinkElements: Element[]) { + /** + * Add listeners to track ad clicks. + * @param {Element[]} adLinkElements - An array of advertisement link elements on the page. + **/ + addAdListeners(adLinkElements: Element[]) { + // Remove any existing listeners tracking ad clicks for (const adListener of this.adListeners) { adListener.element.removeEventListener("click", adListener.clickListener, true); adListener.element.removeEventListener("mousedown", adListener.mousedownListener, true); @@ -181,14 +237,15 @@ export class PageValues { this.adListeners = []; for (const adLinkElement of adLinkElements) { + // A listener for click events on ad link elements const adClickListener = (event: MouseEvent) => { if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { - console.debug("Advertisement Click") this.numAdClicks++; this.mostRecentRecordedClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); } } + // A listener for mousedown events on ad link elements const adMousedownListener = (event: MouseEvent) => { if (event.target instanceof Element) { const hrefElement = event.target.closest("[href]"); @@ -196,7 +253,7 @@ export class PageValues { const href = (hrefElement as any).href; if (href) { this.mostRecentMousedown = { - type: MousedownType.Ad, + type: ElementType.Ad, href: href, index: null } @@ -205,25 +262,33 @@ export class PageValues { } } + // Add the ad click tracking listeners adLinkElement.addEventListener("click", adClickListener, true); adLinkElement.addEventListener("mousedown", adMousedownListener, true); this.adListeners.push({ element: adLinkElement, clickListener: adClickListener, mousedownListener: adMousedownListener }); } } + /** + * Add listeners to track internal clicks. + * @param {callback} getInternalLink - A callback function that returns a URL if the element is + * is an internal link element and the href of the element is the link to the internal page. It returns + * an empty string if the element was possibly an internal link element. Otherwise, returns null. + **/ addInternalListeners(getInternalLink: (target: Element) => string) { + // Remove any existing listeners tracking internal clicks for (const internalListener of this.internalListeners) { internalListener.document.removeEventListener("click", internalListener.clickListener, true); internalListener.document.removeEventListener("mousedown", internalListener.mousedownListener, true); } this.internalListeners = []; + // A listener for click events on internal link elements const internalClickListener = (event: MouseEvent) => { if (!(event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) { if (event.target instanceof Element) { const href = getInternalLink(event.target as Element); if (href) { - console.debug("Internal Click") this.numInternalClicks++; this.mostRecentRecordedClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); } else if (href === "") { @@ -233,12 +298,13 @@ export class PageValues { } } + // A listener for mousedown events on internal link elements const internalMousedownListener = (event: MouseEvent) => { if (event.target instanceof Element) { const href = getInternalLink(event.target as Element); if (href) { this.mostRecentMousedown = { - type: MousedownType.Internal, + type: ElementType.Internal, href: href, index: null } @@ -246,49 +312,45 @@ export class PageValues { } } + // Add the internal click tracking listeners document.addEventListener("click", internalClickListener, true); document.addEventListener("mousedown", internalMousedownListener, true); this.internalListeners.push({ document: document, clickListener: internalClickListener, mousedownListener: internalMousedownListener }); } + /** + * Report page data to the background. + */ reportResults(timeStamp: number) { // If pageIsCorrect is false, we do not report if (!this.pageIsCorrect) { - console.debug( - "Loaded module " + this.searchEngine + " is not passing page correctness test" - ) return } - // TODO adjust this time + // If there was a possible internal click within 1 second of the reporting, + // we consider the possible internal click to be an internal click. + // TODO: maybe use different delay than 1 second? if (this.possibleInternalClickTimeStamp && - this.possibleInternalClickTimeStamp >= timeStamp - 500) { - console.debug("Internal Click") + this.possibleInternalClickTimeStamp >= timeStamp - 1000) { this.numInternalClicks++; } - const data = { - searchEngine: this.searchEngine, - attentionDuration: this.getAttentionDuration(), - pageNum: this.pageNum, - organicDetails: this.organicResults, - organicClicks: this.organicClicks, - numAdResults: this.numAdResults, - numAdClicks: this.numAdClicks, - numInternalClicks: this.numInternalClicks, - searchAreaTopHeight: this.searchAreaTopHeight, - searchAreaBottomHeight: this.searchAreaBottomHeight, - pageId: this.pageId - } - - console.log("HELLO") - console.log(data) - console.log("HELLO") - // Send data to background page browser.runtime.sendMessage({ type: "SerpVisitData", - data: data, + data: { + searchEngine: this.searchEngine, + attentionDuration: this.getAttentionDuration(), + pageNum: this.pageNum, + organicDetails: this.organicResults, + organicClicks: this.organicClicks, + numAdResults: this.numAdResults, + numAdClicks: this.numAdClicks, + numInternalClicks: this.numInternalClicks, + searchAreaTopHeight: this.searchAreaTopHeight, + searchAreaBottomHeight: this.searchAreaBottomHeight, + pageId: this.pageId + }, }) } } diff --git a/src/content-scripts/serp-scripts/ask.ts b/src/content-scripts/serp-scripts/ask.ts index 910f924..368a34a 100644 --- a/src/content-scripts/serp-scripts/ask.ts +++ b/src/content-scripts/serp-scripts/ask.ts @@ -1,124 +1,146 @@ -import * as Common from "../common.js" +import { PageValues, ElementType } from "../common.js" +import * as Utils from "../Utils.js" +import { timing } from "@mozilla/web-science"; /** - * Content Scripts for Ask SERP + * Content Scripts for Google SERP */ - -(async function () { - const moduleName = "Ask" - - const askFrameToNumAdsObject = {} - let numAskDisplayAds = 0 - - /** - * Determine whether the page is a web search results page - */ - function determinePageIsCorrect(): void { - // Do not need to determine if it is web search, Ask does not - // have other searches - Common.setPageIsCorrect(true) - } - - /** - * @returns {Array} An array of all the organic results on the page - */ - function getOrganicResults() { - return Array.from(document.querySelectorAll(".PartialSearchResults-item")); +let internalListeners: { document: Document, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; +const serpModule = function () { + const pageValues = new PageValues("Ask", onNewTab); + + function getOrganicDetails(): OrganicDetail[] { + const organicResults = document.querySelectorAll(".PartialSearchResults-item"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + } + return organicDetails; } - /** - * @returns {Array} An array of the ad results on the page not in iFrames - */ - function getAdResults() { - return Array.from(document.querySelectorAll(".display-ad-block")) + function getOrganicLinkElements(): Element[][] { + const organicResults = document.querySelectorAll(".PartialSearchResults-item"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]'))); + } + return organicLinkElements; } - /** - * Determine the height of the top of the search results area - */ - function determineSearchAreaTopHeight(): void { - Common.setSearchAreaTopHeight(Common.getElementTopHeight(document.querySelector(".main"))); + function getAdLinkElements(): Element[] { + const adLinkElements: Element[] = []; + const adElements = document.querySelectorAll(".display-ad-block"); + adElements.forEach(adElement => { + adLinkElements.push(...adElement.querySelectorAll("[href]")); + }); + return adLinkElements; } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaBottomHeight(): void { - Common.setSearchAreaBottomHeight(Common.getElementTopHeight(document.querySelector(".PartialWebPagination "))) + function getSearchAreaTopHeight(): number { + try { + return Utils.getElementTopHeight(document.querySelector(".main")); + } catch (error) { + return null; + } } /** - * Determine the page number + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determinePageNum() { - const url = webScience.pageManager.url - const pageNumberFromUrl = Common.getQueryVariable(url, "page"); - if (pageNumberFromUrl) { - Common.setPageNum(Number(pageNumberFromUrl)) - } else { - Common.setPageNum(1) + function getSearchAreaBottomHeight(): number { + try { + return Utils.getElementTopHeight(document.querySelector(".PartialWebPagination ")); + } catch (error) { + return null; } } /** - * @return {Number} the number of ads on page including those within iFrames + * Get the page number. */ - function getNumAdResultsAsk() { - let total = 0; - for (const frame in askFrameToNumAdsObject) { - total += askFrameToNumAdsObject[frame] - } - Common.setNumAdResults(total + numAskDisplayAds); + function getPageNum(): number { + const pageNumFromUrl = Utils.getQueryVariable(window.location.href, "page"); + return pageNumFromUrl ? Number(pageNumFromUrl) : 1; } - /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine - */ - function isInternalLink(urlString: string): boolean { - try { - const url = new URL(urlString) - return url.hostname.includes("ask.com") - } catch (error) { - return false + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches(".main *")) { + if (!target.matches(".PartialWebPagination *, .PartialPageFooter *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const url = new URL(href); + if (url.hostname.includes("ask.com")) { + return href; + } + } else { + return ""; + } + } else { + return ""; + } + } } + return null; } - function determinePageValues(): void { - determinePageIsCorrect(); - determinePageNum(); - - determineSearchAreaTopHeight() - determineSearchAreaBottomHeight(); - - Common.determineOrganicElementsAndAddListeners(getOrganicResults()); - Common.determineAdElementsAndAddListeners(getAdResults()); + function addInternalListeners(getInternalLink: (target: Element) => string) { + for (const internalListener of internalListeners) { + internalListener.document.removeEventListener("click", internalListener.clickListener, true); + internalListener.document.removeEventListener("mousedown", internalListener.mousedownListener, true); + } + internalListeners = []; + + const internalClickListener = (event: MouseEvent) => { + if (event.target instanceof Element) { + const href = getInternalLink(event.target as Element); + if (href) { + pageValues.numInternalClicks++; + pageValues.mostRecentRecordedClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); + pageValues.mostRecentMousedown = null; + } else if (href === "") { + pageValues.possibleInternalClickTimeStamp = timing.fromMonotonicClock(event.timeStamp, true); + } + } + } - Common.addInternalClickListeners( - ".PartialWebPagination *, .PartialPageFooter *, .PartialSearchResults-item *, .TopAdsPartial *, .BottomAdsPartial *, .PartialRtkAdSlot-ads *", - isInternalLink, - document.querySelectorAll(".main")); + const internalMousedownListener = (event: MouseEvent) => { + if (event.target instanceof Element) { + const href = getInternalLink(event.target as Element); + if (href) { + pageValues.mostRecentMousedown = { + type: ElementType.Internal, + href: href, + index: null + } + } + } + } - numAskDisplayAds = document.querySelectorAll(".display-ad-block").length + document.addEventListener("click", internalClickListener, true); + document.addEventListener("mousedown", internalMousedownListener, true); + internalListeners.push({ document: document, clickListener: internalClickListener, mousedownListener: internalMousedownListener }); } /** - * Initializes a listener that will get messages from the iFrames containing ads + * Determine all the page values and send the query to the background page */ - function initializeFrameListener() { - window.addEventListener("message", (event) => { - try { - if ("type" in event.data && event.data.type === "numAds") { - console.log(`${event.data.frameID}: ${event.data.numAds}`) - askFrameToNumAdsObject[event.data.frameID] = event.data.numAds - } else if ("type" in event.data && event.data.type === "adClick") { - Common.setNumAdClicks(Common.getNumAdClicks() + 1) - } - } catch (error) { - // console.log("Wrong message type") - } - - }, false); + function determinePageValues(): void { + pageValues.pageIsCorrect = true; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + addInternalListeners(getInternalLink); } window.addEventListener("DOMContentLoaded", function () { @@ -127,35 +149,63 @@ import * as Common from "../common.js" window.addEventListener("load", function () { determinePageValues(); - Common.setPageLoaded(true) + pageValues.pageLoaded = true; }); - /** - * Initializes a listener for new tabs that will determine if they correspond to ad clicks - * on the current page - */ - function registerAskNewTabAdListener() { - browser.runtime.onMessage.addListener((message) => { - if (message.type === "NewTabURL") { - if ((message.url as string).includes("g.doubleclick.net") || - (message.url as string).includes("google.com/aclk?") || - (message.url as string).includes("revjet") || - (message.url as string).includes("googleadservices.com")) { - Common.setNumAdClicks(Common.getNumAdClicks() + 1) - } + function onNewTab(url) { + const normalizedUrl: string = Utils.getNormalizedUrl(url); + if (normalizedUrl.includes("g.doubleclick.net") || + normalizedUrl.includes("google.com/aclk") || + normalizedUrl.includes("revjet") || + normalizedUrl.includes("googleadservices.com")) { + pageValues.numAdClicks++; + return; + } + if (!pageValues.mostRecentMousedown) { + return; + } + const normalizedRecentUrl: string = Utils.getNormalizedUrl(pageValues.mostRecentMousedown.href) + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if (normalizedRecentUrl === normalizedUrl) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) } - }); + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (normalizedRecentUrl === normalizedUrl || + normalizedUrl.includes("ask.com")) { + pageValues.numInternalClicks++; + } + return; + } } - // Functionality to be executed immediately before reporting - function preReportCallbackAsk() { - getNumAdResultsAsk(); - } + window.addEventListener("unload", (event) => { + let numAskFrameAds = 0; + for (const frame in askFrameToNumAdsObject) { + numAskFrameAds += askFrameToNumAdsObject[frame] + } + pageValues.numAdResults = numAskFrameAds + document.querySelectorAll(".display-ad-block").length; + pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); + }); + + /** + * Initializes a listener that will get messages from the + * iFrames containing ads + */ + const askFrameToNumAdsObject = {} + window.addEventListener("message", (event) => { + try { + if ("type" in event.data && event.data.type === "numAds") { + askFrameToNumAdsObject[event.data.frameID] = event.data.numAds; + } else if ("type" in event.data && event.data.type === "adClick") { + pageValues.numAdClicks++; + } + } catch (error) { + return; + } - registerAskNewTabAdListener(); - initializeFrameListener(); + }, false); +}; - Common.initPageManagerListeners(); - Common.registerNewTabListener(); - Common.registerModule(moduleName, preReportCallbackAsk) -})() \ No newline at end of file +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/baidu.ts b/src/content-scripts/serp-scripts/baidu.ts index 5d84879..320321a 100644 --- a/src/content-scripts/serp-scripts/baidu.ts +++ b/src/content-scripts/serp-scripts/baidu.ts @@ -1,113 +1,174 @@ -import * as Common from "../common.js" +import { PageValues, ElementType } from "../common.js" +import * as Utils from "../Utils.js" /** * Content Scripts for Baidu SERP */ - -(async function () { - const moduleName = "Baidu" +const serpModule = function () { + const pageValues = new PageValues("Baidu", onNewTab); /** - * Determine whether the page is a web search results page + * Get whether the page is a basic SERP page. */ - function determinePageIsCorrect(): void { + function getPageIsCorrect(): boolean { const url = new URL(window.location.href) if (url.hostname === "baidu.com" || url.hostname === "www.baidu.com") { - const tn = Common.getQueryVariable(window.location.href, "tn") - if (!tn || (tn === "baidu")) { - Common.setPageIsCorrect(true) - return + if (window.location.pathname === "/s") { + const tn = Utils.getQueryVariable(window.location.href, "tn") + if (!tn || (tn === "baidu")) { + return true; + } } } - Common.setPageIsCorrect(false) + return false; + } + function getOrganicDetails(): OrganicDetail[] { + const organicResults = document.querySelectorAll("#content_left > .result"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + } + return organicDetails; } - /** - * @returns {Array} An array of all the organic results on the page - */ - function getOrganicResults() { - return Array.from(document.querySelectorAll("#content_left > .result")); + function getOrganicLinkElements(): Element[][] { + const organicResults = document.querySelectorAll("#content_left > .result"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]'))); + } + return organicLinkElements; } /** * @returns {Array} An array of all the ad results on the page */ - function getAdResults() { - return Common.getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]") + function getNumAdResults(): number { + return Utils.getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]").length; } - /** - * @param {string} adResults - an array of the ad results on the page - * @returns {Array} An array of all the ad links in the ad results - */ - function getIsAdLinkElement(adLinkElement: Element): boolean { - const adLink = (adLinkElement as any).href - return adLink && !adLink.includes("javascript") + function getAdLinkElements(): Element[] { + const adLinkElements: Element[] = []; + const adElements = Utils.getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]"); + adElements.forEach(adElement => { + adLinkElements.push(...Array.from(adElement.querySelectorAll("[href]")).filter(adLinkElement => { + const href = (adLinkElement as any).href; + return href && !href.includes("javascript"); + })); + }); + return adLinkElements; } /** - * Determine the height of the top of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaTopHeight(): void { - const element = (document.querySelector("#s_tab") as HTMLElement) - Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)) + function getSearchAreaTopHeight(): number { + try { + const element = (document.querySelector("#s_tab") as HTMLElement) + return element.offsetHeight + Utils.getElementTopHeight(element) + } catch (error) { + return null; + } + } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determineSearchAreaBottomHeight(): void { - const element = (document.querySelector("#container") as HTMLElement) - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) + function getSearchAreaBottomHeight(): number { + try { + const element = (document.querySelector("#container") as HTMLElement) + return element.offsetHeight + Utils.getElementTopHeight(element); + } catch (error) { + return null; + } } /** - * Determine the page number + * Get the page number. */ - function determinePageNum(): void { + function getPageNum(): number { const pageNumElement = document.querySelector("strong > .pc") - Common.setPageNum(pageNumElement ? Number(pageNumElement.textContent) : -1) + return pageNumElement ? Number(pageNumElement.textContent) : -1; } - /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine - */ - function isInternalLink(urlString: string): boolean { - try { - const url = new URL(urlString) - if (url.hostname.includes("baidu.com")) { - if (urlString.includes("baidu.com/other.php")) { - return false + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches("#container *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const normalizedUrl = Utils.getNormalizedUrl(href); + if (normalizedUrl.includes("baidu.com") && + !normalizedUrl.includes("baidu.com/link") && + !normalizedUrl.includes("baidu.com/baidu.php")) { + return href + } } else { - return true + return ""; } } else { - return false + return ""; } - } catch (error) { - return false } + return null; } /** * Determine all the page values and send the query to the background page */ function determinePageValues(): void { - determinePageIsCorrect(); - determinePageNum(); + pageValues.pageIsCorrect = getPageIsCorrect(); + if (!pageValues.pageIsCorrect) return; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.numAdResults = getNumAdResults(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + pageValues.addInternalListeners(getInternalLink); + } - determineSearchAreaTopHeight() - determineSearchAreaBottomHeight(); + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); - Common.determineOrganicElementsAndAddListeners(getOrganicResults()); - Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); - Common.addInternalClickListeners( - "#content_left > .result *", - isInternalLink, - document.querySelectorAll("#container")); + function onNewTab(url) { + if (!pageValues.mostRecentMousedown) { + return; + } + const normalizedUrl: string = Utils.getNormalizedUrl(url); + const normalizedRecentUrl: string = Utils.getNormalizedUrl(pageValues.mostRecentMousedown.href) + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { + if (normalizedRecentUrl === normalizedUrl) { + pageValues.numAdClicks++; + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if ((pageValues.mostRecentMousedown.href === url) || + (normalizedUrl.includes("baidu.com/link") && normalizedRecentUrl.includes("baidu.com/link") && + Utils.getQueryVariable(url, "url") === Utils.getQueryVariable(pageValues.mostRecentMousedown.href, "url"))) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (normalizedRecentUrl === normalizedUrl) { + pageValues.numInternalClicks++; + } + return; + } } const bodyObserver = new MutationObserver(function (_, observer) { @@ -119,21 +180,20 @@ import * as Common from "../common.js" const config = { childList: true }; domObserver.observe(container, config); observer.disconnect() - console.log("tracking") } }); const bodyConfig = { childList: true, subtree: true }; bodyObserver.observe(document, bodyConfig); - - // TODO: do we need this? webScience.pageManager.onPageVisitStart.addListener(() => { - console.debug("We hit this") + pageValues.resetTracking(); determinePageValues(); }); - Common.initPageManagerListeners(); - Common.registerNewTabListener(); - Common.registerModule(moduleName) -})() \ No newline at end of file + webScience.pageManager.onPageVisitStop.addListener(({ timeStamp }) => { + pageValues.reportResults(timeStamp); + }); +}; + +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/bing.ts b/src/content-scripts/serp-scripts/bing.ts index 0d42fd5..9bd11f8 100644 --- a/src/content-scripts/serp-scripts/bing.ts +++ b/src/content-scripts/serp-scripts/bing.ts @@ -1,101 +1,134 @@ -import * as Common from "../common.js" +import { PageValues, ElementType } from "../common.js" +import * as Utils from "../Utils.js" /** * Content Scripts for Bing SERP */ - -(async function () { - const moduleName = "Bing" - - /** - * Determine whether the page is a web search results page - */ - function determinePageIsCorrect(): void { - // Don't need to determine if it is web search, this is handled by - // content script URL matching - Common.setPageIsCorrect(true); +const serpModule = function () { + const pageValues = new PageValues("Bing", onNewTab); + + function getOrganicDetails(): OrganicDetail[] { + const organicResults = document.querySelectorAll("#b_results > li.b_algo"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + } + return organicDetails; } - /** - * @returns {Array} An array of all the organic results on the page - */ - function getOrganicResults() { - return Array.from(document.querySelectorAll("#b_results > li.b_algo")); + function getOrganicLinkElements(): Element[][] { + const organicResults = document.querySelectorAll("#b_results > li.b_algo"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]'))); + } + return organicLinkElements; } /** * @returns {Array} An array of all the ad results on the page */ - function getAdResults() { - return Array.from(document.querySelectorAll(".b_ad > ul > li, .b_adLastChild")) + function getNumAdResults(): number { + return document.querySelectorAll(".b_adSlug").length; } - function getIsAdLinkElement(adLinkElement: Element): boolean { - return !!(adLinkElement as any).href && !adLinkElement.matches( - '.b_adinfo, .b_adinfo *') + function getAdLinkElements(): Element[] { + const adLinkElements: Element[] = []; + + // Add ad carousel links + document.querySelectorAll(".adsMvCarousel").forEach(adElement => { + if (adElement.parentElement.parentElement.querySelector(".b_adSlug")) { + adLinkElements.push(...adElement.querySelectorAll(".slide:not(.see_more) [href]")); + } + }); + + const adElements = Array.from(document.querySelectorAll(".b_ad > ul > li, .b_adLastChild")).filter(adElement => { + return !adElement.querySelector(".adsMvCarousel"); + }); + + adElements.forEach(adElement => { + Array.from(adElement.querySelectorAll("[href]")).filter(adLinkElement => { + if (!adLinkElement.matches('.b_adcaret, .b_adcaret *, .b_adinfo, .b_adinfo *')) { + adLinkElements.push(adLinkElement); + } + }); + }); + return adLinkElements; } /** - * Determine the height of the top of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaTopHeight(): void { - Common.setSearchAreaTopHeight((document.querySelector("#b_header") as HTMLElement).offsetHeight) + function getSearchAreaTopHeight(): number { + try { + return (document.querySelector("#b_header") as HTMLElement).offsetHeight; + } catch (error) { + return null; + } } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determineSearchAreaBottomHeight(): void { - const element = (document.querySelector(".b_pag") as HTMLElement) - Common.setSearchAreaBottomHeight(Common.getElementTopHeight(element)) + function getSearchAreaBottomHeight(): number { + try { + const element = (document.querySelector(".b_pag") as HTMLElement) + return Utils.getElementTopHeight(element) + } catch (error) { + return null; + } } /** - * Determine the page number + * Get the page number. */ - function determinePageNum(): void { + function getPageNum(): number { const pageElement = document.querySelector(".sb_pagS_bp") if (pageElement) { - Common.setPageNum(Number(pageElement.textContent)) + return Number(pageElement.textContent); } else { - Common.setPageNum(-1) + return -1; } } - /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine - */ - function isInternalLink(urlString: string): boolean { - try { - const url = new URL(urlString) - if (url.hostname.includes("bing.com")) { - return true - } else { - return false + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches("#b_content *")) { + if (!target.matches(".b_pag *, #b_results > li.b_algo *, .b_ad > ul > li *, .b_adLastChild *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const url = new URL(href); + if (url.hostname === window.location.hostname) { + return href; + } + } else { + return ""; + } + } else { + return ""; + } } - } catch (error) { - return false } + return null; } /** * Determine all the page values and send the query to the background page */ function determinePageValues(): void { - determinePageIsCorrect(); - determinePageNum(); - - determineSearchAreaTopHeight() - determineSearchAreaBottomHeight() - - Common.determineOrganicElementsAndAddListeners(getOrganicResults()); - Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); - - Common.addInternalClickListeners( - ".b_pag *, #b_results > li.b_algo *, .b_ad > ul > li *, .b_adLastChild *", - isInternalLink, - document.querySelectorAll("#b_content")); + pageValues.pageIsCorrect = true; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.numAdResults = getNumAdResults(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + pageValues.addInternalListeners(getInternalLink); } window.addEventListener("DOMContentLoaded", function () { @@ -104,10 +137,45 @@ import * as Common from "../common.js" window.addEventListener("load", function () { determinePageValues(); - Common.setPageLoaded(true) + pageValues.pageLoaded = true; + }); + + function onNewTab(url) { + if (!pageValues.mostRecentMousedown) { + return; + } + const normalizedUrl: string = Utils.getNormalizedUrl(url); + let redirectUrl = null; + if (normalizedUrl.includes("bing.com/newtabredir")) { + redirectUrl = Utils.getQueryVariable(url, "url") + } + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { + if (normalizedUrl.includes("bing.com/aclk") || + pageValues.mostRecentMousedown.href === url || + (redirectUrl && pageValues.mostRecentMousedown.href === redirectUrl)) { + pageValues.numAdClicks++; + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if (pageValues.mostRecentMousedown.href === url || + (redirectUrl && pageValues.mostRecentMousedown.href === redirectUrl)) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + } + return + } + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (pageValues.mostRecentMousedown.href === url || + (redirectUrl && (pageValues.mostRecentMousedown.href === redirectUrl || redirectUrl[0] === "/"))) { + pageValues.numInternalClicks++; + } + return + } + } + + webScience.pageManager.onPageVisitStop.addListener(({ timeStamp }) => { + pageValues.reportResults(timeStamp); }); +}; - Common.initPageManagerListeners(); - Common.registerNewTabListener(); - Common.registerModule(moduleName) -})() \ No newline at end of file +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/duckduckgo.ts b/src/content-scripts/serp-scripts/duckduckgo.ts index 0297921..5414668 100644 --- a/src/content-scripts/serp-scripts/duckduckgo.ts +++ b/src/content-scripts/serp-scripts/duckduckgo.ts @@ -1,173 +1,212 @@ -import * as Common from "../common.js" +import { PageValues, ElementType } from "../common.js" +import * as Utils from "../Utils.js" +import { timing } from "@mozilla/web-science"; + /** - * Content Scripts for DuckDuckGo SERP + * Content Script for DuckDuckGo SERP */ -(async function () { - const moduleName = "DuckDuckGo" +const serpModule = function () { + const pageValues = new PageValues("DuckDuckGo", onNewTab); + /** - * Determine whether the page is a web search results page + * Get whether the page is a basic SERP page. */ - function determinePageIsCorrect(): void { - Common.setPageIsCorrect(!!document.querySelector("#duckbar_static li:first-child .is-active, #duckbar_new .is-active") && !!Common.getQueryVariable(window.location.href, "ia")) + function getPageIsCorrect(): boolean { + return !!document.querySelector("#duckbar_static li:first-child .is-active, #duckbar_new .is-active") && + !!Utils.getQueryVariable(window.location.href, "ia") && + !Utils.getQueryVariable(window.location.href, "iax") && + !Utils.getQueryVariable(window.location.href, "iaxm"); } /** - * @returns {Array} An array of all the organic results on the page + * Determine the page number of the given element */ - function getOrganicResults() { - return Array.from(document.querySelectorAll("#links > div[id^='r1-']")); + function getPageNumForElement(element: Element) { + while (element) { + if (element.classList.contains("has-pagenum")) { + return Number(element.querySelector(".result__pagenum").textContent) + } + element = element.previousElementSibling + } + return 1 + } + + function getOrganicDetails(): OrganicDetail[] { + const organicResults = document.querySelectorAll("#links > div[id^='r1-']"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: getPageNumForElement(organicResult) }) + } + return organicDetails; + } + + function getOrganicLinkElements(): Element[][] { + const organicResults = document.querySelectorAll("#links > div[id^='r1-']"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]'))); + } + return organicLinkElements; } /** * @returns {Array} An array of all the ad results on the page */ - function getAdResults() { - return Array.from(document.querySelectorAll("#ads > div, .result--ad")).filter(adElement => { - return !!adElement.innerHTML && adElement.querySelector(".badge--ad") - }); + function getNumAdResults(): number { + return document.querySelectorAll(".badge--ad").length; } - function getIsAdLinkElement(adLinkElement: Element): boolean { - return !!(adLinkElement as any).href && !adLinkElement.matches( - '.report-ad, .report-ad *, .feedback-prompt, .feedback-prompt *, .badge--ad__tooltip, .badge--ad__tooltip *') + function getAdLinkElements(): Element[] { + const adLinkElements: Element[] = []; + + // Add all the carousel items. We can't just add the elements in the carousel with an href attribute because each item is clickable through a JS event + const modules = document.querySelectorAll(".module--carousel"); + for (const module of modules) { + if (module.querySelector(".badge--ad")) { + adLinkElements.push(...module.querySelectorAll(".module--carousel__item")); + } + } + + const regularAdLinkElements = Array.from(document.querySelectorAll("#ads [href], .result--ad [href]")).filter(adLinkElement => { + return !adLinkElement.matches( + '.report-ad, .report-ad *, .feedback-prompt, .feedback-prompt *, .badge--ad__tooltip, .badge--ad__tooltip *, .module--carousel *') + }); + + adLinkElements.push(...regularAdLinkElements); + + return adLinkElements; } /** - * Determine the height of the top of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaTopHeight(): void { + function getSearchAreaTopHeight(): number { try { - Common.setSearchAreaTopHeight((document.querySelector("#header_wrapper") as HTMLElement).offsetHeight) + return (document.querySelector("#header_wrapper") as HTMLElement).offsetHeight; } catch (error) { - Common.setSearchAreaTopHeight(null) + return null; } } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determineSearchAreaBottomHeight(): void { + function getSearchAreaBottomHeight(): number { try { - const resultElements = document.querySelectorAll("#links > div:not(.js-result-hidden-el):not(.is-hidden):not(.result--more)") - - const element = resultElements[resultElements.length - 1] as HTMLElement - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) + const resultElements = document.querySelectorAll("#links > div:not(.js-result-hidden-el):not(.is-hidden):not(.result--more)"); + const element = resultElements[resultElements.length - 1] as HTMLElement; + return element.offsetHeight + Utils.getElementTopHeight(element) } catch (error) { - Common.setSearchAreaBottomHeight(null) + return null; } } /** - * Determine the page number - * Note: DDG pagination occurs through continuous scroll rather than loading - * a new page for each page of results + * Get the page number. */ - function determinePageNum(): void { - const pageElement = Common.getXPathElement("(//div[contains(@class, 'result__pagenum')])[last()]") + function getPageNum(): number { + const pageElement = Utils.getXPathElement("(//div[contains(@class, 'result__pagenum')])[last()]") if (pageElement) { - Common.setPageNum(Number(pageElement.textContent)) + return Number(pageElement.textContent); } else { - Common.setPageNum(1) + return 1; } } - /** - * Determine the page number of the given element - */ - function getPageNumForElement(element: Element) { - while (element) { - if (element.classList.contains("has-pagenum")) { - return Number(element.querySelector(".result__pagenum").textContent) + const domObserver = new MutationObserver(function () { + determinePageValues(timing.now()); + }); + + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches("#zero_click_wrapper *, #vertical_wrapper *, #web_content_wrapper *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const url = new URL(href); + if (url.hostname === window.location.hostname) { + return href; + } + } else { + return ""; + } + } else { + return ""; } - element = element.previousElementSibling } - return 1 + return null; } - /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine - */ - function isInternalLink(urlString: string): boolean { - const url = new URL(urlString) - return url.hostname.includes("duckduckgo.com") - } - - const domObserver = new MutationObserver(function () { - determinePageValues(); - }); - /** * Determine all the page values and send the query to the background page */ - function determinePageValues(): void { - determinePageIsCorrect(); - - if (Common.getPageIsCorrect()) { - determinePageNum(); - - determineSearchAreaTopHeight(); - determineSearchAreaBottomHeight(); - - Common.determineOrganicElementsAndAddListeners(getOrganicResults(), getPageNumForElement); - Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement) - - Common.addInternalClickListeners( - ".result--more *, #ads > div *, .result--ad *, #links > div[id^='r1-'] *", - isInternalLink, - document.querySelectorAll("#zero_click_wrapper, #vertical_wrapper, #web_content_wrapper")); - - domObserver.disconnect(); - const container = document.querySelector("#links") - if (container) { - domObserver.observe(container, { childList: true }); - } + function determinePageValues(timeStamp: number): void { + const newPageIsCorrect = getPageIsCorrect(); + if (pageValues.pageIsCorrect && !newPageIsCorrect) { + pageValues.reportResults(timeStamp); + pageValues.resetTracking(); + } + pageValues.pageIsCorrect = newPageIsCorrect; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.numAdResults = getNumAdResults(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + pageValues.addInternalListeners(getInternalLink); + + domObserver.disconnect(); + const container = document.querySelector("#links") + if (container) { + domObserver.observe(container, { childList: true }); } } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); + window.addEventListener("DOMContentLoaded", (event) => { + determinePageValues(timing.fromMonotonicClock(event.timeStamp, true)); }); - window.addEventListener("load", function () { - determinePageValues(); - Common.setPageLoaded(true); + window.addEventListener("load", (event) => { + determinePageValues(timing.fromMonotonicClock(event.timeStamp, true)); + pageValues.pageLoaded = true; }); - function initPageManagerListenersDDG() { - function initModuleDDG() { - Common.registerAttentionListener(); - webScience.pageManager.onPageVisitStart.addListener(() => { - if (!Common.getPageIsCorrect()) { - Common.reportResults(); - Common.resetAttentionTracking(); - } - determinePageValues(); - }); - - // In case we miss an initial pageVisitStart event - if (webScience.pageManager.pageVisitStarted) { - Common.resetAttentionTracking(); - determinePageValues(); + function onNewTab(url) { + if (!pageValues.mostRecentMousedown) { + return; + } + const normalizedUrl: string = Utils.getNormalizedUrl(url); + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { + if (normalizedUrl.includes("duckduckgo.com/y.js") || pageValues.mostRecentMousedown.href === url) { + pageValues.numAdClicks++; } + return; } - - if (("webScience" in window) && ("pageManager" in window["webScience"])) { - initModuleDDG(); + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if (pageValues.mostRecentMousedown.href === url) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + } + return; } - else { - if (!("pageManagerHasLoaded" in window)) { - window["pageManagerHasLoaded"] = []; + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (pageValues.mostRecentMousedown.href === url) { + pageValues.numInternalClicks++; } - window["pageManagerHasLoaded"].push(initModuleDDG); + return; } } - window.addEventListener("unload", () => { - Common.pageVisitEndListener(); + webScience.pageManager.onPageVisitStart.addListener(({ timeStamp }) => { + determinePageValues(timeStamp); + }); + + window.addEventListener("unload", (event) => { + pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); +}; - initPageManagerListenersDDG(); - Common.registerNewTabListener(); - Common.registerModule(moduleName) -})() +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/ecosia.ts b/src/content-scripts/serp-scripts/ecosia.ts index b7202a5..a271726 100644 --- a/src/content-scripts/serp-scripts/ecosia.ts +++ b/src/content-scripts/serp-scripts/ecosia.ts @@ -1,4 +1,4 @@ -import { PageValues, MousedownType } from "../common.js" +import { PageValues, ElementType } from "../common.js" import * as Utils from "../Utils.js" import { timing } from "@mozilla/web-science"; @@ -107,7 +107,7 @@ const serpModule = function () { pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); pageValues.numAdResults = getNumAdResults(); pageValues.organicResults = getOrganicDetails(); - pageValues.addAdClickListeners(getAdLinkElements()); + pageValues.addAdListeners(getAdLinkElements()); pageValues.addOrganicListeners(getOrganicLinkElements()); pageValues.addInternalListeners(getInternalLink); } @@ -122,22 +122,27 @@ const serpModule = function () { }); function onNewTab(url) { + if (!pageValues.mostRecentMousedown) { + return; + } const normalizedUrl: string = Utils.getNormalizedUrl(url); - if (pageValues.mostRecentMousedown.type === MousedownType.Ad) { - if (normalizedUrl.includes("bing.com/aclick")) { - console.debug("Advertisement Click") + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { + if (normalizedUrl.includes("bing.com/aclick") || pageValues.mostRecentMousedown.href === url) { pageValues.numAdClicks++; } return; } - if (pageValues.mostRecentMousedown.type === MousedownType.Organic && pageValues.mostRecentMousedown.href === url) { - console.debug(`Internal Click: Ranking: ${pageValues.mostRecentMousedown.index}, AttentionDuration: ${pageValues.getAttentionDuration()}, PageLoaded: ${pageValues.pageLoaded}`); - pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if (pageValues.mostRecentMousedown.href === url) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + } return; } - if (pageValues.mostRecentMousedown.type === MousedownType.Internal && pageValues.mostRecentMousedown.href === url) { - console.debug("Internal Click") - pageValues.numInternalClicks++; + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (pageValues.mostRecentMousedown.href === url) { + pageValues.numInternalClicks++; + } + return; } } diff --git a/src/content-scripts/serp-scripts/google.ts b/src/content-scripts/serp-scripts/google.ts index 3b18298..884be15 100644 --- a/src/content-scripts/serp-scripts/google.ts +++ b/src/content-scripts/serp-scripts/google.ts @@ -1,43 +1,53 @@ -import * as Common from "../common.js" +import { PageValues, ElementType } from "../common.js" +import * as Utils from "../Utils.js" /** * Content Scripts for Google SERP */ - -(async function () { - const moduleName = "Google" +const serpModule = function () { + const pageValues = new PageValues("Google", onNewTab); /** - * Determine whether the page is a web search results page + * Get whether the page is a basic SERP page. */ - function determinePageIsCorrect(): void { - const tbm = Common.getQueryVariable(window.location.href, "tbm") + function getPageIsCorrect(): boolean { + const tbm = Utils.getQueryVariable(window.location.href, "tbm") if (!tbm) { - const tbs = Common.getQueryVariable(window.location.href, "tbs") + const tbs = Utils.getQueryVariable(window.location.href, "tbs") if (!tbs || tbs.startsWith("qdr") || tbs.startsWith("li") || tbs.startsWith("cdr")) { - Common.setPageIsCorrect(true) - return + return true; } } - Common.setPageIsCorrect(false) + return false; } - /** - * @returns {Array} An array of all the organic results on the page - */ - function getOrganicResults() { - return Array.from(document.querySelectorAll("div[class='g']:not(.related-question-pair div[class='g'])")) + function getOrganicDetails(): OrganicDetail[] { + const organicResults = document.querySelectorAll("div[class='g']:not(.related-question-pair div[class='g'])"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + } + return organicDetails; + } + + function getOrganicLinkElements(): Element[][] { + const organicResults = document.querySelectorAll("div[class='g']:not(.related-question-pair div[class='g'])"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]:not(.exp-c *)'))); + } + return organicLinkElements; } /** * @returns {Array} An array of all the ad results on the page */ - function getAdResults() { + function getNumAdResults(): number { // gets all basic keyword ads const keywordAds = document.querySelectorAll("[aria-label='Ads'] > div") // gets all text tags on page that are "Ad" or "Ads" - const adTagElements = Common.getXPathElements("//*[(normalize-space(text()) = 'Ad' or normalize-space(text()) = 'Ads') and not(ancestor::*[@aria-label='Ads'])]/../../../../.."); + const adTagElements = Utils.getXPathElements("//*[(normalize-space(text()) = 'Ad' or normalize-space(text()) = 'Ads') and not(ancestor::*[@aria-label='Ads'])]/../../../../.."); // Creates a list from the non-keyword ads making sure that none of these non-keyword ads contain each other. // Is necessary because some ads on Google contain multiple ad tags @@ -55,89 +65,136 @@ import * as Common from "../common.js" } } - return Array.from(keywordAds).concat(nonKeywordAds) + return nonKeywordAds.length + keywordAds.length; } - /** - * Determine the height of the top of the search results area - */ - function determineSearchAreaTopHeight(): void { - const element = (document.querySelector("#top_nav") as HTMLElement) - Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)) + function getAdLinkElements(): Element[] { + // gets all basic keyword ads + const keywordAds = document.querySelectorAll("[aria-label='Ads'] > div") + + // gets all text tags on page that are "Ad" or "Ads" but not within an [aria-label='Ads'] element + const adTagElements = Utils.getXPathElements("//*[(normalize-space(text()) = 'Ad' or normalize-space(text()) = 'Ads') and not(ancestor::*[@aria-label='Ads'])]/../../../../.."); + + // Creates a list from the non-keyword ads making sure that none of these non-keyword ads contain each other. + // Is necessary because some ads on Google contain multiple ad tags + const nonKeywordAds: Element[] = [] + for (let i = 0; i < adTagElements.length; i++) { + let add = true + for (let j = i + 1; j < adTagElements.length; j++) { + if (adTagElements[i].contains(adTagElements[j]) || adTagElements[j].contains(adTagElements[i])) { + add = false + break; + } + } + if (add === true) { + nonKeywordAds.push(adTagElements[i]) + } + } + + const adLinkElements: Element[] = []; + const adResults = Array.from(keywordAds).concat(nonKeywordAds); + adResults.forEach(adResult => { + adLinkElements.push(...Array.from(adResult.querySelectorAll("[href]")).filter(hrefElement => { + return !Utils.getNormalizedUrl((hrefElement as any).href).includes("google.com/search"); + })); + }); + + return adLinkElements; } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaBottomHeight(): void { - let element = document.querySelector("#botstuff") as HTMLElement - if (element.offsetHeight !== 0) { - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) - return - } - - element = document.querySelector("#bottomads") as HTMLElement - if (element.offsetHeight !== 0) { - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) - return + function getSearchAreaTopHeight(): number { + try { + const element = (document.querySelector("#top_nav") as HTMLElement) + return element.offsetHeight + Utils.getElementTopHeight(element); + } catch (error) { + return null; } - element = document.querySelector("#res") as HTMLElement - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) } /** - * Determine the page number + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determinePageNum(): void { - const pageElement = Common.getXPathElement("//div[@role='navigation']//tbody/tr/td[normalize-space(text())]") - if (pageElement) { - Common.setPageNum(Number(pageElement.textContent)) - } else { - Common.setPageNum(-1) + function getSearchAreaBottomHeight(): number { + try { + let element = document.querySelector("#botstuff") as HTMLElement + if (element.offsetHeight !== 0) { + return element.offsetHeight + Utils.getElementTopHeight(element) + } + + element = document.querySelector("#bottomads") as HTMLElement + if (element.offsetHeight !== 0) { + return element.offsetHeight + Utils.getElementTopHeight(element); + } + + element = document.querySelector("#res") as HTMLElement + return element.offsetHeight + Utils.getElementTopHeight(element); + } catch (error) { + return null; } + } /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine + * Get the page number. */ - function isInternalLink(urlString: string): boolean { - try { - const url = new URL(urlString) - if (url.hostname.includes("google.com")) { - if (urlString.includes("google.com/url")) { - const newUrlString = Common.getQueryVariable(urlString, "url") - const newUrl = new URL(newUrlString) - return newUrl.hostname.includes("google.com") - } else if (urlString.includes("google.com/aclk")) { - return false + function getPageNum(): number { + const pageElement = Utils.getXPathElement("//div[@role='navigation']//tbody/tr/td[normalize-space(text())]") + return pageElement ? Number(pageElement.textContent) : -1; + } + + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches("#rcnt *, #appbar *, #atvcap *")) { + if (!target.matches("[role=navigation] *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const url = new URL(href); + if (url.hostname === window.location.hostname) { + if (url.pathname === "/url") { + const newUrlString = Utils.getQueryVariable(href, "url"); + const newUrl = new URL(newUrlString) + if (newUrl.hostname === window.location.hostname) { + return newUrlString; + } + } else if (url.pathname.includes("/aclk")) { + return null; + } else { + return href; + } + } + } else { + return ""; + } } else { - return true + return ""; } - } else { - return false } - } catch (error) { - return false } + return null; } /** * Determine all the page values and send the query to the background page */ function determinePageValues(): void { - determinePageIsCorrect(); - determinePageNum(); - determineSearchAreaTopHeight() - determineSearchAreaBottomHeight() - Common.determineOrganicElementsAndAddListeners(getOrganicResults()); - Common.determineAdElementsAndAddListeners(getAdResults()); - - Common.addInternalClickListeners( - "[role=navigation] *, div[class='g']:not(.related-question-pair div[class='g']) *", - isInternalLink, - document.querySelectorAll("#rcnt, #appbar, #atvcap")); + pageValues.pageIsCorrect = getPageIsCorrect(); + if (!pageValues.pageIsCorrect) return; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.numAdResults = getNumAdResults(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + pageValues.addInternalListeners(getInternalLink); } window.addEventListener("DOMContentLoaded", function () { @@ -146,12 +203,51 @@ import * as Common from "../common.js" window.addEventListener("load", function () { determinePageValues(); - Common.setPageLoaded(true) + pageValues.pageLoaded = true; }); - Common.initPageManagerListeners(); - Common.registerNewTabListener(); - Common.registerModule(moduleName) -})() + function onNewTab(url) { + if (!pageValues.mostRecentMousedown) { + return; + } + const normalizedUrl: string = Utils.getNormalizedUrl(url); + let redirectUrl = null; + if (normalizedUrl.includes("google.com/url")) { + redirectUrl = Utils.getQueryVariable(url, "url") + } + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { + if (normalizedUrl.includes("googleadservices.com/pagead") || + pageValues.mostRecentMousedown.href === url || + (redirectUrl && pageValues.mostRecentMousedown.href === redirectUrl)) { + pageValues.numAdClicks++; + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if (pageValues.mostRecentMousedown.href === url || + (redirectUrl && pageValues.mostRecentMousedown.href === redirectUrl)) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + } + return + } + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (pageValues.mostRecentMousedown.href === url || + (redirectUrl && (pageValues.mostRecentMousedown.href === redirectUrl || redirectUrl[0] === "/") || + normalizedUrl.includes("google.com/search"))) { + pageValues.numInternalClicks++; + } + return; + } + } + + webScience.pageManager.onPageVisitStart.addListener(() => { + pageValues.resetTracking(); + determinePageValues(); + }); + + webScience.pageManager.onPageVisitStop.addListener(({ timeStamp }) => { + pageValues.reportResults(timeStamp); + }); +}; -console.log("GOOGLE") \ No newline at end of file +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/yahoo.ts b/src/content-scripts/serp-scripts/yahoo.ts index 7cf5ec1..f87e21a 100644 --- a/src/content-scripts/serp-scripts/yahoo.ts +++ b/src/content-scripts/serp-scripts/yahoo.ts @@ -1,101 +1,134 @@ -import * as Common from "../common.js" +import { PageValues, ElementType } from "../common.js" +import * as Utils from "../Utils.js" +import { timing } from "@mozilla/web-science"; + /** * Content Scripts for Yahoo SERP */ - -(async function () { - const moduleName = "Yahoo" +const serpModule = function () { + const pageValues = new PageValues("Yahoo", onNewTab); /** - * Determine whether the page is a web search results page + * Get whether the page is a basic SERP page. */ - function determinePageIsCorrect(): void { - const url = new URL(window.location.href) - Common.setPageIsCorrect(url.hostname === "search.yahoo.com" || url.hostname === "www.search.yahoo.com") + function getPageIsCorrect(): boolean { + const url = new URL(window.location.href); + return url.hostname === "search.yahoo.com" || url.hostname === "www.search.yahoo.com"; } - /** - * @returns {Array} An array of all the organic results on the page - */ - function getOrganicResults() { - return Array.from(document.querySelectorAll("#web > .searchCenterMiddle > li > .algo")); + function getOrganicDetails(): OrganicDetail[] { + const organicResults = document.querySelectorAll("#web > .searchCenterMiddle > li > .algo"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + } + return organicDetails; + } + + function getOrganicLinkElements(): Element[][] { + const organicResults = document.querySelectorAll("#web > .searchCenterMiddle > li > .algo"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]'))); + } + return organicLinkElements; } /** * @returns {Array} An array of all the ad results on the page */ - function getAdResults() { - return Array.from(document.querySelectorAll("ol.searchCenterTopAds > li > .ads, ol.searchCenterBottomAds > li > .ads, ol.searchRightTopAds > li, ol.searchRightMiddleAds > li, ol.searchRightBottomAds > li")) + function getNumAdResults(): number { + return document.querySelectorAll("ol.searchCenterTopAds > li > .ads, ol.searchCenterBottomAds > li > .ads, ol.searchRightTopAds > li, ol.searchRightMiddleAds > li, ol.searchRightBottomAds > li").length; } - function getIsAdLinkElement(adLinkElement: Element): boolean { - return !!(adLinkElement as any).href && !adLinkElement.matches('.p-abs,.p-abs *') + function getAdLinkElements(): Element[] { + const adLinkElements: Element[] = []; + + adLinkElements.push(...document.querySelectorAll("ol.searchCenterTopAds > li > .ads > div:not(.rs-section), ol.searchCenterBottomAds > li > .ads > div:not(.rs-section)")); + + document.querySelectorAll("ol.searchRightTopAds > li, ol.searchRightMiddleAds > li, ol.searchRightBottomAds > li").forEach(adElement => { + adLinkElements.push(...adElement.querySelectorAll('[href]:not(.p-abs,.p-abs *, .rs-section, .rs-section *)')); + }); + + return adLinkElements; } /** - * Determine the height of the top of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaTopHeight(): void { - const element = (document.querySelector("#ys") as HTMLElement) - Common.setSearchAreaTopHeight(element.offsetHeight + Common.getElementTopHeight(element)) + function getSearchAreaTopHeight(): number { + try { + const element = (document.querySelector("#ys") as HTMLElement) + return element.offsetHeight + Utils.getElementTopHeight(element); + } catch (error) { + return null; + } } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determineSearchAreaBottomHeight(): void { - const element = (document.querySelector("#main") as HTMLElement) - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) + function getSearchAreaBottomHeight(): number { + try { + const element = (document.querySelector("#main") as HTMLElement) + return element.offsetHeight + Utils.getElementTopHeight(element); + } catch (error) { + return null; + } } /** - * Determine the page number + * Get the page number. */ - function determinePageNum(): void { + function getPageNum(): number { const pageElement = document.querySelector(".pages strong") if (pageElement) { - Common.setPageNum(Number(pageElement.textContent)) + return Number(pageElement.textContent) } else { - Common.setPageNum(-1) + return -1; } } - - /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine - */ - function isInternalLink(urlString: string): boolean { - try { - const url = new URL(urlString) - if (url.hostname.includes("yahoo.com")) { - return true - } else { - return false + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches("#bd *")) { + if (!target.matches(".pagination *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const url = new URL(href); + if (url.hostname === window.location.hostname) { + return href; + } + } else { + return ""; + } + } else { + return ""; + } } - } catch (error) { - return false } + return null; } /** * Determine all the page values and send the query to the background page */ function determinePageValues(): void { - determinePageIsCorrect(); - determinePageNum(); - - determineSearchAreaTopHeight() - determineSearchAreaBottomHeight() - - Common.determineOrganicElementsAndAddListeners(getOrganicResults()); - Common.determineAdElementsAndAddListeners(getAdResults(), getIsAdLinkElement); - - Common.addInternalClickListeners( - ".pagination *, #web > .searchCenterMiddle > li > .algo *, ol.searchCenterTopAds > li > .ads *, ol.searchCenterBottomAds > li > .ads *, ol.searchRightTopAds > li *, ol.searchRightMiddleAds > li *, ol.searchRightBottomAds > li *", - isInternalLink, - document.querySelectorAll("#bd")); + pageValues.pageIsCorrect = getPageIsCorrect(); + if (!pageValues.pageIsCorrect) return; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.numAdResults = getNumAdResults(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + pageValues.addInternalListeners(getInternalLink); } window.addEventListener("DOMContentLoaded", function () { @@ -104,10 +137,37 @@ import * as Common from "../common.js" window.addEventListener("load", function () { determinePageValues(); - Common.setPageLoaded(true) + pageValues.pageLoaded = true; + }); + + function onNewTab(url) { + if (!pageValues.mostRecentMousedown) { + return; + } + const normalizedUrl: string = Utils.getNormalizedUrl(url); + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { + if (normalizedUrl.includes("r.search.yahoo.com/cbclk2") || pageValues.mostRecentMousedown.href === url) { + pageValues.numAdClicks++; + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if (pageValues.mostRecentMousedown.href === url) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (pageValues.mostRecentMousedown.href === url) { + pageValues.numInternalClicks++; + } + return; + } + } + + window.addEventListener("unload", (event) => { + pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); +}; - Common.initPageManagerListeners(); - Common.registerNewTabListener(); - Common.registerModule(moduleName) -})() \ No newline at end of file +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file diff --git a/src/content-scripts/serp-scripts/yandex.ts b/src/content-scripts/serp-scripts/yandex.ts index 1ac3909..f6016ff 100644 --- a/src/content-scripts/serp-scripts/yandex.ts +++ b/src/content-scripts/serp-scripts/yandex.ts @@ -1,111 +1,169 @@ -import * as Common from "../common.js" +import { PageValues, ElementType } from "../common.js" +import * as Utils from "../Utils.js" +import { timing } from "@mozilla/web-science"; /** * Content Scripts for Yandex SERP */ - -(async function () { - const moduleName = "Yandex" +const serpModule = function () { + const pageValues = new PageValues("Yandex", onNewTab); /** - * Determine whether the page is a web search results page + * Get whether the page is a basic SERP page. */ - function determinePageIsCorrect(): void { + function getPageIsCorrect(): boolean { const url = new URL(window.location.href) - Common.setPageIsCorrect(!url.pathname.includes("direct")) + return !url.pathname.includes("direct") } - /** - * @returns {Array} An array of all the organic results on the page - */ - function getOrganicResults() { - return Common.getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]") + function getOrganicDetails(): OrganicDetail[] { + const organicResults = Utils.getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]"); + const organicDetails: OrganicDetail[] = [] + for (const organicResult of organicResults) { + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + } + return organicDetails; + } + + function getOrganicLinkElements(): Element[][] { + const organicResults = Utils.getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]"); + const organicLinkElements: Element[][] = [] + for (const organicResult of organicResults) { + organicLinkElements.push(Array.from(organicResult.querySelectorAll('[href]'))); + } + return organicLinkElements; } /** * @returns {Array} An array of all the ad results on the page */ - function getAdResults() { - return Common.getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]"); + function getNumAdResults(): number { + return Utils.getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]").length; } - /** - * Determine the height of the top of the search results area - */ - function determineSearchAreaTopHeight(): void { - Common.setSearchAreaTopHeight((document.querySelector(".serp-header") as HTMLElement).offsetHeight + (document.querySelector(".navigation") as HTMLElement).offsetHeight) + function getAdLinkElements(): Element[] { + const adLinkElements: Element[] = []; + const adElements = Utils.getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]"); + adElements.forEach(adElement => { + adLinkElements.push(...adElement.querySelectorAll("[href]")); + }); + return adLinkElements; } /** - * Determine the height of the bottom of the search results area + * Get the number of pixels between the top of the page and the top of the search area. */ - function determineSearchAreaBottomHeight(): void { - const contentElements = document.querySelectorAll(".main__content .content__left > *:not([class*='pager'])") - const element = contentElements[contentElements.length - 1] as HTMLElement - Common.setSearchAreaBottomHeight(element.offsetHeight + Common.getElementTopHeight(element)) + function getSearchAreaTopHeight(): number { + try { + return (document.querySelector(".serp-header") as HTMLElement).offsetHeight + (document.querySelector(".navigation") as HTMLElement).offsetHeight; + } catch (error) { + return null; + } } /** - * Determine the page number + * Get the number of pixels between the top of the page and the bottom of the search area. */ - function determinePageNum(): void { - const url = webScience.pageManager.url - const pageNumberFromUrl = Common.getQueryVariable(url, "p"); - if (pageNumberFromUrl) { - Common.setPageNum(Number(pageNumberFromUrl) + 1) - } else { - Common.setPageNum(1) + function getSearchAreaBottomHeight(): number { + try { + const contentElements = document.querySelectorAll(".main__content .content__left > *:not([class*='pager'])") + const element = contentElements[contentElements.length - 1] as HTMLElement + return element.offsetHeight + Utils.getElementTopHeight(element) + } catch (error) { + return null; } + } /** - * @param {string} urlString - A url - * @returns {boolean} Whether the url links to another page on the search engine + * Get the page number. */ - function isInternalLink(urlString: string): boolean { - try { - const url = new URL(urlString) - if (url.hostname.includes("yandex.ru") || url.hostname.includes("yandex.com")) { - return true - } else { - return false + function getPageNum(): number { + const pageNumFromUrl = Utils.getQueryVariable(window.location.href, "p"); + return pageNumFromUrl ? Number(pageNumFromUrl) + 1 : 1; + } + + // Returns the href if it is an internal link + // Returns empty string if the click was in the search area but there was no link + // Returns null otherwise + function getInternalLink(target: Element): string { + if (target.matches(".main *")) { + if (!target.matches(".pager *")) { + const hrefElement = target.closest("[href]"); + if (hrefElement) { + const href = (hrefElement as any).href; + if (Utils.isLinkToDifferentPage(href)) { + const url = new URL(href); + if (url.hostname.includes("yandex.ru") || url.hostname.includes("yandex.com")) { + if (!url.hostname.includes("yabs.yandex")) { + return href; + } + } + } else { + return ""; + } + } else { + return ""; + } } - } catch (error) { - return false } + return null; } /** * Determine all the page values and send the query to the background page */ function determinePageValues(): void { - determinePageIsCorrect(); - determinePageNum(); - - determineSearchAreaTopHeight() - determineSearchAreaBottomHeight() - - Common.determineOrganicElementsAndAddListeners(getOrganicResults()); - Common.determineAdElementsAndAddListeners(getAdResults()); - - Common.addInternalClickListeners( - ".pager *, .serp-item > .organic *", - isInternalLink, - document.querySelectorAll(".main")); + pageValues.pageIsCorrect = getPageIsCorrect(); + if (!pageValues.pageIsCorrect) return; + pageValues.pageNum = getPageNum(); + pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); + pageValues.searchAreaTopHeight = getSearchAreaTopHeight(); + pageValues.numAdResults = getNumAdResults(); + pageValues.organicResults = getOrganicDetails(); + pageValues.addAdListeners(getAdLinkElements()); + pageValues.addOrganicListeners(getOrganicLinkElements()); + pageValues.addInternalListeners(getInternalLink); } window.addEventListener("DOMContentLoaded", function () { - console.log("DOMContentLoaded") determinePageValues(); }); window.addEventListener("load", function () { determinePageValues(); - Common.setPageLoaded(true) + pageValues.pageLoaded = true; }); - window.addEventListener("unload", Common.pageVisitEndListener); + function onNewTab(url) { + if (!pageValues.mostRecentMousedown) { + return; + } + const normalizedUrl: string = Utils.getNormalizedUrl(url); + const normalizedRecentUrl: string = Utils.getNormalizedUrl(pageValues.mostRecentMousedown.href) + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { + if (normalizedUrl.includes("yabs.yandex.ru") || + normalizedUrl === normalizedRecentUrl) { + pageValues.numAdClicks++; + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Organic) { + if (normalizedRecentUrl === normalizedUrl) { + pageValues.organicClicks.push({ Ranking: pageValues.mostRecentMousedown.index, AttentionDuration: pageValues.getAttentionDuration(), PageLoaded: pageValues.pageLoaded }) + } + return; + } + if (pageValues.mostRecentMousedown.type === ElementType.Internal) { + if (normalizedRecentUrl === normalizedUrl) { + pageValues.numInternalClicks++; + } + return; + } + } + + window.addEventListener("unload", (event) => { + pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); + }); +}; - Common.initPageManagerListeners(false); - Common.registerNewTabListener(); - Common.registerModule(moduleName) -})() \ No newline at end of file +Utils.waitForPageManagerLoad(serpModule) \ No newline at end of file From 9165cc3d1e039b638b5d6d4d9388ea3f6d2e70c1 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 22 Jun 2021 14:12:35 -0400 Subject: [PATCH 170/399] Getting attribution data upon each serp visit data message to background and sending onCreatedNavigationTarget message to content scripts --- src/AttributionTracking.ts | 4 ++++ src/SerpVisitCollection.ts | 44 ++++++++++++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/AttributionTracking.ts b/src/AttributionTracking.ts index 2213067..3981e80 100755 --- a/src/AttributionTracking.ts +++ b/src/AttributionTracking.ts @@ -26,6 +26,10 @@ const tabHistoryPageIds: { } } = {}; +export function getAttributionForPageId(pageId: string) { + return pageId ? pageIdToAttributionData[pageId] : null; +} + /** * Initializes tracking of attribution details for page visits. */ diff --git a/src/SerpVisitCollection.ts b/src/SerpVisitCollection.ts index 90edb30..bbd40ab 100755 --- a/src/SerpVisitCollection.ts +++ b/src/SerpVisitCollection.ts @@ -1,5 +1,6 @@ import * as webScience from "@mozilla/web-science"; import { serpScripts } from "./content-scripts-import.js" +import * as AttributionTracking from "./AttributionTracking.js" /** * Start SERP visit collection @@ -11,10 +12,22 @@ export async function start(): Promise { } /** - * Register the SERP content scripts + * Register the SERP content scripts and the messaging to tabs for onCreatedNavigationTarget + * so that a content script can know if a link was opened in a new tab from its page * @async */ async function registerContentScripts() { + webScience.messaging.registerSchema("CreatedNavigationTargetMessage", { + details: "object" + }); + + browser.webNavigation.onCreatedNavigationTarget.addListener((details) => { + webScience.messaging.sendMessageToTab(details.sourceTabId, { + type: "CreatedNavigationTargetMessage", + details + }); + }); + for (const serpScript of serpScripts) { if (!serpScript.enabled) { continue; @@ -24,17 +37,40 @@ async function registerContentScripts() { } } +async function reportSerpVisitData(pageVisitData): Promise { + const attributionDetails = AttributionTracking.getAttributionForPageId(pageVisitData.pageId); + const attributionDetailsEngineMatches = attributionDetails && attributionDetails.engine === pageVisitData.searchEngine; + const data = { + SearchEngine: pageVisitData.searchEngine, + AttentionDuration: pageVisitData.attentionDuration, + PageNum: pageVisitData.pageNum, + Attribution: attributionDetailsEngineMatches ? attributionDetails.attribution : null, + AttributionID: attributionDetailsEngineMatches ? attributionDetails.attributionID : null, + Transition: attributionDetailsEngineMatches ? attributionDetails.transition : null, + OrganicDetails: pageVisitData.organicDetails, + OrganicClicks: pageVisitData.organicClicks, + NumAdResults: pageVisitData.numAdResults, + NumAdClicks: pageVisitData.numAdClicks, + NumInternalClicks: pageVisitData.numInternalClicks, + SearchAreaTopHeight: pageVisitData.searchAreaTopHeight, + SearchAreaBottomHeight: pageVisitData.searchAreaBottomHeight, + Time: pageVisitData.searchEngine, + TimeOffset: pageVisitData.searchEngine, + } + console.log(data); +} + /** * Registers the listener that gets SERP visit data from content scripts */ function registerSerpVisitDataListener(): void { // Listen for new SERP visit data from content scripts webScience.messaging.onMessage.addListener((message) => { - console.log(message); + reportSerpVisitData(message.data); }, { type: "SerpVisitData", schema: { - data: "object", + data: "object" } }); -} \ No newline at end of file +} From 595417305a2aa5aeae34a892f3e9e545f540c3bb Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 22 Jun 2021 14:15:41 -0400 Subject: [PATCH 171/399] renamed attentionTime to attentionDuration throughout project --- pages/js/choice_screen.js | 12 ++++++------ pages/js/notice.js | 14 +++++++------- schemas/choice_screen.schema.json | 2 +- schemas/notice.schema.json | 2 +- schemas/serp_visit.schema.json | 6 +++--- src/Intervention.ts | 12 ++++++------ 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pages/js/choice_screen.js b/pages/js/choice_screen.js index b4c2125..ffddd34 100644 --- a/pages/js/choice_screen.js +++ b/pages/js/choice_screen.js @@ -1,17 +1,17 @@ window.addEventListener("DOMContentLoaded", async function () { - let totalAttentionTime = 0; + let totalAttentionDuration = 0; let previousAttentionStart = 0; let pageHasAttention = false; if(!document.hidden) { pageHasAttention = true; previousAttentionStart = performance.now() } - function getAttentionTime() { + function getAttentionDuration() { if(pageHasAttention) { - return totalAttentionTime + (performance.now() - previousAttentionStart); + return totalAttentionDuration + (performance.now() - previousAttentionStart); } else { - return totalAttentionTime; + return totalAttentionDuration; } } @@ -21,7 +21,7 @@ window.addEventListener("DOMContentLoaded", async function () { if(pageHasAttention) { previousAttentionStart = performance.now() } else { - totalAttentionTime = totalAttentionTime + (performance.now() - previousAttentionStart) + totalAttentionDuration = totalAttentionDuration + (performance.now() - previousAttentionStart) } } }); @@ -87,7 +87,7 @@ window.addEventListener("DOMContentLoaded", async function () { document.querySelector(".continue").addEventListener("click", async () => { const selected_engine = document.querySelector("input[name=engine-select]:checked").value - await browser.runtime.sendMessage({ type: "ChoiceScreenResponse", engine: selected_engine, engines_ordering, see_more_clicked, attentionTime: getAttentionTime(), details_expanded: Array.from(details_expanded_set) }); + await browser.runtime.sendMessage({ type: "ChoiceScreenResponse", engine: selected_engine, engines_ordering, see_more_clicked, attentionDuration: getAttentionDuration(), details_expanded: Array.from(details_expanded_set) }); window.close(); }); diff --git a/pages/js/notice.js b/pages/js/notice.js index 0059864..6a2319e 100644 --- a/pages/js/notice.js +++ b/pages/js/notice.js @@ -6,19 +6,19 @@ const engineDetails = { } window.addEventListener("DOMContentLoaded", function () { - let totalAttentionTime = 0; + let totalAttentionDuration = 0; let previousAttentionStart = 0; let pageHasAttention = false; if(!document.hidden) { pageHasAttention = true; previousAttentionStart = performance.now() } - function getAttentionTime() { + function getAttentionDuration() { if(pageHasAttention) { - return totalAttentionTime + (performance.now() - previousAttentionStart); + return totalAttentionDuration + (performance.now() - previousAttentionStart); } else { - return totalAttentionTime; + return totalAttentionDuration; } } @@ -28,7 +28,7 @@ window.addEventListener("DOMContentLoaded", function () { if(pageHasAttention) { previousAttentionStart = performance.now() } else { - totalAttentionTime = totalAttentionTime + (performance.now() - previousAttentionStart) + totalAttentionDuration = totalAttentionDuration + (performance.now() - previousAttentionStart) } } }); @@ -69,7 +69,7 @@ window.addEventListener("DOMContentLoaded", function () { console.error(`Error: ${error}`); }); - window.addEventListener("unload", (_event) => { - browser.runtime.sendMessage({ type: "NoticeResponse", revert: revert, attentionTime: getAttentionTime() }); + window.addEventListener("unload", () => { + browser.runtime.sendMessage({ type: "NoticeResponse", revert: revert, attentionDuration: getAttentionDuration() }); }); }); diff --git a/schemas/choice_screen.schema.json b/schemas/choice_screen.schema.json index f693ff4..8887662 100644 --- a/schemas/choice_screen.schema.json +++ b/schemas/choice_screen.schema.json @@ -3,7 +3,7 @@ "type": "object", "additionalProperties": false, "properties": { - "AttentionTime": { + "AttentionDuration": { "type": "number" }, "OriginalEngine": { diff --git a/schemas/notice.schema.json b/schemas/notice.schema.json index 6cee481..f945c22 100644 --- a/schemas/notice.schema.json +++ b/schemas/notice.schema.json @@ -3,7 +3,7 @@ "type": "object", "additionalProperties": false, "properties": { - "AttentionTime": { + "AttentionDuration": { "type": "number" }, "RevertSelected": { diff --git a/schemas/serp_visit.schema.json b/schemas/serp_visit.schema.json index 75a3029..4af0bca 100644 --- a/schemas/serp_visit.schema.json +++ b/schemas/serp_visit.schema.json @@ -6,7 +6,7 @@ "SearchEngine": { "type": "string" }, - "AttentionTime": { + "AttentionDuration": { "type": "number" }, "PageNum": { @@ -39,7 +39,7 @@ } } }, - "SelectedOrganicDetails": { + "OrganicClicks": { "type": "array", "items": { "type": "object", @@ -48,7 +48,7 @@ "Ranking": { "type": "number" }, - "AttentionTime": { + "AttentionDuration": { "type": "number" }, "Loaded": { diff --git a/src/Intervention.ts b/src/Intervention.ts index 6c75485..6d3c52e 100755 --- a/src/Intervention.ts +++ b/src/Intervention.ts @@ -79,7 +79,7 @@ async function noticeIntervention(noticeType: number) { const noticeShown = await storage.get("NoticeShown"); if (noticeShown) { const noticeInterventionData = { - AttentionTime: null, + AttentionDuration: null, RevertSelected: null, OriginalEngine: await storage.get("EngineChangedFrom"), NewEngine: await storage.get("EngineChangedTo"), @@ -135,7 +135,7 @@ async function noticeIntervention(noticeType: number) { } const noticeInterventionData = { - AttentionTime: message.attentionTime, + AttentionDuration: message.attentionDuration, RevertSelected: message.revert, OriginalEngine: originalEngine, NewEngine: newEngine, @@ -147,7 +147,7 @@ async function noticeIntervention(noticeType: number) { }, { type: "NoticeResponse", schema: { - attentionTime: "number", + attentionDuration: "number", revert: "boolean" } }); @@ -180,7 +180,7 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { let choiceScreenAttempts = choiceScreenAttemptsCounter.get(); if (choiceScreenAttempts >= 3) { const choiceScreenInterventionData = { - AttentionTime: null, + AttentionDuration: null, OriginalEngine: await Utils.getSearchEngine(), SelectedEngine: null, SeeMoreSelected: null, @@ -242,7 +242,7 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { } const choiceScreenInterventionData = { - AttentionTime: message.attentionTime, + AttentionDuration: message.attentionDuration, OriginalEngine: originalEngine, SelectedEngine: message.engine, SeeMoreSelected: message.see_more_clicked, @@ -258,7 +258,7 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { type: "ChoiceScreenResponse", schema: { engine: "string", - attentionTime: "number", + attentionDuration: "number", see_more_clicked: "boolean", engines_ordering: "object", details_expanded: "object", From a7bef867f69daec52106a8de16d5d4fdc6d3a502 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 22 Jun 2021 14:16:32 -0400 Subject: [PATCH 172/399] Setting preventAssignment to true in call to @rollup/plugin-replace --- rollup.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/rollup.config.js b/rollup.config.js index ce8de49..76d36a0 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -35,6 +35,7 @@ export default (cliArgs) => { }, plugins: [ replace({ + preventAssignment: true, // In Developer Mode, the study does not submit data and // gracefully handles communication errors with the Core // Add-on. From f46655b80b4eabc2be6acff9735fb92305d46c87 Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 22 Jun 2021 15:36:18 -0400 Subject: [PATCH 173/399] Slight documentation changes and refactoring --- src/AttributionTracking.ts | 17 +- src/InitialCollection.ts | 11 +- src/Intervention.ts | 36 +- src/Modal.ts | 15 +- src/PostIntervention.ts | 9 +- src/Privileged.ts | 57 +++ ...ailyCollection.ts => RegularCollection.ts} | 41 ++- src/SearchEngineUtils.ts | 317 ----------------- src/SerpVisitCollection.ts | 5 + src/StudyModule.ts | 17 +- src/Survey.ts | 6 + src/TestLogging.ts | 7 + src/Utils.ts | 336 ++++++++++++++++-- src/content-scripts-import.ts | 3 - 14 files changed, 468 insertions(+), 409 deletions(-) create mode 100755 src/Privileged.ts rename src/{DailyCollection.ts => RegularCollection.ts} (71%) delete mode 100755 src/SearchEngineUtils.ts diff --git a/src/AttributionTracking.ts b/src/AttributionTracking.ts index 3981e80..ecea73f 100755 --- a/src/AttributionTracking.ts +++ b/src/AttributionTracking.ts @@ -1,16 +1,23 @@ +/** + * This module enables tracking attribution information for search engine page visits. + */ + import * as webScience from "@mozilla/web-science"; -import * as SearchEngineUtils from "./SearchEngineUtils.js" +import * as Utils from "./Utils.js" /** - * @type {Object} - * An object that maps page IDs to attribution details. + * @type {Object} An object that maps page IDs to attribution details. */ const pageIdToAttributionData: { [pageId: string]: { + // How the participant originally navigated to the search engine attribution: string; + // An ID common to all page visits that can be attributed to the same navigation attributionID: string; + // The engine that the page is of engine: string; + // The transition that brought participant to this page transition: string; } } = {}; @@ -34,14 +41,14 @@ export function getAttributionForPageId(pageId: string) { * Initializes tracking of attribution details for page visits. */ export function initializeAttributionTracking(): void { - const allEngineMatchPatterns = SearchEngineUtils.getTrackedEnginesMatchPatterns() + const allEngineMatchPatterns = Utils.getTrackedEnginesMatchPatterns() webScience.pageTransition.onPageTransitionData.addListener(pageTransitionDataEvent => { const pageUrl = pageTransitionDataEvent.url; const pageId = pageTransitionDataEvent.pageId; // Gets the engine of the page from the url. If the url is not for one of the tracked engines, // we do not need to track attribution information for the page. - const engine = SearchEngineUtils.getEngineFromURL(pageTransitionDataEvent.url); + const engine = Utils.getEngineFromURL(pageTransitionDataEvent.url); if (!engine) { return; } diff --git a/src/InitialCollection.ts b/src/InitialCollection.ts index 3141fd4..c52035e 100755 --- a/src/InitialCollection.ts +++ b/src/InitialCollection.ts @@ -1,6 +1,11 @@ +/** + * This module enables collection of data that will occur once upon + * initial startup of the study. + */ + import * as webScience from "@mozilla/web-science"; +import * as Privileged from "./Privileged.js" import * as Utils from "./Utils.js" -import * as SearchEngineUtils from "./SearchEngineUtils.js" /** * Run initial collection @@ -10,8 +15,8 @@ export async function run(storage) { const date30DaysAgo = (new Date(new Date().setDate(new Date().getDate() - 30))).valueOf(); const initialData = { SurveyId: await webScience.userSurvey.getSurveyId(), - Engine: await Utils.getSearchEngine(), - HistoryQueries: await SearchEngineUtils.getHistoryData(date30DaysAgo), + Engine: await Privileged.getSearchEngine(), + HistoryQueries: await Utils.getHistoryData(date30DaysAgo), Time: Date.now(), TimeOffset: new Date().getTimezoneOffset() }; diff --git a/src/Intervention.ts b/src/Intervention.ts index 6d3c52e..af760cb 100755 --- a/src/Intervention.ts +++ b/src/Intervention.ts @@ -1,7 +1,13 @@ +/** + * This module enables selecting an intervention group for the participant + * and conducting the respective intervention. This does not, however, conduct the + * second stage of modal interventions (the popping up of a modal dialog) + */ + import * as webScience from "@mozilla/web-science"; -import * as Utils from "./Utils.js" +import * as Privileged from "./Privileged.js" import * as PostIntervention from "./PostIntervention.js" -import * as SearchEngineUtils from "./SearchEngineUtils.js" +import * as Utils from "./Utils.js" /** * @type {Object} @@ -91,9 +97,9 @@ async function noticeIntervention(noticeType: number) { } // Determine the participant's original search engine and homepage - const originalEngine = await Utils.getSearchEngine(); - const originalHomepage = await Utils.getHomepage(); - const originalHomepageEngine = SearchEngineUtils.getEngineFromURL(originalHomepage); + const originalEngine = await Privileged.getSearchEngine(); + const originalHomepage = await Privileged.getHomepage(); + const originalHomepageEngine = Utils.getEngineFromURL(originalHomepage); // Creates a list of options for a new default search engine (excluding the participant's current default) let newSearchEngineOptions = ["Google", "DuckDuckGo", "Yahoo", "Bing"]; @@ -105,12 +111,12 @@ async function noticeIntervention(noticeType: number) { // Change the participant's default engine to a random selection from the list of options for a new default const newEngine = newSearchEngineOptions[Math.floor(Math.random() * newSearchEngineOptions.length)]; - Utils.changeSearchEngine(newEngine); + Privileged.changeSearchEngine(newEngine); // If the current home page is a search engine page, change it to the default Firefox homepage let homepageChanged = false; if (originalHomepageEngine) { - Utils.changeHomepage("about:home"); + Privileged.changeHomepage("about:home"); homepageChanged = true; } @@ -130,8 +136,8 @@ async function noticeIntervention(noticeType: number) { webScience.messaging.onMessage.addListener((message) => { // If the participant clicked on the button to revert the change, we restore their original default search engine and homepage if (message.revert) { - Utils.changeHomepage(originalHomepage); - Utils.changeSearchEngine(originalEngine); + Privileged.changeHomepage(originalHomepage); + Privileged.changeSearchEngine(originalEngine); } const noticeInterventionData = { @@ -181,7 +187,7 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { if (choiceScreenAttempts >= 3) { const choiceScreenInterventionData = { AttentionDuration: null, - OriginalEngine: await Utils.getSearchEngine(), + OriginalEngine: await Privileged.getSearchEngine(), SelectedEngine: null, SeeMoreSelected: null, Ordering: null, @@ -199,9 +205,9 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { choiceScreenAttempts = await choiceScreenAttemptsCounter.incrementAndGet(); // Determine the participant's original search engine and homepage - const originalEngine = await Utils.getSearchEngine(); - const originalHomepage = await Utils.getHomepage(); - const originalHomepageEngine = SearchEngineUtils.getEngineFromURL(originalHomepage); + const originalEngine = await Privileged.getSearchEngine(); + const originalHomepage = await Privileged.getHomepage(); + const originalHomepageEngine = Utils.getEngineFromURL(originalHomepage); // If the choice screen has previously been displayed, get the order the search engines // were displayed in. @@ -234,11 +240,11 @@ async function choiceScreenIntervention(choiceScreenDesign: number) { storage.set("EngineChangedTo", message.engine); // Modify the participant's default search engine to their choice screen response - Utils.changeSearchEngine(message.engine); + Privileged.changeSearchEngine(message.engine); // If the current home page is a search engine page, change it to the default Firefox homepage if (originalHomepageEngine) { - Utils.changeHomepage("about:home"); + Privileged.changeHomepage("about:home"); } const choiceScreenInterventionData = { diff --git a/src/Modal.ts b/src/Modal.ts index 3f6d9b9..39755e6 100755 --- a/src/Modal.ts +++ b/src/Modal.ts @@ -1,4 +1,11 @@ -import * as Utils from "./Utils.js" +/** + * This module provides functionality for conducting the second stage of modal interventions. + * The first stage of the modal intervention is the choice screen shown to the user. + * The second stage is the modal dialog that is displayed upon a generated search + * with the newly selected engine from the choice screen. + */ + +import * as Privileged from "./Privileged.js" import * as webScience from "@mozilla/web-science"; /** @@ -34,7 +41,7 @@ let modalPrimaryRevert; async function listener(details) { // The modal dialog should be displayed on a generated search if the current engine is the same // as the engine that the participant selected on the choice screen. - const currentEngine = await Utils.getSearchEngine(); + const currentEngine = await Privileged.getSearchEngine(); if (details.transitionType === "generated" && currentEngine === engineChangedTo) { // Gets the number of times the modal dialog has been displayed const modalAttemptsCounter = await webScience.storage.createCounter("ModalAttempts"); @@ -50,7 +57,7 @@ async function listener(details) { // If the participant chooses to revert, then change their search engine back to the engine that the choice screen // stage of the intervention changed it from. if (revertChosen) { - Utils.changeSearchEngine(engineChangedFrom); + Privileged.changeSearchEngine(engineChangedFrom); } // Set the completion status of the modal intervention to true. @@ -66,7 +73,7 @@ async function listener(details) { } /** - * Start modal intervention functionality + * Start modal dialog functionality * @async * @param {Object} storage - A persistent key-value storage object for the study **/ diff --git a/src/PostIntervention.ts b/src/PostIntervention.ts index a690277..d2b556a 100755 --- a/src/PostIntervention.ts +++ b/src/PostIntervention.ts @@ -1,7 +1,12 @@ +/** + * This module enables starting all functionality that should occur after + * Intervention module functionality has been completed + */ + import * as Modal from "./Modal.js" import * as Survey from "./Survey.js" import * as SerpVisitCollection from "./SerpVisitCollection.js" -import * as DailyCollection from "./DailyCollection.js" +import * as RegularCollection from "./RegularCollection.js" /** * Start post-intervention collection @@ -11,5 +16,5 @@ export async function start(storage) { Modal.start(storage); Survey.start(storage); SerpVisitCollection.start(); - DailyCollection.start(storage); + RegularCollection.start(storage); } \ No newline at end of file diff --git a/src/Privileged.ts b/src/Privileged.ts new file mode 100755 index 0000000..2396901 --- /dev/null +++ b/src/Privileged.ts @@ -0,0 +1,57 @@ +/** + * This module provides access to privileged functionality for getting/setting + * the browser's default search engine and homepage. + */ + +/** + * @async + * @return {Promise} The name of the current default search engine. + */ +export async function getSearchEngine(): Promise { + try { + return await browser.experimental.getSearchEngine(); + } catch (error) { + console.error(error); + return ""; + } +} + +/** + * @async + * @return {Promise} The url of the current homepage. + */ +export async function getHomepage(): Promise { + try { + return await browser.experimental.getHomepage(); + } catch (error) { + console.error(error); + return ""; + } +} + +/** + * Changes the current default search engine. + * @async + * @param {string} searchEngine - the search engine that the default will be changed to. + * Should be either Google, DuckDuckGo, Yahoo, Bing, Ecosia, Yandex, Baidu, or Ask + */ +export async function changeSearchEngine(searchEngine: string): Promise { + try { + await browser.experimental.changeSearchEngine(searchEngine); + } catch (error) { + console.error(error); + } +} + +/** + * Changes the current homepage. + * @async + * @param {string} homepage - the url that the homepage should be changed to. + */ +export async function changeHomepage(homepage: string): Promise { + try { + await browser.experimental.changeHomepage(homepage); + } catch (error) { + console.error(error); + } +} \ No newline at end of file diff --git a/src/DailyCollection.ts b/src/RegularCollection.ts similarity index 71% rename from src/DailyCollection.ts rename to src/RegularCollection.ts index b01430a..957ffab 100755 --- a/src/DailyCollection.ts +++ b/src/RegularCollection.ts @@ -1,6 +1,11 @@ +/** + * This module enables regular collection of the participant's default search engine + * and the number of unique queries made to search engines. + */ + import * as webScience from "@mozilla/web-science"; +import * as Privileged from "./Privileged.js" import * as Utils from "./Utils.js" -import * as SearchEngineUtils from "./SearchEngineUtils.js" /** * @type {Array} @@ -22,39 +27,39 @@ let storage; /** * @type {number} - * The milliseconds since epoch when daily collection started. + * The timestamp when regular reporting started */ -let initialDailyCollectionStartTime; +let initialRegularCollectionStartTime; /** - * Start daily collection + * Start regular collection * @async **/ export async function start(storageIn: any): Promise { storage = storageIn; - // Get the initial start time of daily collection from storage. - // If the value does not exist in storage, then this is the the intiial start time - // of daily collection and we set the value in storage - initialDailyCollectionStartTime = await storage.get("InitialDailyCollectionStartTime"); - if (!initialDailyCollectionStartTime) { - initialDailyCollectionStartTime = Date.now(); - storage.set("InitialDailyCollectionStartTime", initialDailyCollectionStartTime); + // Get the initial start time of regular collection from storage. + // If the value does not exist in storage, then this is the the initial start time + // of regular collection and we set the value in storage + initialRegularCollectionStartTime = await storage.get("InitialRegularCollectionStartTime"); + if (!initialRegularCollectionStartTime) { + initialRegularCollectionStartTime = Date.now(); + storage.set("InitialRegularCollectionStartTime", initialRegularCollectionStartTime); } await initializeQueryTracking(); - webScience.scheduling.onIdleDaily.addListener(reportDailyData); + webScience.scheduling.onIdleDaily.addListener(reportRegularData); } /** * Callback for onIdleDaily. - * Reports daily collection data. + * Reports regular collection data. * Not spawning off worker because we are not doing significant data aggregation. * @async */ -async function reportDailyData() { +async function reportRegularData() { // Create object mapping each engine to the number of unique queries made to that engine - // since the start of daily collection. + // since the start of regular collection. const searchEngineToNumQueries: Array<{ SearchEngine: string, Queries: number }> = []; for (const searchEngine of searchEngines) { searchEngineToNumQueries.push({ @@ -64,9 +69,9 @@ async function reportDailyData() { } const regularTelemetrySubmission = { - CurrentEngine: await Utils.getSearchEngine(), + CurrentEngine: await Privileged.getSearchEngine(), SerpVisitQueries: searchEngineToNumQueries, - HistoryQueries: await SearchEngineUtils.getHistoryData(initialDailyCollectionStartTime), + HistoryQueries: await Utils.getHistoryData(initialRegularCollectionStartTime), Time: Date.now(), TimeOffset: new Date().getTimezoneOffset(), }; @@ -93,7 +98,7 @@ async function initializeQueryTracking(): Promise { // if the page is a SERP for one of the tracked engines. Add the query to the set of queries // for the respective engine. webScience.pageManager.onPageVisitStart.addListener(pageVisitStartDetails => { - const engineAndQuery = SearchEngineUtils.getEngineAndQueryFromUrl(pageVisitStartDetails.url); + const engineAndQuery = Utils.getEngineAndQueryFromUrl(pageVisitStartDetails.url); if (engineAndQuery) { const engine = engineAndQuery.engine; const query = engineAndQuery.query; diff --git a/src/SearchEngineUtils.ts b/src/SearchEngineUtils.ts deleted file mode 100755 index 8e924bc..0000000 --- a/src/SearchEngineUtils.ts +++ /dev/null @@ -1,317 +0,0 @@ -import * as webScience from "@mozilla/web-science"; - -/** - * @type {Array} - * An array of the names of the tracked search engines. - */ -const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] - -/** - * @type {Object} - * An object that maps each tracked engine to its domain and a regular expression for the SERP page urls of the engine. - */ -const searchEngineDomains = { - Google: { - domains: ["google.com"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i - }, - DuckDuckGo: { - domains: ["duckduckgo.com"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?duckduckgo\.com(?::[0-9]+)?(?:\/.*)?(?:\?.*)?(?:#.*)?$)/i - }, - Bing: { - domains: ["bing.com"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i - }, - Yahoo: { - domains: ["yahoo.com"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i - }, - Ecosia: { - domains: ["ecosia.org"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i - }, - Ask: { - domains: ["ask.com"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web\W.*(?:\?.*)?(?:#.*)?$)/i - }, - Baidu: { - domains: ["baidu.com"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s\W.*(?:\?.*)?(?:#.*)?$)/i - }, - Yandex: { - domains: ["yandex.com", "yandex.ru"], - serpUrlRegExp: /(?:^(?:https?|wss?):\/\/(?:www\.)?yandex\.(?:ru|com)(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i - }, -} - -/** - * @type {Object} - * An object that maps each tracked engine to the match pattern set for its domains. - */ -const domainMatchPatternSets = {} - -/** - * @type {Array} - * An array of match pattern strings for all the tracked search engines. - */ -let allTrackedEngineMatchPatterns = [] - -/** - * Initializes the domainMatchPatternSets object and the allTrackedEngineMatchPatterns array. - * This function must be called before any of the other exported functions in this module. - */ -export function initialize(): void { - for (const searchEngine in searchEngineDomains) { - const domainMatchPatterns = webScience.matching.domainsToMatchPatterns(searchEngineDomains[searchEngine].domains) - domainMatchPatternSets[searchEngine] = webScience.matching.createMatchPatternSet(domainMatchPatterns) - allTrackedEngineMatchPatterns = allTrackedEngineMatchPatterns.concat(domainMatchPatterns) - } -} - -/** - * @returns {Array} An array of match pattern strings for all the tracked search engines. - */ -export function getTrackedEnginesMatchPatterns(): string[] { - return allTrackedEngineMatchPatterns; -} - -/** - * @param {string} url - the url of a page. - * @returns {string} If the url is for one of the tracked search engines, the name - * of the engine. Otherwise, null. - */ -export function getEngineFromURL(url: string): string { - for (const searchEngine in domainMatchPatternSets) { - const matchPatternSetForEngine = domainMatchPatternSets[searchEngine] - if (matchPatternSetForEngine.matches(url)) { - return searchEngine; - } - } - return null; -} - -/** - * @param {string} url - the url of a page. - * @returns {string} If the url is a SERP page for one of the tracked search engines, the name - * of the engine. Otherwise, null. - */ -function getEngineFromSearchURL(url: string): string { - for (const searchEngine in searchEngineDomains) { - if (url.match(searchEngineDomains[searchEngine].serpUrlRegExp)) { - return searchEngine; - } - } - return null; -} - -/** - * @param {string} url - the url of a page - * @returns {Object} If the url is for a SERP page for one of the tracked engines, returns the engine and - * the search query. Otherwise, null. - */ -export function getEngineAndQueryFromUrl(url: string): { engine: string, query: string } { - const searchEngine = getEngineFromSearchURL(url); - if (searchEngine) { - let query = null; - if (searchEngine === "Google") { - query = getGoogleQuery(url); - } else if (searchEngine === "DuckDuckGo") { - query = getDuckDuckGoQuery(url); - } else if (searchEngine === "Bing") { - query = getBingQuery(url); - } else if (searchEngine === "Yahoo") { - query = getYahooQuery(url); - } else if (searchEngine === "Ecosia") { - query = getEcosiaQuery(url); - } else if (searchEngine === "Ask") { - query = getAskQuery(url); - } else if (searchEngine === "Baidu") { - query = getBaiduQuery(url); - } else if (searchEngine === "Yandex") { - query = getYandexQuery(url); - } - - if (query) { - return { engine: searchEngine, query: query }; - } - } - - return null; -} - -/** - * @param {string} url - a Google SERP url. - * @returns {string} The query from a Google SERP url. - */ -function getGoogleQuery(url: string): string { - const tbm = getQueryVariable(url, "tbm") - if (!tbm) { - for (const key of ["q", "query"]) { - const query = getQueryVariable(url, key); - if (query) { - return query.toLowerCase(); - } - } - } - return null; -} - -/** - * @param {string} url - a DuckDuckGo SERP url. - * @returns {string} The query from a DuckDuckGo SERP url. - */ -function getDuckDuckGoQuery(url: string): string { - const iaType = getQueryVariable(url, "ia") - const iaxType = getQueryVariable(url, "iax") - const iaxmType = getQueryVariable(url, "iaxm") - - if (iaType && !iaxType && !iaxmType) { - const pathname = (new URL(url)).pathname - const pathnameSplit = pathname.split("/") - if (pathnameSplit.length === 2 && pathnameSplit[1]) { - const query = decodeURIComponent(pathnameSplit[1].replace(/_/g, " ")) - if (query) { - return query.toLowerCase(); - } - } - - const query = getQueryVariable(url, "q"); - if (query) { - return query.toLowerCase(); - } - } - return null; -} - -/** - * @param {string} url - a Bing SERP url. - * @returns {string} The query from a Bing SERP url. - */ -function getBingQuery(url: string): string { - const query = getQueryVariable(url, "q"); - if (query) { - return query.toLowerCase(); - } - return null; -} - -/** - * @param {string} url - a Yahoo SERP url. - * @returns {string} The query from a Yahoo SERP url. - */ -function getYahooQuery(url: string): string { - for (const key of ["p", "q", "query"]) { - const query = getQueryVariable(url, key); - if (query) { - return query.toLowerCase(); - } - } - return null; -} - -/** - * @param {string} url - a Ecosia SERP url. - * @returns {string} The query from a Ecosia SERP url. - */ -function getEcosiaQuery(url: string): string { - const query = getQueryVariable(url, "q"); - if (query) { - return query.toLowerCase(); - } - return null; -} - -/** - * @param {string} url - a Ask SERP url. - * @returns {string} The query from a Ask SERP url. - */ -function getAskQuery(url: string): string { - for (const key of ["q", "query"]) { - const query = getQueryVariable(url, key); - if (query) { - return query.toLowerCase(); - } - } - return null; -} - -/** - * @param {string} url - a Baidu SERP url. - * @returns {string} The query from a Baidu SERP url. - */ -function getBaiduQuery(url: string): string { - const tn = getQueryVariable(url, "tn") - if (!tn || tn === "baidu") { - for (const key of ["wd", "word"]) { - const query = getQueryVariable(url, key); - if (query) { - return query.toLowerCase(); - } - } - } - return null; -} - -/** - * @param {string} url - a Yandex SERP url. - * @returns {string} The query from a Yandex SERP url. - */ -function getYandexQuery(url: string): string { - if (!webScience.matching.normalizeUrl(url).includes("direct")) { - const query = getQueryVariable(url, "text"); - if (query) { - return query.toLowerCase(); - } - } - return null; -} - -/** - * Retrieve a query string variable from a url. - * @param {string} url - the url to retrieve the query string variable from. - * @param {string} parameter - the parameter of the variable in the URL you want to retrieve - * @returns {string} The query variable in the url for the given parameter. If the parameter - * does not exist in the URL, returns null. - */ -function getQueryVariable(url, parameter) { - const urlObject = new URL(url); - const params = new URLSearchParams(urlObject.search); - return params.get(parameter); -} - -/** - * Collects the number of unique queries made to each of the tracked search engines since the start time from history. - * @param {number} startTime - the earliest time from which to get history results. - * @returns {Array} An array that, for each of the tracked search engines, has the number of unique queries made to the engine - * since the start time from history. - */ -export async function getHistoryData(startTime: number): Promise> { - const historyItems = await browser.history.search({ text: "", startTime: startTime, maxResults: Number.MAX_SAFE_INTEGER }); - - const searchEngineQuerySets = {} - - for (const searchEngine of searchEngines) { - searchEngineQuerySets[searchEngine] = new Set(); - } - - for (const historyItem of historyItems) { - const engineAndQuery = getEngineAndQueryFromUrl(historyItem.url); - if (engineAndQuery) { - searchEngineQuerySets[engineAndQuery.engine].add(engineAndQuery.query); - } - } - - const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [ - { SearchEngine: "Google", Queries: searchEngineQuerySets["Google"].size }, - { SearchEngine: "DuckDuckGo", Queries: searchEngineQuerySets["DuckDuckGo"].size }, - { SearchEngine: "Bing", Queries: searchEngineQuerySets["Bing"].size }, - { SearchEngine: "Yahoo", Queries: searchEngineQuerySets["Yahoo"].size }, - { SearchEngine: "Ecosia", Queries: searchEngineQuerySets["Ecosia"].size }, - { SearchEngine: "Yandex", Queries: searchEngineQuerySets["Yandex"].size }, - { SearchEngine: "Ask", Queries: searchEngineQuerySets["Ask"].size }, - { SearchEngine: "Baidu", Queries: searchEngineQuerySets["Baidu"].size } - ]; - - return searchEnginesNumHistoryQueries; -} \ No newline at end of file diff --git a/src/SerpVisitCollection.ts b/src/SerpVisitCollection.ts index bbd40ab..98b091b 100755 --- a/src/SerpVisitCollection.ts +++ b/src/SerpVisitCollection.ts @@ -1,3 +1,8 @@ +/** + * This module enables registering SERP content scripts and collecting + * data for SERP visits. + */ + import * as webScience from "@mozilla/web-science"; import { serpScripts } from "./content-scripts-import.js" import * as AttributionTracking from "./AttributionTracking.js" diff --git a/src/StudyModule.ts b/src/StudyModule.ts index edace61..9f403bb 100755 --- a/src/StudyModule.ts +++ b/src/StudyModule.ts @@ -1,14 +1,13 @@ /** - * This module measures user interaction on Google Search Engine Result Pages - * - * @module WebScience.Measurements.SearchEngineUsage + * Starts the study */ -import * as Intervention from "./Intervention.js" -import * as PostIntervention from "./PostIntervention.js" -import * as WebNavigation from "./AttributionTracking.js" -import * as InitialCollection from "./InitialCollection.js" + +import * as Intervention from "./Intervention.js"; +import * as PostIntervention from "./PostIntervention.js"; +import * as WebNavigation from "./AttributionTracking.js"; +import * as InitialCollection from "./InitialCollection.js"; import * as webScience from "@mozilla/web-science"; -import * as SearchEngineUtils from "./SearchEngineUtils.js" +import * as Utils from "./Utils.js"; /** * @type {Object} @@ -33,7 +32,7 @@ export async function startStudy(rallyArg): Promise { storage = await webScience.storage.createKeyValueStorage("WebScience.Studies.SearchEngineUsage"); await webScience.pageManager.initialize(); - SearchEngineUtils.initialize(); + Utils.initialize(); WebNavigation.initializeAttributionTracking(); // Report initial data if we have not done so already diff --git a/src/Survey.ts b/src/Survey.ts index 65828bd..8345fca 100755 --- a/src/Survey.ts +++ b/src/Survey.ts @@ -1,3 +1,9 @@ +/** + * This module enables survey functionality of the study. There are two surveys in this study. + * The initial survey starts immediately after completion of the Intervention module functionality + * and the second survey starts 20 days after that. + */ + import * as webScience from "@mozilla/web-science"; const millisecondsPerSecond = 1000; diff --git a/src/TestLogging.ts b/src/TestLogging.ts index ff743db..ee4a2f3 100755 --- a/src/TestLogging.ts +++ b/src/TestLogging.ts @@ -1,3 +1,10 @@ +/** + * This module provides utilities for logging testing events. + * The module currently just outputs events with `console.log`. + * + * @module debugging + */ + /** * Whether to log testing events. * @private diff --git a/src/Utils.ts b/src/Utils.ts index 4fa40ab..b4ab72e 100755 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,52 +1,322 @@ /** - * @async - * @return {Promise} The name of the current default search engine. + * This module provides utilities for handling tracked search engine URLs and getting + * history query data for the tracked search engines. */ -export async function getSearchEngine(): Promise { - try { - return await browser.experimental.getSearchEngine(); - } catch (error) { - console.error(error); - return ""; + +import * as webScience from "@mozilla/web-science"; + +/** + * @type {Array} + * An array of the names of the tracked search engines. + */ +const searchEngines = ["Google", "DuckDuckGo", "Bing", "Yahoo", "Ecosia", "Yandex", "Ask", "Baidu"] + +/** + * @type {Object} + * An object that maps each tracked engine to its domain and a regular expression for the SERP page urls of the engine. + */ +const searchEngineDomains = { + Google: { + domains: ["google.com"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + DuckDuckGo: { + domains: ["duckduckgo.com"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?duckduckgo\.com(?::[0-9]+)?(?:\/.*)?(?:\?.*)?(?:#.*)?$)/i + }, + Bing: { + domains: ["bing.com"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Yahoo: { + domains: ["yahoo.com"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Ecosia: { + domains: ["ecosia.org"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Ask: { + domains: ["ask.com"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Baidu: { + domains: ["baidu.com"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s\W.*(?:\?.*)?(?:#.*)?$)/i + }, + Yandex: { + domains: ["yandex.com", "yandex.ru"], + serpUrlRegExp: /(?:^(?:https?):\/\/(?:www\.)?yandex\.(?:ru|com)(?::[0-9]+)?\/search\W.*(?:\?.*)?(?:#.*)?$)/i + }, +} + +/** + * @type {Object} + * An object that maps each tracked engine to the match pattern set for its domains. + */ +const domainMatchPatternSets = {} + +/** + * @type {Array} + * An array of match pattern strings for all the tracked search engines. + */ +let allTrackedEngineMatchPatterns = [] + +/** + * Initializes the domainMatchPatternSets object and the allTrackedEngineMatchPatterns array. + * This function must be called before any of the other exported functions in this module. + */ +export function initialize(): void { + for (const searchEngine in searchEngineDomains) { + const domainMatchPatterns = webScience.matching.domainsToMatchPatterns(searchEngineDomains[searchEngine].domains) + domainMatchPatternSets[searchEngine] = webScience.matching.createMatchPatternSet(domainMatchPatterns) + allTrackedEngineMatchPatterns = allTrackedEngineMatchPatterns.concat(domainMatchPatterns) + } +} + +/** + * @returns {Array} An array of match pattern strings for all the tracked search engines. + */ +export function getTrackedEnginesMatchPatterns(): string[] { + return allTrackedEngineMatchPatterns; +} + +/** + * @param {string} url - the url of a page. + * @returns {string} If the url is for one of the tracked search engines, the name + * of the engine. Otherwise, null. + */ +export function getEngineFromURL(url: string): string { + for (const searchEngine in domainMatchPatternSets) { + const matchPatternSetForEngine = domainMatchPatternSets[searchEngine] + if (matchPatternSetForEngine.matches(url)) { + return searchEngine; + } + } + return null; +} + +/** + * @param {string} url - the url of a page. + * @returns {string} If the url is a SERP page for one of the tracked search engines, the name + * of the engine. Otherwise, null. + */ +function getEngineFromSearchURL(url: string): string { + for (const searchEngine in searchEngineDomains) { + if (url.match(searchEngineDomains[searchEngine].serpUrlRegExp)) { + return searchEngine; + } + } + return null; +} + +/** + * @param {string} url - the url of a page + * @returns {Object} If the url is for a SERP page for one of the tracked engines, returns the engine and + * the search query. Otherwise, null. + */ +export function getEngineAndQueryFromUrl(url: string): { engine: string, query: string } { + const searchEngine = getEngineFromSearchURL(url); + if (searchEngine) { + let query = null; + if (searchEngine === "Google") { + query = getGoogleQuery(url); + } else if (searchEngine === "DuckDuckGo") { + query = getDuckDuckGoQuery(url); + } else if (searchEngine === "Bing") { + query = getBingQuery(url); + } else if (searchEngine === "Yahoo") { + query = getYahooQuery(url); + } else if (searchEngine === "Ecosia") { + query = getEcosiaQuery(url); + } else if (searchEngine === "Ask") { + query = getAskQuery(url); + } else if (searchEngine === "Baidu") { + query = getBaiduQuery(url); + } else if (searchEngine === "Yandex") { + query = getYandexQuery(url); + } + + if (query) { + return { engine: searchEngine, query: query }; + } + } + + return null; +} + +/** + * @param {string} url - a Google SERP url. + * @returns {string} The query from a Google SERP url. + */ +function getGoogleQuery(url: string): string { + const tbm = getQueryVariable(url, "tbm") + if (!tbm) { + for (const key of ["q", "query"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } + } + } + return null; +} + +/** + * @param {string} url - a DuckDuckGo SERP url. + * @returns {string} The query from a DuckDuckGo SERP url. + */ +function getDuckDuckGoQuery(url: string): string { + const iaType = getQueryVariable(url, "ia") + const iaxType = getQueryVariable(url, "iax") + const iaxmType = getQueryVariable(url, "iaxm") + + if (iaType && !iaxType && !iaxmType) { + const pathname = (new URL(url)).pathname + const pathnameSplit = pathname.split("/") + if (pathnameSplit.length === 2 && pathnameSplit[1]) { + const query = decodeURIComponent(pathnameSplit[1].replace(/_/g, " ")) + if (query) { + return query.toLowerCase(); + } + } + + const query = getQueryVariable(url, "q"); + if (query) { + return query.toLowerCase(); + } + } + return null; +} + +/** + * @param {string} url - a Bing SERP url. + * @returns {string} The query from a Bing SERP url. + */ +function getBingQuery(url: string): string { + const query = getQueryVariable(url, "q"); + if (query) { + return query.toLowerCase(); + } + return null; +} + +/** + * @param {string} url - a Yahoo SERP url. + * @returns {string} The query from a Yahoo SERP url. + */ +function getYahooQuery(url: string): string { + for (const key of ["p", "q", "query"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } } + return null; } /** - * @async - * @return {Promise} The url of the current homepage. + * @param {string} url - a Ecosia SERP url. + * @returns {string} The query from a Ecosia SERP url. */ -export async function getHomepage(): Promise { - try { - return await browser.experimental.getHomepage(); - } catch (error) { - console.error(error); - return ""; +function getEcosiaQuery(url: string): string { + const query = getQueryVariable(url, "q"); + if (query) { + return query.toLowerCase(); } + return null; } /** - * Changes the current default search engine. - * @async - * @param {string} searchEngine - the search engine that the default will be changed to. - * Should be either Google, DuckDuckGo, Yahoo, Bing, Ecosia, Yandex, Baidu, or Ask + * @param {string} url - a Ask SERP url. + * @returns {string} The query from a Ask SERP url. */ -export async function changeSearchEngine(searchEngine: string): Promise { - try { - await browser.experimental.changeSearchEngine(searchEngine); - } catch (error) { - console.error(error); +function getAskQuery(url: string): string { + for (const key of ["q", "query"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } } + return null; } /** - * Changes the current homepage. - * @async - * @param {string} homepage - the url that the homepage should be changed to. + * @param {string} url - a Baidu SERP url. + * @returns {string} The query from a Baidu SERP url. */ -export async function changeHomepage(homepage: string): Promise { - try { - await browser.experimental.changeHomepage(homepage); - } catch (error) { - console.error(error); +function getBaiduQuery(url: string): string { + const tn = getQueryVariable(url, "tn") + if (!tn || tn === "baidu") { + for (const key of ["wd", "word"]) { + const query = getQueryVariable(url, key); + if (query) { + return query.toLowerCase(); + } + } } + return null; +} + +/** + * @param {string} url - a Yandex SERP url. + * @returns {string} The query from a Yandex SERP url. + */ +function getYandexQuery(url: string): string { + if (!webScience.matching.normalizeUrl(url).includes("direct")) { + const query = getQueryVariable(url, "text"); + if (query) { + return query.toLowerCase(); + } + } + return null; +} + +/** + * Retrieve a query string variable from a url. + * @param {string} url - the url to retrieve the query string variable from. + * @param {string} parameter - the parameter of the variable in the URL you want to retrieve + * @returns {string} The query variable in the url for the given parameter. If the parameter + * does not exist in the URL, returns null. + */ +function getQueryVariable(url, parameter) { + const urlObject = new URL(url); + const params = new URLSearchParams(urlObject.search); + return params.get(parameter); +} + +/** + * Collects the number of unique queries made to each of the tracked search engines since the start time from history. + * @param {number} startTime - the earliest time from which to get history results. + * @returns {Array} An array that, for each of the tracked search engines, has the number of unique queries made to the engine + * since the start time from history. + */ +export async function getHistoryData(startTime: number): Promise> { + const historyItems = await browser.history.search({ text: "", startTime: startTime, maxResults: Number.MAX_SAFE_INTEGER }); + + const searchEngineQuerySets = {} + + for (const searchEngine of searchEngines) { + searchEngineQuerySets[searchEngine] = new Set(); + } + + for (const historyItem of historyItems) { + const engineAndQuery = getEngineAndQueryFromUrl(historyItem.url); + if (engineAndQuery) { + searchEngineQuerySets[engineAndQuery.engine].add(engineAndQuery.query); + } + } + + const searchEnginesNumHistoryQueries: { SearchEngine: string, Queries: number }[] = [ + { SearchEngine: "Google", Queries: searchEngineQuerySets["Google"].size }, + { SearchEngine: "DuckDuckGo", Queries: searchEngineQuerySets["DuckDuckGo"].size }, + { SearchEngine: "Bing", Queries: searchEngineQuerySets["Bing"].size }, + { SearchEngine: "Yahoo", Queries: searchEngineQuerySets["Yahoo"].size }, + { SearchEngine: "Ecosia", Queries: searchEngineQuerySets["Ecosia"].size }, + { SearchEngine: "Yandex", Queries: searchEngineQuerySets["Yandex"].size }, + { SearchEngine: "Ask", Queries: searchEngineQuerySets["Ask"].size }, + { SearchEngine: "Baidu", Queries: searchEngineQuerySets["Baidu"].size } + ]; + + return searchEnginesNumHistoryQueries; } \ No newline at end of file diff --git a/src/content-scripts-import.ts b/src/content-scripts-import.ts index 03dc31d..ad08496 100755 --- a/src/content-scripts-import.ts +++ b/src/content-scripts-import.ts @@ -8,9 +8,6 @@ * -- enabled: whether this content script should be loaded * -- matches/exclude matches: which URL fragments to match * -- js: content script to load - * The objects prefixed by "testing" are only loaded when the module is being tested. - * - * TODO: don't even register the testing objects when not being tested */ export const serpScripts = [ { From 1b68794ad1f868b41cd4cd383171ce7bc98779be Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Tue, 22 Jun 2021 23:23:37 -0400 Subject: [PATCH 174/399] Documentation improvements --- src/AttributionTracking.ts | 16 +++- src/InitialCollection.ts | 16 ++-- src/Modal.ts | 7 +- src/RegularCollection.ts | 4 +- src/StudyModule.ts | 13 +-- src/Survey.ts | 10 ++- src/Utils.ts | 4 +- .../{Interface.ts => Interfaces.ts} | 47 ++++++---- src/content-scripts/Utils.ts | 80 +++++++++++------ src/content-scripts/common.ts | 27 ++---- src/content-scripts/serp-scripts/ask.ts | 59 +++++++----- src/content-scripts/serp-scripts/baidu.ts | 69 ++++++++------ src/content-scripts/serp-scripts/bing.ts | 90 ++++++++++++------- .../serp-scripts/duckduckgo.ts | 73 ++++++++++----- src/content-scripts/serp-scripts/ecosia.ts | 61 ++++++++----- src/content-scripts/serp-scripts/google.ts | 65 +++++++++----- src/content-scripts/serp-scripts/yahoo.ts | 64 ++++++++----- src/content-scripts/serp-scripts/yandex.ts | 62 ++++++++----- src/decs.d.ts | 17 +++- 19 files changed, 496 insertions(+), 288 deletions(-) rename src/content-scripts/{Interface.ts => Interfaces.ts} (54%) diff --git a/src/AttributionTracking.ts b/src/AttributionTracking.ts index ecea73f..33b984b 100755 --- a/src/AttributionTracking.ts +++ b/src/AttributionTracking.ts @@ -25,7 +25,7 @@ const pageIdToAttributionData: { /** * @type {Object} * An object that, for each tab, maps URLs to IDs of pages visited in the tab. - * Used to determine the sequence a page visit belongs to if the user navigates with forward/back. + * Used to determine the sequence a page visit belongs to if the participant navigates with forward/back. */ const tabHistoryPageIds: { [tabId: number]: { @@ -33,6 +33,11 @@ const tabHistoryPageIds: { } } = {}; +/** + * @param {string} pageId - The webScience.pageManager page ID of a page. + * @returns {string} Attribution information for a page based on its page ID. + * Returns null if attribution information for the given page ID cannot be found. + */ export function getAttributionForPageId(pageId: string) { return pageId ? pageIdToAttributionData[pageId] : null; } @@ -41,7 +46,10 @@ export function getAttributionForPageId(pageId: string) { * Initializes tracking of attribution details for page visits. */ export function initializeAttributionTracking(): void { - const allEngineMatchPatterns = Utils.getTrackedEnginesMatchPatterns() + // Gets the match patterns for pages where the onPageTransitionData listener should be notified + // of page transition data. + const allEngineMatchPatterns = Utils.getTrackedEnginesMatchPatterns(); + webScience.pageTransition.onPageTransitionData.addListener(pageTransitionDataEvent => { const pageUrl = pageTransitionDataEvent.url; const pageId = pageTransitionDataEvent.pageId; @@ -68,8 +76,8 @@ export function initializeAttributionTracking(): void { tabHistoryPageIds[pageTransitionDataEvent.tabId] = { ...tabHistoryPageIds[pageTransitionDataEvent.openerTabId] }; } - // If the user used the forward or back button to trigger the navigation, then we continue the attribution from the - // most recent visit to the normalized URL in the tab if possible. + // If the participant used the forward or back button to trigger the navigation, then we continue the attribution + // from the most recent visit to the normalized URL in the tab if possible. if (pageUrl && pageTransitionDataEvent.tabId in tabHistoryPageIds && pageUrl in tabHistoryPageIds[pageTransitionDataEvent.tabId] && tabHistoryPageIds[pageTransitionDataEvent.tabId][pageUrl] in pageIdToAttributionData) { diff --git a/src/InitialCollection.ts b/src/InitialCollection.ts index c52035e..75e769f 100755 --- a/src/InitialCollection.ts +++ b/src/InitialCollection.ts @@ -1,23 +1,21 @@ -/** - * This module enables collection of data that will occur once upon - * initial startup of the study. - */ - import * as webScience from "@mozilla/web-science"; import * as Privileged from "./Privileged.js" import * as Utils from "./Utils.js" /** - * Run initial collection + * Run initial data collection * @async **/ export async function run(storage) { - const date30DaysAgo = (new Date(new Date().setDate(new Date().getDate() - 30))).valueOf(); + // Gets a timeStamp from 30 days ago + // Current timeStamp - (30 days * 24 hours * 60 minutes * 60 seconds * 1000 milliseconds) + const timeStamp30DaysAgo = webScience.timing.now() - (30 * 24 * 60 * 60 * 1000); + const initialData = { SurveyId: await webScience.userSurvey.getSurveyId(), Engine: await Privileged.getSearchEngine(), - HistoryQueries: await Utils.getHistoryData(date30DaysAgo), - Time: Date.now(), + HistoryQueries: await Utils.getHistoryData(timeStamp30DaysAgo), + Time: webScience.timing.now(), TimeOffset: new Date().getTimezoneOffset() }; diff --git a/src/Modal.ts b/src/Modal.ts index 39755e6..8fd96a8 100755 --- a/src/Modal.ts +++ b/src/Modal.ts @@ -1,7 +1,7 @@ /** * This module provides functionality for conducting the second stage of modal interventions. - * The first stage of the modal intervention is the choice screen shown to the user. - * The second stage is the modal dialog that is displayed upon a generated search + * The first stage of the modal intervention is the choice screen shown to the user and is handled + * in the Intervention module. The second stage is the modal dialog that is displayed upon a search * with the newly selected engine from the choice screen. */ @@ -89,7 +89,8 @@ export async function start(storage_in) { // Modal functionality should only run if: // 1. This intervention has not already been completed. // 2. The participant's intervention group is one of the two modal intervention groups - // 3. The choice screen stage of the modal intervention was completed successfully. + // 3. The choice screen stage of the modal intervention was completed successfully (engineChangedFrom + // and engineChangedTo will only be set if the participant selected an option on the choice screen). // 4. The engine that the participant chose on the choice screen is different from their // their original engine. It does not make sense to popup the modal dialog if the participant's // default was originally Google and they proceeded to select Google on the choice screen. diff --git a/src/RegularCollection.ts b/src/RegularCollection.ts index 957ffab..d67cd3e 100755 --- a/src/RegularCollection.ts +++ b/src/RegularCollection.ts @@ -43,7 +43,7 @@ export async function start(storageIn: any): Promise { // of regular collection and we set the value in storage initialRegularCollectionStartTime = await storage.get("InitialRegularCollectionStartTime"); if (!initialRegularCollectionStartTime) { - initialRegularCollectionStartTime = Date.now(); + initialRegularCollectionStartTime = webScience.timing.now(); storage.set("InitialRegularCollectionStartTime", initialRegularCollectionStartTime); } @@ -72,7 +72,7 @@ async function reportRegularData() { CurrentEngine: await Privileged.getSearchEngine(), SerpVisitQueries: searchEngineToNumQueries, HistoryQueries: await Utils.getHistoryData(initialRegularCollectionStartTime), - Time: Date.now(), + Time: webScience.timing.now(), TimeOffset: new Date().getTimezoneOffset(), }; diff --git a/src/StudyModule.ts b/src/StudyModule.ts index 9f403bb..64dd39b 100755 --- a/src/StudyModule.ts +++ b/src/StudyModule.ts @@ -1,5 +1,5 @@ /** - * Starts the study + * Starts the search engine usage study. */ import * as Intervention from "./Intervention.js"; @@ -41,12 +41,13 @@ export async function startStudy(rallyArg): Promise { InitialCollection.run(storage); } - // If intervention is complete, start post-intervention collection. - // Otherwise, run intervention. - if (await storage.get("InterventionComplete")) { - PostIntervention.start(storage); + // If intervention is not complete, run intervention. + // Otherwise, run post-intervention functionality. + const interventionComplete = await storage.get("InterventionComplete"); + if (!interventionComplete) { + Intervention.start(storage); } else { - Intervention.start(storage); + PostIntervention.start(storage); } } diff --git a/src/Survey.ts b/src/Survey.ts index 8345fca..91f60bb 100755 --- a/src/Survey.ts +++ b/src/Survey.ts @@ -1,5 +1,5 @@ /** - * This module enables survey functionality of the study. There are two surveys in this study. + * This module enables survey functionality for the study. There are two surveys in this study. * The initial survey starts immediately after completion of the Intervention module functionality * and the second survey starts 20 days after that. */ @@ -67,12 +67,14 @@ async function startFinalSurvey() { export async function start(storageIn): Promise { storage = storageIn; + const currentTime = webScience.timing.now(); + // Get the start time of the initial survey from storage. // If the value does not exist in storage, then this is the the start time of the // initial survey and we set the value in storage. let initialSurveyStartTime = await storage.get("InitialSurveyStartTime"); if (!initialSurveyStartTime) { - initialSurveyStartTime = Date.now(); + initialSurveyStartTime = webScience.timing.now(); storage.set("InitialSurveyStartTime", initialSurveyStartTime); } @@ -81,12 +83,12 @@ export async function start(storageIn): Promise { const currentSurvey = await webScience.userSurvey.getSurveyName(); if (!currentSurvey || - (currentSurvey === surveyConfigData.initial.surveyName && Date.now() <= finalSurveyStartTime)) { + (currentSurvey === surveyConfigData.initial.surveyName && currentTime <= finalSurveyStartTime)) { // If there is no current survey or the current survey is the initial survey // and the current time is before the time to start the final survey, we set // the current survey to be the initial survey and set a timeout to start the final survey. webScience.userSurvey.setSurvey(surveyConfigData.initial); - setTimeout(startFinalSurvey, finalSurveyStartTime - Date.now()); + setTimeout(startFinalSurvey, finalSurveyStartTime - currentTime); } else if (currentSurvey === surveyConfigData.initial.surveyName) { // If the current survey is the initial survey but the current time is after the start // time of the final survey, we start the final survey. diff --git a/src/Utils.ts b/src/Utils.ts index b4ab72e..3b8dcd8 100755 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,6 +1,6 @@ /** - * This module provides utilities for handling tracked search engine URLs and getting - * history query data for the tracked search engines. + * This module provides various utilities used by background modules. The initialize function must be called + * before any of the other exported functions in this module. */ import * as webScience from "@mozilla/web-science"; diff --git a/src/content-scripts/Interface.ts b/src/content-scripts/Interfaces.ts similarity index 54% rename from src/content-scripts/Interface.ts rename to src/content-scripts/Interfaces.ts index e0cf580..4875aa6 100644 --- a/src/content-scripts/Interface.ts +++ b/src/content-scripts/Interfaces.ts @@ -1,21 +1,11 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -declare let webScience: { - pageManager: { - pageId, - url, - referrer, - onPageVisitStart, - onPageVisitStop, - onPageAttentionUpdate, - onPageAudioUpdate, - pageHasAttention, - pageHasAudio, - pageVisitStarted, - pageVisitStartTime - } +/* eslint-disable @typescript-eslint/no-unused-vars */ + +enum ElementType { + Organic, + Internal, + Ad, } -// eslint-disable-next-line @typescript-eslint/no-unused-vars interface OrganicDetail { // Number of pixels between the top of the page and the top of the organic result. TopHeight: number, @@ -26,7 +16,6 @@ interface OrganicDetail { PageNum: number, } -// eslint-disable-next-line @typescript-eslint/no-unused-vars interface OrganicClick { // The ranking of the selected organic result. Ranking: number, @@ -35,3 +24,27 @@ interface OrganicClick { // If the whole page had loaded, including all dependent resources such as stylesheets and images when the selection occurred. PageLoaded: boolean, } + +interface InternalListener { + document: Document, + clickListener: (event: MouseEvent) => void, + mousedownListener: (event: MouseEvent) => void +} + +interface OrganicListener { + element: Element, + clickListener: (event: MouseEvent) => void, + mousedownListener: (event: MouseEvent) => void +} + +interface AdListener { + element: Element, + clickListener: (event: MouseEvent) => void, + mousedownListener: (event: MouseEvent) => void +} + +interface RecentMousedown { + type: ElementType, + href: string, + index: number +} \ No newline at end of file diff --git a/src/content-scripts/Utils.ts b/src/content-scripts/Utils.ts index 2f295b8..360deb4 100644 --- a/src/content-scripts/Utils.ts +++ b/src/content-scripts/Utils.ts @@ -1,5 +1,9 @@ import { matching } from "@mozilla/web-science"; +/** + * @param {string} url - The URL string to normalize. + * @returns {string} The normalized URL string or an empty string if the URL string is not a valid, absolute URL. + */ export function getNormalizedUrl(url: string): string { try { return matching.normalizeUrl(url); @@ -9,47 +13,55 @@ export function getNormalizedUrl(url: string): string { } /** - * Determines the offset from the top of the document for the element - * @param {string} element - The element - * @returns {number} The offset from the top + * @param {Element} element - An element + * @returns {number} The number of pixels between the top of the page and the top of the element */ export function getElementTopHeight(element: Element): number { - if (!element) return null - return window.pageYOffset + element.getBoundingClientRect().top + try { + return window.pageYOffset + element.getBoundingClientRect().top + } catch (error) { + return null; + } + } /** - * Determines the offset from the top of the document for the next element - * @param {string} element - The element - * @returns {number} The offset from the top + * @param {Element} element - An element + * @returns {number} The number of pixels between the top of the page and the top of the next element */ -export function getNextElementTopHeight(element: Element) { +export function getElementBottomHeight(element: Element) { return getElementTopHeight(getNextElement(element)) } +/** + * @param {Element} element - An element + * @returns {number} The next element in the DOM or null if such an element does not exist. + */ function getNextElement(element: Element) { - while (element) { - while (element.nextElementSibling && ( - !(element.nextElementSibling as HTMLElement).offsetParent || - !(element.nextElementSibling as HTMLElement).offsetHeight || - !(element.nextElementSibling as HTMLElement).offsetWidth - )) { - element = element.nextElementSibling - } - - if (element.nextElementSibling) { - break - } - - element = element.parentElement + if (!element) { + return null; } - return element.nextElementSibling + // Get the next sibling element where the display property for the element or one of its parents + // is not set to none and the position property is not set to fixed. If no such sibling element exists, + // recursively call this on the parent element. + while (element.nextElementSibling && ( + !(element.nextElementSibling as HTMLElement).offsetParent || + !(element.nextElementSibling as HTMLElement).offsetHeight || + !(element.nextElementSibling as HTMLElement).offsetWidth + )) { + element = element.nextElementSibling + } + if (element.nextElementSibling) { + return element.nextElementSibling; + } else { + return getNextElement(element.parentElement); + } } /** * Retrieves the first matching element given an xpath query - * @param {string} xpath - The xpath query + * @param {string} xpath - An xpath query * @param {Node} contextNode - The context node for the query * @returns {Element} The first element matching the xpath */ @@ -63,7 +75,7 @@ export function getXPathElement(xpath: string, contextNode: Node = document): El /** * Retrieves an array of all elements matching a given xpath query - * @param {string} xpath - The xpath query + * @param {string} xpath - An xpath query * @param {Node} contextNode - The context node for the query * @returns {Element} An array of all elements matching the xpath query */ @@ -81,7 +93,7 @@ export function getXPathElements(xpath: string, contextNode: Node = document): E /** * Retrieve a query string variable from a URL - * @param {string} urlString - the URL to retrieve the query string variable from + * @param {string} urlString - the URL string to retrieve the query string variable from * @param {string} parameter - the parameter of the variable in the URL you want to retrieve * @returns {string} The query string variable in url for the given parameter. If the parameter * does not exist in the URL, returns null. @@ -92,12 +104,20 @@ export function getQueryVariable(urlString, variable) { return params.get(variable); } +/** + * @param {string} url - a URL string + * @returns {boolean} Whether the URL string is a valid URL. + */ function isValidURL(url: string): boolean { const res = url.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g); return (res !== null) } -export function isLinkToDifferentPage(urlString: string): boolean { +/** + * @param {string} urlString - a URL string + * @returns {boolean} Whether the URL string is a valid URL to a different page than the current page. + */ +export function isValidLinkToDifferentPage(urlString: string): boolean { if (!isValidURL(urlString)) return false; const url = new URL(urlString); if ( @@ -111,6 +131,10 @@ export function isLinkToDifferentPage(urlString: string): boolean { return true; } +/** + * Execute a callback after the webScience.pageManager API has loaded. + * @param {string} callback - the callback to run + */ export function waitForPageManagerLoad(callback) { if (("webScience" in window) && ("pageManager" in (window as any).webScience)) { callback(); diff --git a/src/content-scripts/common.ts b/src/content-scripts/common.ts index 6938904..c0109da 100644 --- a/src/content-scripts/common.ts +++ b/src/content-scripts/common.ts @@ -1,14 +1,5 @@ import { timing } from "@mozilla/web-science"; -/** - * An enum of the different types of elements tracked - */ -export enum ElementType { - Organic, - Internal, - Ad, -} - /** * A class to track page values for SERP pages */ @@ -29,7 +20,7 @@ export class PageValues { pageIsCorrect = false; /** - * How long the page has had the user's attention. + * How long the page has had the participant's attention. */ attentionDuration = 0; @@ -86,22 +77,22 @@ export class PageValues { /** * An array of the listeners tracking internal clicks on the page. */ - internalListeners: { document: Document, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; + internalListeners: InternalListener[] = []; /** * An array of the listeners tracking organic clicks on the page. */ - organicListeners: { element: Element, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; + organicListeners: OrganicListener[] = []; /** * An array of the listeners tracking advertisement clicks on the page. */ - adListeners: { element: Element, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void, }[] = []; + adListeners: AdListener[] = []; /** * Details about the element that most recently had the mousedown event fired for it. */ - mostRecentMousedown: { type: ElementType, href: string, index: number }; + mostRecentMousedown: RecentMousedown; /** * When the most recent recorded click occurred. This is used to ignore new tabs opened from the page if the @@ -122,7 +113,7 @@ export class PageValues { * @param {callback} onNewTab - A callback that will be passed the url if a new tab is opened * from this page and determine if a click occurred */ - constructor(searchEngine: string, onNewTab: (url) => void) { + constructor(searchEngine: string, onNewTab: (url: string) => void) { this.searchEngine = searchEngine; this.pageId = webScience.pageManager.pageId; @@ -183,7 +174,7 @@ export class PageValues { /** * Add listeners to track organic clicks. - * @param {Element[][]} organicLinkElements - For each index organic search results, an array + * @param {Element[][]} organicLinkElements - For each organic search result, an array * of the organic link elements for that result. **/ addOrganicListeners(organicLinkElements: Element[][]) { @@ -271,8 +262,8 @@ export class PageValues { /** * Add listeners to track internal clicks. - * @param {callback} getInternalLink - A callback function that returns a URL if the element is - * is an internal link element and the href of the element is the link to the internal page. It returns + * @param {callback} getInternalLink - A callback function that returns a URL if the target element is + * an internal link element and the href of the element is a link to an internal page. It returns * an empty string if the element was possibly an internal link element. Otherwise, returns null. **/ addInternalListeners(getInternalLink: (target: Element) => string) { diff --git a/src/content-scripts/serp-scripts/ask.ts b/src/content-scripts/serp-scripts/ask.ts index 368a34a..4d015f8 100644 --- a/src/content-scripts/serp-scripts/ask.ts +++ b/src/content-scripts/serp-scripts/ask.ts @@ -1,4 +1,4 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" import { timing } from "@mozilla/web-science"; @@ -7,17 +7,24 @@ import { timing } from "@mozilla/web-science"; */ let internalListeners: { document: Document, clickListener: (event: MouseEvent) => void, mousedownListener: (event: MouseEvent) => void }[] = []; const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("Ask", onNewTab); + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = document.querySelectorAll(".PartialSearchResults-item"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: null }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = document.querySelectorAll(".PartialSearchResults-item"); const organicLinkElements: Element[][] = [] @@ -27,6 +34,9 @@ const serpModule = function () { return organicLinkElements; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { const adLinkElements: Element[] = []; const adElements = document.querySelectorAll(".display-ad-block"); @@ -37,7 +47,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -48,7 +58,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { try { @@ -59,23 +69,25 @@ const serpModule = function () { } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageNumFromUrl = Utils.getQueryVariable(window.location.href, "page"); return pageNumFromUrl ? Number(pageNumFromUrl) : 1; } - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { if (target.matches(".main *")) { if (!target.matches(".PartialWebPagination *, .PartialPageFooter *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const url = new URL(href); if (url.hostname.includes("ask.com")) { return href; @@ -130,7 +142,7 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(): void { pageValues.pageIsCorrect = true; @@ -143,16 +155,12 @@ const serpModule = function () { addInternalListeners(getInternalLink); } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); - }); - - window.addEventListener("load", function () { - determinePageValues(); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { const normalizedUrl: string = Utils.getNormalizedUrl(url); if (normalizedUrl.includes("g.doubleclick.net") || normalizedUrl.includes("google.com/aclk") || @@ -180,11 +188,22 @@ const serpModule = function () { } } + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); + window.addEventListener("unload", (event) => { + // Get the number of ads from iFrames let numAskFrameAds = 0; for (const frame in askFrameToNumAdsObject) { numAskFrameAds += askFrameToNumAdsObject[frame] } + pageValues.numAdResults = numAskFrameAds + document.querySelectorAll(".display-ad-block").length; pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); diff --git a/src/content-scripts/serp-scripts/baidu.ts b/src/content-scripts/serp-scripts/baidu.ts index 320321a..113c44b 100644 --- a/src/content-scripts/serp-scripts/baidu.ts +++ b/src/content-scripts/serp-scripts/baidu.ts @@ -1,14 +1,15 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" /** * Content Scripts for Baidu SERP */ const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("Baidu", onNewTab); /** - * Get whether the page is a basic SERP page. + * @returns {boolean} Whether the page is a Baidu web SERP page. */ function getPageIsCorrect(): boolean { const url = new URL(window.location.href) @@ -23,15 +24,21 @@ const serpModule = function () { return false; } + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = document.querySelectorAll("#content_left > .result"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: null }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = document.querySelectorAll("#content_left > .result"); const organicLinkElements: Element[][] = [] @@ -42,12 +49,15 @@ const serpModule = function () { } /** - * @returns {Array} An array of all the ad results on the page + * @returns {number} The number of ad results on the page. */ function getNumAdResults(): number { return Utils.getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]").length; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { const adLinkElements: Element[] = []; const adElements = Utils.getXPathElements("//div[contains(@class, 'c-container') and descendant::*[normalize-space(text()) = 'advertising' or normalize-space(text()) = '广告' or normalize-space(text()) = '品牌广告' or normalize-space(text()) = 'brand advertisement']]"); @@ -61,7 +71,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -70,11 +80,10 @@ const serpModule = function () { } catch (error) { return null; } - } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { try { @@ -86,22 +95,24 @@ const serpModule = function () { } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageNumElement = document.querySelector("strong > .pc") return pageNumElement ? Number(pageNumElement.textContent) : -1; } - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { if (target.matches("#container *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const normalizedUrl = Utils.getNormalizedUrl(href); if (normalizedUrl.includes("baidu.com") && !normalizedUrl.includes("baidu.com/link") && @@ -119,7 +130,7 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(): void { pageValues.pageIsCorrect = getPageIsCorrect(); @@ -134,16 +145,12 @@ const serpModule = function () { pageValues.addInternalListeners(getInternalLink); } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); - }); - - window.addEventListener("load", function () { - determinePageValues(); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { if (!pageValues.mostRecentMousedown) { return; } @@ -171,7 +178,18 @@ const serpModule = function () { } } - const bodyObserver = new MutationObserver(function (_, observer) { + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); + + // Observer that looks for the #wrapper_wrapper element that contains + // page content + const documentObserver = new MutationObserver(function (_, observer) { const container = document.querySelector("#wrapper_wrapper") if (container) { const domObserver = new MutationObserver(function () { @@ -183,9 +201,8 @@ const serpModule = function () { } }); const bodyConfig = { childList: true, subtree: true }; - bodyObserver.observe(document, bodyConfig); + documentObserver.observe(document, bodyConfig); - // TODO: do we need this? webScience.pageManager.onPageVisitStart.addListener(() => { pageValues.resetTracking(); determinePageValues(); diff --git a/src/content-scripts/serp-scripts/bing.ts b/src/content-scripts/serp-scripts/bing.ts index 9bd11f8..67d90bb 100644 --- a/src/content-scripts/serp-scripts/bing.ts +++ b/src/content-scripts/serp-scripts/bing.ts @@ -1,21 +1,29 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" +import { timing } from "@mozilla/web-science"; /** * Content Scripts for Bing SERP */ const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("Bing", onNewTab); + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = document.querySelectorAll("#b_results > li.b_algo"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: null }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = document.querySelectorAll("#b_results > li.b_algo"); const organicLinkElements: Element[][] = [] @@ -26,26 +34,29 @@ const serpModule = function () { } /** - * @returns {Array} An array of all the ad results on the page + * @returns {number} The number of ad results on the page. */ function getNumAdResults(): number { return document.querySelectorAll(".b_adSlug").length; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { const adLinkElements: Element[] = []; - // Add ad carousel links + // Get link elements from ad carousels document.querySelectorAll(".adsMvCarousel").forEach(adElement => { if (adElement.parentElement.parentElement.querySelector(".b_adSlug")) { adLinkElements.push(...adElement.querySelectorAll(".slide:not(.see_more) [href]")); } }); + // Get standard ad link elements const adElements = Array.from(document.querySelectorAll(".b_ad > ul > li, .b_adLastChild")).filter(adElement => { return !adElement.querySelector(".adsMvCarousel"); }); - adElements.forEach(adElement => { Array.from(adElement.querySelectorAll("[href]")).filter(adLinkElement => { if (!adLinkElement.matches('.b_adcaret, .b_adcaret *, .b_adinfo, .b_adinfo *')) { @@ -53,11 +64,12 @@ const serpModule = function () { } }); }); + return adLinkElements; } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -68,19 +80,15 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { - try { - const element = (document.querySelector(".b_pag") as HTMLElement) - return Utils.getElementTopHeight(element) - } catch (error) { - return null; - } + const element = (document.querySelector(".b_pag") as HTMLElement); + return Utils.getElementTopHeight(element); } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageElement = document.querySelector(".sb_pagS_bp") @@ -91,24 +99,32 @@ const serpModule = function () { } } - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { + // Make sure the target is in the search area if (target.matches("#b_content *")) { + // Make sure the target is not a pagination element, organic element, or ad element if (!target.matches(".b_pag *, #b_results > li.b_algo *, .b_ad > ul > li *, .b_adLastChild *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const url = new URL(href); - if (url.hostname === window.location.hostname) { + if (url.hostname.includes("bing.com")) { + // If the link URL is a valid link to a different page and the hostname includes + // bing.com, then it is an internal link. return href; } } else { + // If the link is not a valid link to a different page, it is possibly an internal link. return ""; } } else { + // If there is no href, then it is possibly an internal link. return ""; } } @@ -117,7 +133,7 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(): void { pageValues.pageIsCorrect = true; @@ -131,24 +147,25 @@ const serpModule = function () { pageValues.addInternalListeners(getInternalLink); } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); - }); - - window.addEventListener("load", function () { - determinePageValues(); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { + // If a mousedown has not been recorded on an ad, organic, or internal element then return if (!pageValues.mostRecentMousedown) { return; } + const normalizedUrl: string = Utils.getNormalizedUrl(url); + + // If the URL is for a redirect, get the URL it redirects to let redirectUrl = null; if (normalizedUrl.includes("bing.com/newtabredir")) { redirectUrl = Utils.getQueryVariable(url, "url") } + if (pageValues.mostRecentMousedown.type === ElementType.Ad) { if (normalizedUrl.includes("bing.com/aclk") || pageValues.mostRecentMousedown.href === url || @@ -173,8 +190,17 @@ const serpModule = function () { } } - webScience.pageManager.onPageVisitStop.addListener(({ timeStamp }) => { - pageValues.reportResults(timeStamp); + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); + + window.addEventListener("unload", (event) => { + pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); }; diff --git a/src/content-scripts/serp-scripts/duckduckgo.ts b/src/content-scripts/serp-scripts/duckduckgo.ts index 5414668..81c8af8 100644 --- a/src/content-scripts/serp-scripts/duckduckgo.ts +++ b/src/content-scripts/serp-scripts/duckduckgo.ts @@ -1,4 +1,4 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" import { timing } from "@mozilla/web-science"; @@ -6,10 +6,11 @@ import { timing } from "@mozilla/web-science"; * Content Script for DuckDuckGo SERP */ const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("DuckDuckGo", onNewTab); /** - * Get whether the page is a basic SERP page. + * @returns {boolean} Whether the page is a DuckDuckGo web SERP page. */ function getPageIsCorrect(): boolean { return !!document.querySelector("#duckbar_static li:first-child .is-active, #duckbar_new .is-active") && @@ -19,7 +20,10 @@ const serpModule = function () { } /** - * Determine the page number of the given element + * DuckDuckGo uses a continuous scroll on its SERP pages and so multiple pages of results can be in the same window. + * This function can be used to determine which page of results an organic result is part of. + * @param {Element} element - An organic search result element + * @returns {number} The page number of the given element. */ function getPageNumForElement(element: Element) { while (element) { @@ -31,15 +35,21 @@ const serpModule = function () { return 1 } + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = document.querySelectorAll("#links > div[id^='r1-']"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: getPageNumForElement(organicResult) }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: getPageNumForElement(organicResult) }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = document.querySelectorAll("#links > div[id^='r1-']"); const organicLinkElements: Element[][] = [] @@ -50,12 +60,15 @@ const serpModule = function () { } /** - * @returns {Array} An array of all the ad results on the page + * @returns {number} The number of ad results on the page. */ function getNumAdResults(): number { return document.querySelectorAll(".badge--ad").length; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { const adLinkElements: Element[] = []; @@ -78,7 +91,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -89,7 +102,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { try { @@ -102,7 +115,7 @@ const serpModule = function () { } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageElement = Utils.getXPathElement("(//div[contains(@class, 'result__pagenum')])[last()]") @@ -117,17 +130,19 @@ const serpModule = function () { determinePageValues(timing.now()); }); - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { if (target.matches("#zero_click_wrapper *, #vertical_wrapper *, #web_content_wrapper *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const url = new URL(href); - if (url.hostname === window.location.hostname) { + if (url.hostname.includes("duckduckgo.com")) { return href; } } else { @@ -141,14 +156,19 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(timeStamp: number): void { const newPageIsCorrect = getPageIsCorrect(); + + // DuckDuckGo uses History API when navigating between different search types + // for the same SERP query. We report results when going from a web SERP page + // to a different type of SERP page (ie. images or maps) if (pageValues.pageIsCorrect && !newPageIsCorrect) { pageValues.reportResults(timeStamp); pageValues.resetTracking(); } + pageValues.pageIsCorrect = newPageIsCorrect; pageValues.pageNum = getPageNum(); pageValues.searchAreaBottomHeight = getSearchAreaBottomHeight(); @@ -166,16 +186,12 @@ const serpModule = function () { } } - window.addEventListener("DOMContentLoaded", (event) => { - determinePageValues(timing.fromMonotonicClock(event.timeStamp, true)); - }); - - window.addEventListener("load", (event) => { - determinePageValues(timing.fromMonotonicClock(event.timeStamp, true)); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { if (!pageValues.mostRecentMousedown) { return; } @@ -200,6 +216,15 @@ const serpModule = function () { } } + window.addEventListener("DOMContentLoaded", (event) => { + determinePageValues(timing.fromMonotonicClock(event.timeStamp, true)); + }); + + window.addEventListener("load", (event) => { + determinePageValues(timing.fromMonotonicClock(event.timeStamp, true)); + pageValues.pageLoaded = true; + }); + webScience.pageManager.onPageVisitStart.addListener(({ timeStamp }) => { determinePageValues(timeStamp); }); diff --git a/src/content-scripts/serp-scripts/ecosia.ts b/src/content-scripts/serp-scripts/ecosia.ts index a271726..e317466 100644 --- a/src/content-scripts/serp-scripts/ecosia.ts +++ b/src/content-scripts/serp-scripts/ecosia.ts @@ -1,4 +1,4 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" import { timing } from "@mozilla/web-science"; @@ -6,17 +6,24 @@ import { timing } from "@mozilla/web-science"; * Content Script for Ecosia SERP */ const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("Ecosia", onNewTab); + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = document.querySelectorAll("div.card-web > div.result"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: null }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = document.querySelectorAll("div.card-web > div.result"); const organicLinkElements: Element[][] = [] @@ -27,12 +34,15 @@ const serpModule = function () { } /** - * @returns {Array} An array of all the ad results on the page + * @returns {number} The number of ad results on the page. */ function getNumAdResults(): number { return document.querySelectorAll(".card-ad > div, .card-productads > div").length; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { return Array.from(document.querySelectorAll(".card-ad > div [href], .card-productads > div [href]")).filter(adLinkElement => { return !adLinkElement.matches('.ad-hint-wrapper, .ad-hint-wrapper *'); @@ -40,7 +50,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -52,7 +62,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { try { @@ -65,25 +75,27 @@ const serpModule = function () { } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageNumFromUrl = Utils.getQueryVariable(window.location.href, "p"); return pageNumFromUrl ? Number(pageNumFromUrl) + 1 : 1; } - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { if (target.matches(".results-wrapper *")) { if (!target.matches(".pagination *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const url = new URL(href); - if (url.hostname === window.location.hostname) { + if (url.hostname.includes("ecosia.org")) { return href; } } else { @@ -98,7 +110,7 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(): void { pageValues.pageIsCorrect = true; @@ -112,16 +124,12 @@ const serpModule = function () { pageValues.addInternalListeners(getInternalLink); } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); - }); - - window.addEventListener("load", function () { - determinePageValues(); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { if (!pageValues.mostRecentMousedown) { return; } @@ -146,6 +154,15 @@ const serpModule = function () { } } + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); + window.addEventListener("unload", (event) => { pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); diff --git a/src/content-scripts/serp-scripts/google.ts b/src/content-scripts/serp-scripts/google.ts index 884be15..4ae4d0c 100644 --- a/src/content-scripts/serp-scripts/google.ts +++ b/src/content-scripts/serp-scripts/google.ts @@ -1,14 +1,15 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" /** * Content Scripts for Google SERP */ const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("Google", onNewTab); /** - * Get whether the page is a basic SERP page. + * @returns {boolean} Whether the page is a Google web SERP page. */ function getPageIsCorrect(): boolean { const tbm = Utils.getQueryVariable(window.location.href, "tbm") @@ -21,15 +22,21 @@ const serpModule = function () { return false; } + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = document.querySelectorAll("div[class='g']:not(.related-question-pair div[class='g'])"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: null }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = document.querySelectorAll("div[class='g']:not(.related-question-pair div[class='g'])"); const organicLinkElements: Element[][] = [] @@ -40,7 +47,7 @@ const serpModule = function () { } /** - * @returns {Array} An array of all the ad results on the page + * @returns {number} The number of ad results on the page. */ function getNumAdResults(): number { // gets all basic keyword ads @@ -68,6 +75,9 @@ const serpModule = function () { return nonKeywordAds.length + keywordAds.length; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { // gets all basic keyword ads const keywordAds = document.querySelectorAll("[aria-label='Ads'] > div") @@ -103,7 +113,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -116,7 +126,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { try { @@ -139,29 +149,31 @@ const serpModule = function () { } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageElement = Utils.getXPathElement("//div[@role='navigation']//tbody/tr/td[normalize-space(text())]") return pageElement ? Number(pageElement.textContent) : -1; } - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { if (target.matches("#rcnt *, #appbar *, #atvcap *")) { if (!target.matches("[role=navigation] *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const url = new URL(href); - if (url.hostname === window.location.hostname) { + if (url.hostname.includes("google.com")) { if (url.pathname === "/url") { const newUrlString = Utils.getQueryVariable(href, "url"); const newUrl = new URL(newUrlString) - if (newUrl.hostname === window.location.hostname) { + if (newUrl.hostname.includes("google.com")) { return newUrlString; } } else if (url.pathname.includes("/aclk")) { @@ -182,7 +194,7 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(): void { pageValues.pageIsCorrect = getPageIsCorrect(); @@ -197,16 +209,12 @@ const serpModule = function () { pageValues.addInternalListeners(getInternalLink); } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); - }); - - window.addEventListener("load", function () { - determinePageValues(); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { if (!pageValues.mostRecentMousedown) { return; } @@ -240,6 +248,15 @@ const serpModule = function () { } } + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); + webScience.pageManager.onPageVisitStart.addListener(() => { pageValues.resetTracking(); determinePageValues(); diff --git a/src/content-scripts/serp-scripts/yahoo.ts b/src/content-scripts/serp-scripts/yahoo.ts index f87e21a..fa516ca 100644 --- a/src/content-scripts/serp-scripts/yahoo.ts +++ b/src/content-scripts/serp-scripts/yahoo.ts @@ -1,31 +1,37 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" import { timing } from "@mozilla/web-science"; - /** * Content Scripts for Yahoo SERP */ const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("Yahoo", onNewTab); /** - * Get whether the page is a basic SERP page. + * @returns {boolean} Whether the page is a Yahoo web SERP page. */ function getPageIsCorrect(): boolean { const url = new URL(window.location.href); return url.hostname === "search.yahoo.com" || url.hostname === "www.search.yahoo.com"; } + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = document.querySelectorAll("#web > .searchCenterMiddle > li > .algo"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: null }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = document.querySelectorAll("#web > .searchCenterMiddle > li > .algo"); const organicLinkElements: Element[][] = [] @@ -36,12 +42,15 @@ const serpModule = function () { } /** - * @returns {Array} An array of all the ad results on the page + * @returns {number} The number of ad results on the page. */ function getNumAdResults(): number { return document.querySelectorAll("ol.searchCenterTopAds > li > .ads, ol.searchCenterBottomAds > li > .ads, ol.searchRightTopAds > li, ol.searchRightMiddleAds > li, ol.searchRightBottomAds > li").length; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { const adLinkElements: Element[] = []; @@ -55,7 +64,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -67,7 +76,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { try { @@ -79,7 +88,7 @@ const serpModule = function () { } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageElement = document.querySelector(".pages strong") @@ -90,18 +99,20 @@ const serpModule = function () { } } - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { if (target.matches("#bd *")) { if (!target.matches(".pagination *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const url = new URL(href); - if (url.hostname === window.location.hostname) { + if (url.hostname.includes("yahoo.com")) { return href; } } else { @@ -116,7 +127,7 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(): void { pageValues.pageIsCorrect = getPageIsCorrect(); @@ -131,16 +142,12 @@ const serpModule = function () { pageValues.addInternalListeners(getInternalLink); } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); - }); - - window.addEventListener("load", function () { - determinePageValues(); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { if (!pageValues.mostRecentMousedown) { return; } @@ -165,6 +172,15 @@ const serpModule = function () { } } + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); + window.addEventListener("unload", (event) => { pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); diff --git a/src/content-scripts/serp-scripts/yandex.ts b/src/content-scripts/serp-scripts/yandex.ts index f6016ff..aee7050 100644 --- a/src/content-scripts/serp-scripts/yandex.ts +++ b/src/content-scripts/serp-scripts/yandex.ts @@ -1,29 +1,37 @@ -import { PageValues, ElementType } from "../common.js" +import { PageValues } from "../common.js" import * as Utils from "../Utils.js" import { timing } from "@mozilla/web-science"; + /** * Content Scripts for Yandex SERP */ const serpModule = function () { + // Create a pageValues object to track data for the SERP page const pageValues = new PageValues("Yandex", onNewTab); /** - * Get whether the page is a basic SERP page. + * @returns {boolean} Whether the page is a Yandex web SERP page. */ function getPageIsCorrect(): boolean { const url = new URL(window.location.href) return !url.pathname.includes("direct") } + /** + * @returns {OrganicDetail[]} An array of details for each of the organic search results. + */ function getOrganicDetails(): OrganicDetail[] { const organicResults = Utils.getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]"); const organicDetails: OrganicDetail[] = [] for (const organicResult of organicResults) { - organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getNextElementTopHeight(organicResult), PageNum: null }) + organicDetails.push({ TopHeight: Utils.getElementTopHeight(organicResult), BottomHeight: Utils.getElementBottomHeight(organicResult), PageNum: null }) } return organicDetails; } + /** + * @returns {Element[][]} An array of the organic link elements for each of the organic search results. + */ function getOrganicLinkElements(): Element[][] { const organicResults = Utils.getXPathElements("//li[contains(@class, 'serp-item') and div[contains(@class, 'organic') and not(descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама'])]]"); const organicLinkElements: Element[][] = [] @@ -34,12 +42,15 @@ const serpModule = function () { } /** - * @returns {Array} An array of all the ad results on the page + * @returns {number} The number of ad results on the page. */ function getNumAdResults(): number { return Utils.getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]").length; } + /** + * @returns {Element[]} An array of ad link elements on the page. + */ function getAdLinkElements(): Element[] { const adLinkElements: Element[] = []; const adElements = Utils.getXPathElements("//li[contains(@class, 'serp-item') and descendant::*[normalize-space(text()) = 'ad' or normalize-space(text()) = 'advertising' or normalize-space(text()) = 'реклама']]"); @@ -50,7 +61,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the top of the search area. + * @returns {number} The number of pixels between the top of the page and the top of the search area. */ function getSearchAreaTopHeight(): number { try { @@ -61,7 +72,7 @@ const serpModule = function () { } /** - * Get the number of pixels between the top of the page and the bottom of the search area. + * @returns {number} The number of pixels between the top of the page and the bottom of the search area. */ function getSearchAreaBottomHeight(): number { try { @@ -75,23 +86,25 @@ const serpModule = function () { } /** - * Get the page number. + * @returns {number} The page number. */ function getPageNum(): number { const pageNumFromUrl = Utils.getQueryVariable(window.location.href, "p"); return pageNumFromUrl ? Number(pageNumFromUrl) + 1 : 1; } - // Returns the href if it is an internal link - // Returns empty string if the click was in the search area but there was no link - // Returns null otherwise + /** + * @param {Element} target - the target of a click event. + * @returns {string} A link if the target was an internal link element in the search area. + * An empty string if it was a possible internal link element. null otherwise. + */ function getInternalLink(target: Element): string { if (target.matches(".main *")) { if (!target.matches(".pager *")) { const hrefElement = target.closest("[href]"); if (hrefElement) { const href = (hrefElement as any).href; - if (Utils.isLinkToDifferentPage(href)) { + if (Utils.isValidLinkToDifferentPage(href)) { const url = new URL(href); if (url.hostname.includes("yandex.ru") || url.hostname.includes("yandex.com")) { if (!url.hostname.includes("yabs.yandex")) { @@ -110,7 +123,7 @@ const serpModule = function () { } /** - * Determine all the page values and send the query to the background page + * Determines the page values and adds listeners */ function determinePageValues(): void { pageValues.pageIsCorrect = getPageIsCorrect(); @@ -125,16 +138,12 @@ const serpModule = function () { pageValues.addInternalListeners(getInternalLink); } - window.addEventListener("DOMContentLoaded", function () { - determinePageValues(); - }); - - window.addEventListener("load", function () { - determinePageValues(); - pageValues.pageLoaded = true; - }); - - function onNewTab(url) { + /** + * A callback that will be passed the string URL of new tabs opened from the page. It should + * determine if the new tab corresponds with an ad click, organic click, or internal click. + * @param {string} url - the url string of a new tab opened from the page. + */ + function onNewTab(url: string) { if (!pageValues.mostRecentMousedown) { return; } @@ -161,6 +170,15 @@ const serpModule = function () { } } + window.addEventListener("DOMContentLoaded", function () { + determinePageValues(); + }); + + window.addEventListener("load", function () { + determinePageValues(); + pageValues.pageLoaded = true; + }); + window.addEventListener("unload", (event) => { pageValues.reportResults(timing.fromMonotonicClock(event.timeStamp, true)); }); diff --git a/src/decs.d.ts b/src/decs.d.ts index 1f626ff..4a7953d 100644 --- a/src/decs.d.ts +++ b/src/decs.d.ts @@ -1,2 +1,17 @@ declare module "@mozilla/web-science"; -declare const browser; \ No newline at end of file +declare const browser; +declare let webScience: { + pageManager: { + pageId, + url, + referrer, + onPageVisitStart, + onPageVisitStop, + onPageAttentionUpdate, + onPageAudioUpdate, + pageHasAttention, + pageHasAudio, + pageVisitStarted, + pageVisitStartTime + } +} \ No newline at end of file From 97147003c911c52b0935dd271903eb2a3d02daee Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Sat, 26 Jun 2021 12:42:22 -0400 Subject: [PATCH 175/399] Building intervention pages with Rollup Svelte --- pages/assets/css/bulma.css | 9671 +++++++++++++++++ pages/assets/css/fontawesome.all.min.css | 5 + pages/{ => assets}/css/style.css | 0 pages/{ => assets}/js/choice_screen.js | 0 pages/{ => assets}/js/notice.js | 2 +- pages/{logos/ask.png => assets/logos/Ask.png} | Bin .../baidu.png => assets/logos/Baidu.png} | Bin .../{logos/bing.png => assets/logos/Bing.png} | Bin .../logos/DuckDuckGo.png} | Bin .../ecosia.png => assets/logos/Ecosia.png} | Bin .../google.png => assets/logos/Google.png} | Bin .../logos/Princeton.png} | Bin .../yahoo.png => assets/logos/Yahoo.png} | Bin .../yandex.png => assets/logos/Yandex.png} | Bin pages/choice_screen_1.html | 118 - pages/choice_screen_2.html | 134 - pages/choice_screen_3.html | 117 - pages/choice_screen_4.html | 176 - .../choice_screen/ChoiceScreen.svelte | 116 + pages/components/choice_screen/Entry.svelte | 30 + .../EntryHiddenDescription.svelte | 35 + .../EntryVisibleDescription.svelte | 29 + pages/components/notice/Notice.svelte | 73 + pages/notice_1.html | 69 - pages/notice_2.html | 77 - pages/template.html | 26 + rollup.config.js | 57 + src/Intervention.ts | 4 +- 28 files changed, 10045 insertions(+), 694 deletions(-) create mode 100644 pages/assets/css/bulma.css create mode 100644 pages/assets/css/fontawesome.all.min.css rename pages/{ => assets}/css/style.css (100%) rename pages/{ => assets}/js/choice_screen.js (100%) rename pages/{ => assets}/js/notice.js (97%) rename pages/{logos/ask.png => assets/logos/Ask.png} (100%) rename pages/{logos/baidu.png => assets/logos/Baidu.png} (100%) rename pages/{logos/bing.png => assets/logos/Bing.png} (100%) rename pages/{logos/duckduckgo.png => assets/logos/DuckDuckGo.png} (100%) rename pages/{logos/ecosia.png => assets/logos/Ecosia.png} (100%) rename pages/{logos/google.png => assets/logos/Google.png} (100%) rename pages/{logos/princeton.png => assets/logos/Princeton.png} (100%) rename pages/{logos/yahoo.png => assets/logos/Yahoo.png} (100%) rename pages/{logos/yandex.png => assets/logos/Yandex.png} (100%) delete mode 100644 pages/choice_screen_1.html delete mode 100644 pages/choice_screen_2.html delete mode 100644 pages/choice_screen_3.html delete mode 100644 pages/choice_screen_4.html create mode 100644 pages/components/choice_screen/ChoiceScreen.svelte create mode 100644 pages/components/choice_screen/Entry.svelte create mode 100644 pages/components/choice_screen/EntryHiddenDescription.svelte create mode 100644 pages/components/choice_screen/EntryVisibleDescription.svelte create mode 100644 pages/components/notice/Notice.svelte delete mode 100644 pages/notice_1.html delete mode 100644 pages/notice_2.html create mode 100644 pages/template.html diff --git a/pages/assets/css/bulma.css b/pages/assets/css/bulma.css new file mode 100644 index 0000000..4dad818 --- /dev/null +++ b/pages/assets/css/bulma.css @@ -0,0 +1,9671 @@ +/*! bulma.io v0.7.1 | MIT License | github.com/jgthms/bulma */ +@-webkit-keyframes spinAround { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spinAround { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.select:not(.is-multiple):not(.is-loading)::after, .navbar-link::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: center; + transform-origin: center; + width: 0.625em; +} + +.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .message:not(:last-child), .tabs:not(:last-child) { + margin-bottom: 1.5rem; +} + +.delete, .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; +} + +.delete::before, .modal-close::before, .delete::after, .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform: translateX(-50%) translateY(-50%) rotate(45deg); + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.delete::before, .modal-close::before { + height: 2px; + width: 50%; +} + +.delete::after, .modal-close::after { + height: 50%; + width: 2px; +} + +.delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); +} + +.delete:active, .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); +} + +.is-small.delete, .is-small.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; +} + +.is-medium.delete, .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; +} + +.is-large.delete, .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; +} + +.button.is-loading::after, .select.is-loading::after, .control.is-loading::after, .loader { + -webkit-animation: spinAround 500ms infinite linear; + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; +} + +.is-overlay, .image.is-square img, .image.is-1by1 img, .image.is-5by4 img, .image.is-4by3 img, .image.is-3by2 img, .image.is-5by3 img, .image.is-16by9 img, .image.is-2by1 img, .image.is-3by1 img, .image.is-4by5 img, .image.is-3by4 img, .image.is-2by3 img, .image.is-3by5 img, .image.is-9by16 img, .image.is-1by2 img, .image.is-1by3 img, .modal, .modal-background, .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.button, .input, +.textarea, .select select, .file-cta, +.file-name, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; +} + +.button:focus, .input:focus, +.textarea:focus, .select select:focus, .file-cta:focus, +.file-name:focus, .pagination-previous:focus, +.pagination-next:focus, +.pagination-link:focus, +.pagination-ellipsis:focus, .is-focused.button, .is-focused.input, +.is-focused.textarea, .select select.is-focused, .is-focused.file-cta, +.is-focused.file-name, .is-focused.pagination-previous, +.is-focused.pagination-next, +.is-focused.pagination-link, +.is-focused.pagination-ellipsis, .button:active, .input:active, +.textarea:active, .select select:active, .file-cta:active, +.file-name:active, .pagination-previous:active, +.pagination-next:active, +.pagination-link:active, +.pagination-ellipsis:active, .is-active.button, .is-active.input, +.is-active.textarea, .select select.is-active, .is-active.file-cta, +.is-active.file-name, .is-active.pagination-previous, +.is-active.pagination-next, +.is-active.pagination-link, +.is-active.pagination-ellipsis { + outline: none; +} + +.button[disabled], .input[disabled], +.textarea[disabled], .select select[disabled], .file-cta[disabled], +.file-name[disabled], .pagination-previous[disabled], +.pagination-next[disabled], +.pagination-link[disabled], +.pagination-ellipsis[disabled] { + cursor: not-allowed; +} + +/*! minireset.css v0.0.3 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; +} + +ul { + list-style: none; +} + +button, +input, +select, +textarea { + margin: 0; +} + +html { + box-sizing: border-box; +} + +*, *::before, *::after { + box-sizing: inherit; +} + +img, +audio, +video { + height: auto; + max-width: 100%; +} + +iframe { + border: 0; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; + text-align: left; +} + +html { + background-color: white; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: hidden; + overflow-y: scroll; + text-rendering: optimizeLegibility; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + text-size-adjust: 100%; +} + +article, +aside, +figure, +footer, +header, +hgroup, +section { + display: block; +} + +body, +button, +input, +select, +textarea { + font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif; +} + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: monospace; +} + +body { + color: #4a4a4a; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; +} + +a { + color: #3273dc; + cursor: pointer; + text-decoration: none; +} + +a strong { + color: currentColor; +} + +a:hover { + color: #363636; +} + +code { + background-color: whitesmoke; + color: #ff3860; + font-size: 0.875em; + font-weight: normal; + padding: 0.25em 0.5em 0.25em; +} + +hr { + background-color: whitesmoke; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; +} + +img { + height: auto; + max-width: 100%; +} + +input[type="checkbox"], +input[type="radio"] { + vertical-align: baseline; +} + +small { + font-size: 0.875em; +} + +span { + font-style: inherit; + font-weight: inherit; +} + +strong { + color: #363636; + font-weight: 700; +} + +pre { + -webkit-overflow-scrolling: touch; + background-color: whitesmoke; + color: #4a4a4a; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; +} + +pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; +} + +table td, +table th { + text-align: left; + vertical-align: top; +} + +table th { + color: #363636; +} + +.is-clearfix::after { + clear: both; + content: " "; + display: table; +} + +.is-pulled-left { + float: left !important; +} + +.is-pulled-right { + float: right !important; +} + +.is-clipped { + overflow: hidden !important; +} + +.is-size-1 { + font-size: 3rem !important; +} + +.is-size-2 { + font-size: 2.5rem !important; +} + +.is-size-3 { + font-size: 2rem !important; +} + +.is-size-4 { + font-size: 1.5rem !important; +} + +.is-size-5 { + font-size: 1.25rem !important; +} + +.is-size-6 { + font-size: 1rem !important; +} + +.is-size-7 { + font-size: 0.75rem !important; +} + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; + } + .is-size-2-mobile { + font-size: 2.5rem !important; + } + .is-size-3-mobile { + font-size: 2rem !important; + } + .is-size-4-mobile { + font-size: 1.5rem !important; + } + .is-size-5-mobile { + font-size: 1.25rem !important; + } + .is-size-6-mobile { + font-size: 1rem !important; + } + .is-size-7-mobile { + font-size: 0.75rem !important; + } +} + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; + } + .is-size-2-tablet { + font-size: 2.5rem !important; + } + .is-size-3-tablet { + font-size: 2rem !important; + } + .is-size-4-tablet { + font-size: 1.5rem !important; + } + .is-size-5-tablet { + font-size: 1.25rem !important; + } + .is-size-6-tablet { + font-size: 1rem !important; + } + .is-size-7-tablet { + font-size: 0.75rem !important; + } +} + +@media screen and (max-width: 1087px) { + .is-size-1-touch { + font-size: 3rem !important; + } + .is-size-2-touch { + font-size: 2.5rem !important; + } + .is-size-3-touch { + font-size: 2rem !important; + } + .is-size-4-touch { + font-size: 1.5rem !important; + } + .is-size-5-touch { + font-size: 1.25rem !important; + } + .is-size-6-touch { + font-size: 1rem !important; + } + .is-size-7-touch { + font-size: 0.75rem !important; + } +} + +@media screen and (min-width: 1088px) { + .is-size-1-desktop { + font-size: 3rem !important; + } + .is-size-2-desktop { + font-size: 2.5rem !important; + } + .is-size-3-desktop { + font-size: 2rem !important; + } + .is-size-4-desktop { + font-size: 1.5rem !important; + } + .is-size-5-desktop { + font-size: 1.25rem !important; + } + .is-size-6-desktop { + font-size: 1rem !important; + } + .is-size-7-desktop { + font-size: 0.75rem !important; + } +} + +@media screen and (min-width: 1280px) { + .is-size-1-widescreen { + font-size: 3rem !important; + } + .is-size-2-widescreen { + font-size: 2.5rem !important; + } + .is-size-3-widescreen { + font-size: 2rem !important; + } + .is-size-4-widescreen { + font-size: 1.5rem !important; + } + .is-size-5-widescreen { + font-size: 1.25rem !important; + } + .is-size-6-widescreen { + font-size: 1rem !important; + } + .is-size-7-widescreen { + font-size: 0.75rem !important; + } +} + +@media screen and (min-width: 1472px) { + .is-size-1-fullhd { + font-size: 3rem !important; + } + .is-size-2-fullhd { + font-size: 2.5rem !important; + } + .is-size-3-fullhd { + font-size: 2rem !important; + } + .is-size-4-fullhd { + font-size: 1.5rem !important; + } + .is-size-5-fullhd { + font-size: 1.25rem !important; + } + .is-size-6-fullhd { + font-size: 1rem !important; + } + .is-size-7-fullhd { + font-size: 0.75rem !important; + } +} + +.has-text-centered { + text-align: center !important; +} + +.has-text-justified { + text-align: justify !important; +} + +.has-text-left { + text-align: left !important; +} + +.has-text-right { + text-align: right !important; +} + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; + } +} + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-centered-tablet-only { + text-align: center !important; + } +} + +@media screen and (max-width: 1087px) { + .has-text-centered-touch { + text-align: center !important; + } +} + +@media screen and (min-width: 1088px) { + .has-text-centered-desktop { + text-align: center !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-centered-desktop-only { + text-align: center !important; + } +} + +@media screen and (min-width: 1280px) { + .has-text-centered-widescreen { + text-align: center !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-centered-widescreen-only { + text-align: center !important; + } +} + +@media screen and (min-width: 1472px) { + .has-text-centered-fullhd { + text-align: center !important; + } +} + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; + } +} + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-justified-tablet-only { + text-align: justify !important; + } +} + +@media screen and (max-width: 1087px) { + .has-text-justified-touch { + text-align: justify !important; + } +} + +@media screen and (min-width: 1088px) { + .has-text-justified-desktop { + text-align: justify !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-justified-desktop-only { + text-align: justify !important; + } +} + +@media screen and (min-width: 1280px) { + .has-text-justified-widescreen { + text-align: justify !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-justified-widescreen-only { + text-align: justify !important; + } +} + +@media screen and (min-width: 1472px) { + .has-text-justified-fullhd { + text-align: justify !important; + } +} + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; + } +} + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-left-tablet-only { + text-align: left !important; + } +} + +@media screen and (max-width: 1087px) { + .has-text-left-touch { + text-align: left !important; + } +} + +@media screen and (min-width: 1088px) { + .has-text-left-desktop { + text-align: left !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-left-desktop-only { + text-align: left !important; + } +} + +@media screen and (min-width: 1280px) { + .has-text-left-widescreen { + text-align: left !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-left-widescreen-only { + text-align: left !important; + } +} + +@media screen and (min-width: 1472px) { + .has-text-left-fullhd { + text-align: left !important; + } +} + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; + } +} + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-right-tablet-only { + text-align: right !important; + } +} + +@media screen and (max-width: 1087px) { + .has-text-right-touch { + text-align: right !important; + } +} + +@media screen and (min-width: 1088px) { + .has-text-right-desktop { + text-align: right !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-right-desktop-only { + text-align: right !important; + } +} + +@media screen and (min-width: 1280px) { + .has-text-right-widescreen { + text-align: right !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-right-widescreen-only { + text-align: right !important; + } +} + +@media screen and (min-width: 1472px) { + .has-text-right-fullhd { + text-align: right !important; + } +} + +.is-capitalized { + text-transform: capitalize !important; +} + +.is-lowercase { + text-transform: lowercase !important; +} + +.is-uppercase { + text-transform: uppercase !important; +} + +.is-italic { + font-style: italic !important; +} + +.has-text-white { + color: white !important; +} + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; +} + +.has-background-white { + background-color: white !important; +} + +.has-text-black { + color: #0a0a0a !important; +} + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; +} + +.has-background-black { + background-color: #0a0a0a !important; +} + +.has-text-light { + color: whitesmoke !important; +} + +a.has-text-light:hover, a.has-text-light:focus { + color: #dbdbdb !important; +} + +.has-background-light { + background-color: whitesmoke !important; +} + +.has-text-dark { + color: #363636 !important; +} + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #1c1c1c !important; +} + +.has-background-dark { + background-color: #363636 !important; +} + +.has-text-primary { + color: #00d1b2 !important; +} + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #009e86 !important; +} + +.has-background-primary { + background-color: #00d1b2 !important; +} + +.has-text-link { + color: #3273dc !important; +} + +a.has-text-link:hover, a.has-text-link:focus { + color: #205bbc !important; +} + +.has-background-link { + background-color: #3273dc !important; +} + +.has-text-info { + color: #209cee !important; +} + +a.has-text-info:hover, a.has-text-info:focus { + color: #0f81cc !important; +} + +.has-background-info { + background-color: #209cee !important; +} + +.has-text-success { + color: #23d160 !important; +} + +a.has-text-success:hover, a.has-text-success:focus { + color: #1ca64c !important; +} + +.has-background-success { + background-color: #23d160 !important; +} + +.has-text-warning { + color: #ffdd57 !important; +} + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #ffd324 !important; +} + +.has-background-warning { + background-color: #ffdd57 !important; +} + +.has-text-danger { + color: #ff3860 !important; +} + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #ff0537 !important; +} + +.has-background-danger { + background-color: #ff3860 !important; +} + +.has-text-black-bis { + color: #121212 !important; +} + +.has-background-black-bis { + background-color: #121212 !important; +} + +.has-text-black-ter { + color: #242424 !important; +} + +.has-background-black-ter { + background-color: #242424 !important; +} + +.has-text-grey-darker { + color: #363636 !important; +} + +.has-background-grey-darker { + background-color: #363636 !important; +} + +.has-text-grey-dark { + color: #4a4a4a !important; +} + +.has-background-grey-dark { + background-color: #4a4a4a !important; +} + +.has-text-grey { + color: #7a7a7a !important; +} + +.has-background-grey { + background-color: #7a7a7a !important; +} + +.has-text-grey-light { + color: #b5b5b5 !important; +} + +.has-background-grey-light { + background-color: #b5b5b5 !important; +} + +.has-text-grey-lighter { + color: #dbdbdb !important; +} + +.has-background-grey-lighter { + background-color: #dbdbdb !important; +} + +.has-text-white-ter { + color: whitesmoke !important; +} + +.has-background-white-ter { + background-color: whitesmoke !important; +} + +.has-text-white-bis { + color: #fafafa !important; +} + +.has-background-white-bis { + background-color: #fafafa !important; +} + +.has-text-weight-light { + font-weight: 300 !important; +} + +.has-text-weight-normal { + font-weight: 400 !important; +} + +.has-text-weight-semibold { + font-weight: 600 !important; +} + +.has-text-weight-bold { + font-weight: 700 !important; +} + +.is-block { + display: block !important; +} + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; + } +} + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-block-tablet-only { + display: block !important; + } +} + +@media screen and (max-width: 1087px) { + .is-block-touch { + display: block !important; + } +} + +@media screen and (min-width: 1088px) { + .is-block-desktop { + display: block !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-block-desktop-only { + display: block !important; + } +} + +@media screen and (min-width: 1280px) { + .is-block-widescreen { + display: block !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-block-widescreen-only { + display: block !important; + } +} + +@media screen and (min-width: 1472px) { + .is-block-fullhd { + display: block !important; + } +} + +.is-flex { + display: flex !important; +} + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; + } +} + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-flex-tablet-only { + display: flex !important; + } +} + +@media screen and (max-width: 1087px) { + .is-flex-touch { + display: flex !important; + } +} + +@media screen and (min-width: 1088px) { + .is-flex-desktop { + display: flex !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-flex-desktop-only { + display: flex !important; + } +} + +@media screen and (min-width: 1280px) { + .is-flex-widescreen { + display: flex !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-flex-widescreen-only { + display: flex !important; + } +} + +@media screen and (min-width: 1472px) { + .is-flex-fullhd { + display: flex !important; + } +} + +.is-inline { + display: inline !important; +} + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; + } +} + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-inline-tablet-only { + display: inline !important; + } +} + +@media screen and (max-width: 1087px) { + .is-inline-touch { + display: inline !important; + } +} + +@media screen and (min-width: 1088px) { + .is-inline-desktop { + display: inline !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-inline-desktop-only { + display: inline !important; + } +} + +@media screen and (min-width: 1280px) { + .is-inline-widescreen { + display: inline !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-inline-widescreen-only { + display: inline !important; + } +} + +@media screen and (min-width: 1472px) { + .is-inline-fullhd { + display: inline !important; + } +} + +.is-inline-block { + display: inline-block !important; +} + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; + } +} + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-inline-block-tablet-only { + display: inline-block !important; + } +} + +@media screen and (max-width: 1087px) { + .is-inline-block-touch { + display: inline-block !important; + } +} + +@media screen and (min-width: 1088px) { + .is-inline-block-desktop { + display: inline-block !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-inline-block-desktop-only { + display: inline-block !important; + } +} + +@media screen and (min-width: 1280px) { + .is-inline-block-widescreen { + display: inline-block !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-inline-block-widescreen-only { + display: inline-block !important; + } +} + +@media screen and (min-width: 1472px) { + .is-inline-block-fullhd { + display: inline-block !important; + } +} + +.is-inline-flex { + display: inline-flex !important; +} + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; + } +} + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; + } +} + +@media screen and (max-width: 1087px) { + .is-inline-flex-touch { + display: inline-flex !important; + } +} + +@media screen and (min-width: 1088px) { + .is-inline-flex-desktop { + display: inline-flex !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; + } +} + +@media screen and (min-width: 1280px) { + .is-inline-flex-widescreen { + display: inline-flex !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; + } +} + +@media screen and (min-width: 1472px) { + .is-inline-flex-fullhd { + display: inline-flex !important; + } +} + +.is-hidden { + display: none !important; +} + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; + } +} + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-hidden-tablet-only { + display: none !important; + } +} + +@media screen and (max-width: 1087px) { + .is-hidden-touch { + display: none !important; + } +} + +@media screen and (min-width: 1088px) { + .is-hidden-desktop { + display: none !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-hidden-desktop-only { + display: none !important; + } +} + +@media screen and (min-width: 1280px) { + .is-hidden-widescreen { + display: none !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-hidden-widescreen-only { + display: none !important; + } +} + +@media screen and (min-width: 1472px) { + .is-hidden-fullhd { + display: none !important; + } +} + +.is-invisible { + visibility: hidden !important; +} + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; + } +} + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; + } +} + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-invisible-tablet-only { + visibility: hidden !important; + } +} + +@media screen and (max-width: 1087px) { + .is-invisible-touch { + visibility: hidden !important; + } +} + +@media screen and (min-width: 1088px) { + .is-invisible-desktop { + visibility: hidden !important; + } +} + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-invisible-desktop-only { + visibility: hidden !important; + } +} + +@media screen and (min-width: 1280px) { + .is-invisible-widescreen { + visibility: hidden !important; + } +} + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-invisible-widescreen-only { + visibility: hidden !important; + } +} + +@media screen and (min-width: 1472px) { + .is-invisible-fullhd { + visibility: hidden !important; + } +} + +.is-marginless { + margin: 0 !important; +} + +.is-paddingless { + padding: 0 !important; +} + +.is-radiusless { + border-radius: 0 !important; +} + +.is-shadowless { + box-shadow: none !important; +} + +.box { + background-color: white; + border-radius: 6px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #4a4a4a; + display: block; + padding: 1.25rem; +} + +a.box:hover, a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #3273dc; +} + +a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #3273dc; +} + +.button { + background-color: white; + border-color: #dbdbdb; + border-width: 1px; + color: #363636; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; +} + +.button strong { + color: inherit; +} + +.button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large { + height: 1.5em; + width: 1.5em; +} + +.button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; +} + +.button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); +} + +.button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); +} + +.button:hover, .button.is-hovered { + border-color: #b5b5b5; + color: #363636; +} + +.button:focus, .button.is-focused { + border-color: #3273dc; + color: #363636; +} + +.button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); +} + +.button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; +} + +.button.is-text { + background-color: transparent; + border-color: transparent; + color: #4a4a4a; + text-decoration: underline; +} + +.button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { + background-color: whitesmoke; + color: #363636; +} + +.button.is-text:active, .button.is-text.is-active { + background-color: #e8e8e8; + color: #363636; +} + +.button.is-text[disabled] { + background-color: transparent; + border-color: transparent; + box-shadow: none; +} + +.button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; +} + +.button.is-white:hover, .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; +} + +.button.is-white:focus, .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; +} + +.button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); +} + +.button.is-white:active, .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; +} + +.button.is-white[disabled] { + background-color: white; + border-color: transparent; + box-shadow: none; +} + +.button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; +} + +.button.is-white.is-inverted:hover { + background-color: black; +} + +.button.is-white.is-inverted[disabled] { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; +} + +.button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; +} + +.button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; +} + +.button.is-white.is-outlined:hover, .button.is-white.is-outlined:focus { + background-color: white; + border-color: white; + color: #0a0a0a; +} + +.button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; +} + +.button.is-white.is-outlined[disabled] { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; +} + +.button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; +} + +.button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined:focus { + background-color: #0a0a0a; + color: white; +} + +.button.is-white.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; +} + +.button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; +} + +.button.is-black:hover, .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; +} + +.button.is-black:focus, .button.is-black.is-focused { + border-color: transparent; + color: white; +} + +.button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); +} + +.button.is-black:active, .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; +} + +.button.is-black[disabled] { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; +} + +.button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; +} + +.button.is-black.is-inverted:hover { + background-color: #f2f2f2; +} + +.button.is-black.is-inverted[disabled] { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; +} + +.button.is-black.is-loading::after { + border-color: transparent transparent white white !important; +} + +.button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; +} + +.button.is-black.is-outlined:hover, .button.is-black.is-outlined:focus { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; +} + +.button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; +} + +.button.is-black.is-outlined[disabled] { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; +} + +.button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; +} + +.button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined:focus { + background-color: white; + color: #0a0a0a; +} + +.button.is-black.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; +} + +.button.is-light { + background-color: whitesmoke; + border-color: transparent; + color: #363636; +} + +.button.is-light:hover, .button.is-light.is-hovered { + background-color: #eeeeee; + border-color: transparent; + color: #363636; +} + +.button.is-light:focus, .button.is-light.is-focused { + border-color: transparent; + color: #363636; +} + +.button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); +} + +.button.is-light:active, .button.is-light.is-active { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; +} + +.button.is-light[disabled] { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; +} + +.button.is-light.is-inverted { + background-color: #363636; + color: whitesmoke; +} + +.button.is-light.is-inverted:hover { + background-color: #292929; +} + +.button.is-light.is-inverted[disabled] { + background-color: #363636; + border-color: transparent; + box-shadow: none; + color: whitesmoke; +} + +.button.is-light.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; +} + +.button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; +} + +.button.is-light.is-outlined:hover, .button.is-light.is-outlined:focus { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; +} + +.button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; +} + +.button.is-light.is-outlined[disabled] { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; +} + +.button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; +} + +.button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined:focus { + background-color: #363636; + color: whitesmoke; +} + +.button.is-light.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; +} + +.button.is-dark { + background-color: #363636; + border-color: transparent; + color: whitesmoke; +} + +.button.is-dark:hover, .button.is-dark.is-hovered { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; +} + +.button.is-dark:focus, .button.is-dark.is-focused { + border-color: transparent; + color: whitesmoke; +} + +.button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); +} + +.button.is-dark:active, .button.is-dark.is-active { + background-color: #292929; + border-color: transparent; + color: whitesmoke; +} + +.button.is-dark[disabled] { + background-color: #363636; + border-color: transparent; + box-shadow: none; +} + +.button.is-dark.is-inverted { + background-color: whitesmoke; + color: #363636; +} + +.button.is-dark.is-inverted:hover { + background-color: #e8e8e8; +} + +.button.is-dark.is-inverted[disabled] { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; + color: #363636; +} + +.button.is-dark.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; +} + +.button.is-dark.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; +} + +.button.is-dark.is-outlined:hover, .button.is-dark.is-outlined:focus { + background-color: #363636; + border-color: #363636; + color: whitesmoke; +} + +.button.is-dark.is-outlined.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; +} + +.button.is-dark.is-outlined[disabled] { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; +} + +.button.is-dark.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; +} + +.button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined:focus { + background-color: whitesmoke; + color: #363636; +} + +.button.is-dark.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; +} + +.button.is-primary { + background-color: #00d1b2; + border-color: transparent; + color: #fff; +} + +.button.is-primary:hover, .button.is-primary.is-hovered { + background-color: #00c4a7; + border-color: transparent; + color: #fff; +} + +.button.is-primary:focus, .button.is-primary.is-focused { + border-color: transparent; + color: #fff; +} + +.button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); +} + +.button.is-primary:active, .button.is-primary.is-active { + background-color: #00b89c; + border-color: transparent; + color: #fff; +} + +.button.is-primary[disabled] { + background-color: #00d1b2; + border-color: transparent; + box-shadow: none; +} + +.button.is-primary.is-inverted { + background-color: #fff; + color: #00d1b2; +} + +.button.is-primary.is-inverted:hover { + background-color: #f2f2f2; +} + +.button.is-primary.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #00d1b2; +} + +.button.is-primary.is-loading::after { + border-color: transparent transparent #fff #fff !important; +} + +.button.is-primary.is-outlined { + background-color: transparent; + border-color: #00d1b2; + color: #00d1b2; +} + +.button.is-primary.is-outlined:hover, .button.is-primary.is-outlined:focus { + background-color: #00d1b2; + border-color: #00d1b2; + color: #fff; +} + +.button.is-primary.is-outlined.is-loading::after { + border-color: transparent transparent #00d1b2 #00d1b2 !important; +} + +.button.is-primary.is-outlined[disabled] { + background-color: transparent; + border-color: #00d1b2; + box-shadow: none; + color: #00d1b2; +} + +.button.is-primary.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; +} + +.button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined:focus { + background-color: #fff; + color: #00d1b2; +} + +.button.is-primary.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; +} + +.button.is-link { + background-color: #3273dc; + border-color: transparent; + color: #fff; +} + +.button.is-link:hover, .button.is-link.is-hovered { + background-color: #276cda; + border-color: transparent; + color: #fff; +} + +.button.is-link:focus, .button.is-link.is-focused { + border-color: transparent; + color: #fff; +} + +.button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); +} + +.button.is-link:active, .button.is-link.is-active { + background-color: #2366d1; + border-color: transparent; + color: #fff; +} + +.button.is-link[disabled] { + background-color: #3273dc; + border-color: transparent; + box-shadow: none; +} + +.button.is-link.is-inverted { + background-color: #fff; + color: #3273dc; +} + +.button.is-link.is-inverted:hover { + background-color: #f2f2f2; +} + +.button.is-link.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #3273dc; +} + +.button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; +} + +.button.is-link.is-outlined { + background-color: transparent; + border-color: #3273dc; + color: #3273dc; +} + +.button.is-link.is-outlined:hover, .button.is-link.is-outlined:focus { + background-color: #3273dc; + border-color: #3273dc; + color: #fff; +} + +.button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #3273dc #3273dc !important; +} + +.button.is-link.is-outlined[disabled] { + background-color: transparent; + border-color: #3273dc; + box-shadow: none; + color: #3273dc; +} + +.button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; +} + +.button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined:focus { + background-color: #fff; + color: #3273dc; +} + +.button.is-link.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; +} + +.button.is-info { + background-color: #209cee; + border-color: transparent; + color: #fff; +} + +.button.is-info:hover, .button.is-info.is-hovered { + background-color: #1496ed; + border-color: transparent; + color: #fff; +} + +.button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; +} + +.button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); +} + +.button.is-info:active, .button.is-info.is-active { + background-color: #118fe4; + border-color: transparent; + color: #fff; +} + +.button.is-info[disabled] { + background-color: #209cee; + border-color: transparent; + box-shadow: none; +} + +.button.is-info.is-inverted { + background-color: #fff; + color: #209cee; +} + +.button.is-info.is-inverted:hover { + background-color: #f2f2f2; +} + +.button.is-info.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #209cee; +} + +.button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; +} + +.button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + color: #209cee; +} + +.button.is-info.is-outlined:hover, .button.is-info.is-outlined:focus { + background-color: #209cee; + border-color: #209cee; + color: #fff; +} + +.button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #209cee #209cee !important; +} + +.button.is-info.is-outlined[disabled] { + background-color: transparent; + border-color: #209cee; + box-shadow: none; + color: #209cee; +} + +.button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; +} + +.button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined:focus { + background-color: #fff; + color: #209cee; +} + +.button.is-info.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; +} + +.button.is-success { + background-color: #23d160; + border-color: transparent; + color: #fff; +} + +.button.is-success:hover, .button.is-success.is-hovered { + background-color: #22c65b; + border-color: transparent; + color: #fff; +} + +.button.is-success:focus, .button.is-success.is-focused { + border-color: transparent; + color: #fff; +} + +.button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); +} + +.button.is-success:active, .button.is-success.is-active { + background-color: #20bc56; + border-color: transparent; + color: #fff; +} + +.button.is-success[disabled] { + background-color: #23d160; + border-color: transparent; + box-shadow: none; +} + +.button.is-success.is-inverted { + background-color: #fff; + color: #23d160; +} + +.button.is-success.is-inverted:hover { + background-color: #f2f2f2; +} + +.button.is-success.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #23d160; +} + +.button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; +} + +.button.is-success.is-outlined { + background-color: transparent; + border-color: #23d160; + color: #23d160; +} + +.button.is-success.is-outlined:hover, .button.is-success.is-outlined:focus { + background-color: #23d160; + border-color: #23d160; + color: #fff; +} + +.button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #23d160 #23d160 !important; +} + +.button.is-success.is-outlined[disabled] { + background-color: transparent; + border-color: #23d160; + box-shadow: none; + color: #23d160; +} + +.button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; +} + +.button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined:focus { + background-color: #fff; + color: #23d160; +} + +.button.is-success.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; +} + +.button.is-warning { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); +} + +.button.is-warning:hover, .button.is-warning.is-hovered { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); +} + +.button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); +} + +.button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); +} + +.button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); +} + +.button.is-warning[disabled] { + background-color: #ffdd57; + border-color: transparent; + box-shadow: none; +} + +.button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; +} + +.button.is-warning.is-inverted:hover { + background-color: rgba(0, 0, 0, 0.7); +} + +.button.is-warning.is-inverted[disabled] { + background-color: rgba(0, 0, 0, 0.7); + border-color: transparent; + box-shadow: none; + color: #ffdd57; +} + +.button.is-warning.is-loading::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; +} + +.button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + color: #ffdd57; +} + +.button.is-warning.is-outlined:hover, .button.is-warning.is-outlined:focus { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); +} + +.button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; +} + +.button.is-warning.is-outlined[disabled] { + background-color: transparent; + border-color: #ffdd57; + box-shadow: none; + color: #ffdd57; +} + +.button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + color: rgba(0, 0, 0, 0.7); +} + +.button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined:focus { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; +} + +.button.is-warning.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + box-shadow: none; + color: rgba(0, 0, 0, 0.7); +} + +.button.is-danger { + background-color: #ff3860; + border-color: transparent; + color: #fff; +} + +.button.is-danger:hover, .button.is-danger.is-hovered { + background-color: #ff2b56; + border-color: transparent; + color: #fff; +} + +.button.is-danger:focus, .button.is-danger.is-focused { + border-color: transparent; + color: #fff; +} + +.button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); +} + +.button.is-danger:active, .button.is-danger.is-active { + background-color: #ff1f4b; + border-color: transparent; + color: #fff; +} + +.button.is-danger[disabled] { + background-color: #ff3860; + border-color: transparent; + box-shadow: none; +} + +.button.is-danger.is-inverted { + background-color: #fff; + color: #ff3860; +} + +.button.is-danger.is-inverted:hover { + background-color: #f2f2f2; +} + +.button.is-danger.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #ff3860; +} + +.button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; +} + +.button.is-danger.is-outlined { + background-color: transparent; + border-color: #ff3860; + color: #ff3860; +} + +.button.is-danger.is-outlined:hover, .button.is-danger.is-outlined:focus { + background-color: #ff3860; + border-color: #ff3860; + color: #fff; +} + +.button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #ff3860 #ff3860 !important; +} + +.button.is-danger.is-outlined[disabled] { + background-color: transparent; + border-color: #ff3860; + box-shadow: none; + color: #ff3860; +} + +.button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; +} + +.button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined:focus { + background-color: #fff; + color: #ff3860; +} + +.button.is-danger.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; +} + +.button.is-small { + border-radius: 2px; + font-size: 0.75rem; +} + +.button.is-medium { + font-size: 1.25rem; +} + +.button.is-large { + font-size: 1.5rem; +} + +.button[disabled] { + background-color: white; + border-color: #dbdbdb; + box-shadow: none; + opacity: 0.5; +} + +.button.is-fullwidth { + display: flex; + width: 100%; +} + +.button.is-loading { + color: transparent !important; + pointer-events: none; +} + +.button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; +} + +.button.is-static { + background-color: whitesmoke; + border-color: #dbdbdb; + color: #7a7a7a; + box-shadow: none; + pointer-events: none; +} + +.button.is-rounded { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; +} + +.buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.buttons .button { + margin-bottom: 0.5rem; +} + +.buttons .button:not(:last-child) { + margin-right: 0.5rem; +} + +.buttons:last-child { + margin-bottom: -0.5rem; +} + +.buttons:not(:last-child) { + margin-bottom: 1rem; +} + +.buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; +} + +.buttons.has-addons .button:last-child { + margin-right: 0; +} + +.buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { + z-index: 2; +} + +.buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { + z-index: 3; +} + +.buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { + z-index: 4; +} + +.buttons.has-addons .button.is-expanded { + flex-grow: 1; +} + +.buttons.is-centered { + justify-content: center; +} + +.buttons.is-right { + justify-content: flex-end; +} + +.container { + margin: 0 auto; + position: relative; +} + +@media screen and (min-width: 1088px) { + .container { + max-width: 960px; + width: 960px; + } + .container.is-fluid { + margin-left: 64px; + margin-right: 64px; + max-width: none; + width: auto; + } +} + +@media screen and (max-width: 1279px) { + .container.is-widescreen { + max-width: 1152px; + width: auto; + } +} + +@media screen and (max-width: 1471px) { + .container.is-fullhd { + max-width: 1344px; + width: auto; + } +} + +@media screen and (min-width: 1280px) { + .container { + max-width: 1152px; + width: 1152px; + } +} + +@media screen and (min-width: 1472px) { + .container { + max-width: 1344px; + width: 1344px; + } +} + +.content li + li { + margin-top: 0.25em; +} + +.content p:not(:last-child), +.content dl:not(:last-child), +.content ol:not(:last-child), +.content ul:not(:last-child), +.content blockquote:not(:last-child), +.content pre:not(:last-child), +.content table:not(:last-child) { + margin-bottom: 1em; +} + +.content h1, +.content h2, +.content h3, +.content h4, +.content h5, +.content h6 { + color: #363636; + font-weight: 600; + line-height: 1.125; +} + +.content h1 { + font-size: 2em; + margin-bottom: 0.5em; +} + +.content h1:not(:first-child) { + margin-top: 1em; +} + +.content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; +} + +.content h2:not(:first-child) { + margin-top: 1.1428em; +} + +.content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; +} + +.content h3:not(:first-child) { + margin-top: 1.3333em; +} + +.content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; +} + +.content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; +} + +.content h6 { + font-size: 1em; + margin-bottom: 1em; +} + +.content blockquote { + background-color: whitesmoke; + border-left: 5px solid #dbdbdb; + padding: 1.25em 1.5em; +} + +.content ol { + list-style: decimal outside; + margin-left: 2em; + margin-top: 1em; +} + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; +} + +.content ul ul { + list-style-type: circle; + margin-top: 0.5em; +} + +.content ul ul ul { + list-style-type: square; +} + +.content dd { + margin-left: 2em; +} + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; +} + +.content figure:not(:first-child) { + margin-top: 2em; +} + +.content figure:not(:last-child) { + margin-bottom: 2em; +} + +.content figure img { + display: inline-block; +} + +.content figure figcaption { + font-style: italic; +} + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 1.25em 1.5em; + white-space: pre; + word-wrap: normal; +} + +.content sup, +.content sub { + font-size: 75%; +} + +.content table { + width: 100%; +} + +.content table td, +.content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; +} + +.content table th { + color: #363636; + text-align: left; +} + +.content table thead td, +.content table thead th { + border-width: 0 0 2px; + color: #363636; +} + +.content table tfoot td, +.content table tfoot th { + border-width: 2px 0 0; + color: #363636; +} + +.content table tbody tr:last-child td, +.content table tbody tr:last-child th { + border-bottom-width: 0; +} + +.content.is-small { + font-size: 0.75rem; +} + +.content.is-medium { + font-size: 1.25rem; +} + +.content.is-large { + font-size: 1.5rem; +} + +.input, +.textarea { + background-color: white; + border-color: #dbdbdb; + color: #363636; + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; +} + +.input::-moz-placeholder, +.textarea::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.input::-webkit-input-placeholder, +.textarea::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.input:-moz-placeholder, +.textarea:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.input:-ms-input-placeholder, +.textarea:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.input:hover, .input.is-hovered, +.textarea:hover, +.textarea.is-hovered { + border-color: #b5b5b5; +} + +.input:focus, .input.is-focused, .input:active, .input.is-active, +.textarea:focus, +.textarea.is-focused, +.textarea:active, +.textarea.is-active { + border-color: #3273dc; + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); +} + +.input[disabled], +.textarea[disabled] { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #7a7a7a; +} + +.input[disabled]::-moz-placeholder, +.textarea[disabled]::-moz-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.input[disabled]::-webkit-input-placeholder, +.textarea[disabled]::-webkit-input-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.input[disabled]:-moz-placeholder, +.textarea[disabled]:-moz-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.input[disabled]:-ms-input-placeholder, +.textarea[disabled]:-ms-input-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.input[readonly], +.textarea[readonly] { + box-shadow: none; +} + +.input.is-white, +.textarea.is-white { + border-color: white; +} + +.input.is-white:focus, .input.is-white.is-focused, .input.is-white:active, .input.is-white.is-active, +.textarea.is-white:focus, +.textarea.is-white.is-focused, +.textarea.is-white:active, +.textarea.is-white.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); +} + +.input.is-black, +.textarea.is-black { + border-color: #0a0a0a; +} + +.input.is-black:focus, .input.is-black.is-focused, .input.is-black:active, .input.is-black.is-active, +.textarea.is-black:focus, +.textarea.is-black.is-focused, +.textarea.is-black:active, +.textarea.is-black.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); +} + +.input.is-light, +.textarea.is-light { + border-color: whitesmoke; +} + +.input.is-light:focus, .input.is-light.is-focused, .input.is-light:active, .input.is-light.is-active, +.textarea.is-light:focus, +.textarea.is-light.is-focused, +.textarea.is-light:active, +.textarea.is-light.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); +} + +.input.is-dark, +.textarea.is-dark { + border-color: #363636; +} + +.input.is-dark:focus, .input.is-dark.is-focused, .input.is-dark:active, .input.is-dark.is-active, +.textarea.is-dark:focus, +.textarea.is-dark.is-focused, +.textarea.is-dark:active, +.textarea.is-dark.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); +} + +.input.is-primary, +.textarea.is-primary { + border-color: #00d1b2; +} + +.input.is-primary:focus, .input.is-primary.is-focused, .input.is-primary:active, .input.is-primary.is-active, +.textarea.is-primary:focus, +.textarea.is-primary.is-focused, +.textarea.is-primary:active, +.textarea.is-primary.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); +} + +.input.is-link, +.textarea.is-link { + border-color: #3273dc; +} + +.input.is-link:focus, .input.is-link.is-focused, .input.is-link:active, .input.is-link.is-active, +.textarea.is-link:focus, +.textarea.is-link.is-focused, +.textarea.is-link:active, +.textarea.is-link.is-active { + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); +} + +.input.is-info, +.textarea.is-info { + border-color: #209cee; +} + +.input.is-info:focus, .input.is-info.is-focused, .input.is-info:active, .input.is-info.is-active, +.textarea.is-info:focus, +.textarea.is-info.is-focused, +.textarea.is-info:active, +.textarea.is-info.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); +} + +.input.is-success, +.textarea.is-success { + border-color: #23d160; +} + +.input.is-success:focus, .input.is-success.is-focused, .input.is-success:active, .input.is-success.is-active, +.textarea.is-success:focus, +.textarea.is-success.is-focused, +.textarea.is-success:active, +.textarea.is-success.is-active { + box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); +} + +.input.is-warning, +.textarea.is-warning { + border-color: #ffdd57; +} + +.input.is-warning:focus, .input.is-warning.is-focused, .input.is-warning:active, .input.is-warning.is-active, +.textarea.is-warning:focus, +.textarea.is-warning.is-focused, +.textarea.is-warning:active, +.textarea.is-warning.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); +} + +.input.is-danger, +.textarea.is-danger { + border-color: #ff3860; +} + +.input.is-danger:focus, .input.is-danger.is-focused, .input.is-danger:active, .input.is-danger.is-active, +.textarea.is-danger:focus, +.textarea.is-danger.is-focused, +.textarea.is-danger:active, +.textarea.is-danger.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); +} + +.input.is-small, +.textarea.is-small { + border-radius: 2px; + font-size: 0.75rem; +} + +.input.is-medium, +.textarea.is-medium { + font-size: 1.25rem; +} + +.input.is-large, +.textarea.is-large { + font-size: 1.5rem; +} + +.input.is-fullwidth, +.textarea.is-fullwidth { + display: block; + width: 100%; +} + +.input.is-inline, +.textarea.is-inline { + display: inline; + width: auto; +} + +.input.is-rounded { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; +} + +.input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; +} + +.textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; +} + +.textarea:not([rows]) { + max-height: 600px; + min-height: 120px; +} + +.textarea[rows] { + height: initial; +} + +.textarea.has-fixed-size { + resize: none; +} + +.checkbox, +.radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; +} + +.checkbox input, +.radio input { + cursor: pointer; +} + +.checkbox:hover, +.radio:hover { + color: #363636; +} + +.checkbox[disabled], +.radio[disabled] { + color: #7a7a7a; + cursor: not-allowed; +} + +.radio + .radio { + margin-left: 0.5em; +} + +.select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; +} + +.select:not(.is-multiple) { + height: 2.25em; +} + +.select:not(.is-multiple):not(.is-loading)::after { + border-color: #3273dc; + right: 1.125em; + z-index: 4; +} + +.select.is-rounded select { + border-radius: 290486px; + padding-left: 1em; +} + +.select select { + background-color: white; + border-color: #dbdbdb; + color: #363636; + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; +} + +.select select::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.select select::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.select select:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.select select:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); +} + +.select select:hover, .select select.is-hovered { + border-color: #b5b5b5; +} + +.select select:focus, .select select.is-focused, .select select:active, .select select.is-active { + border-color: #3273dc; + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); +} + +.select select[disabled] { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #7a7a7a; +} + +.select select[disabled]::-moz-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.select select[disabled]::-webkit-input-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.select select[disabled]:-moz-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.select select[disabled]:-ms-input-placeholder { + color: rgba(122, 122, 122, 0.3); +} + +.select select::-ms-expand { + display: none; +} + +.select select[disabled]:hover { + border-color: whitesmoke; +} + +.select select:not([multiple]) { + padding-right: 2.5em; +} + +.select select[multiple] { + height: initial; + padding: 0; +} + +.select select[multiple] option { + padding: 0.5em 1em; +} + +.select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #363636; +} + +.select.is-white:not(:hover)::after { + border-color: white; +} + +.select.is-white select { + border-color: white; +} + +.select.is-white select:hover, .select.is-white select.is-hovered { + border-color: #f2f2f2; +} + +.select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); +} + +.select.is-black:not(:hover)::after { + border-color: #0a0a0a; +} + +.select.is-black select { + border-color: #0a0a0a; +} + +.select.is-black select:hover, .select.is-black select.is-hovered { + border-color: black; +} + +.select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); +} + +.select.is-light:not(:hover)::after { + border-color: whitesmoke; +} + +.select.is-light select { + border-color: whitesmoke; +} + +.select.is-light select:hover, .select.is-light select.is-hovered { + border-color: #e8e8e8; +} + +.select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); +} + +.select.is-dark:not(:hover)::after { + border-color: #363636; +} + +.select.is-dark select { + border-color: #363636; +} + +.select.is-dark select:hover, .select.is-dark select.is-hovered { + border-color: #292929; +} + +.select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); +} + +.select.is-primary:not(:hover)::after { + border-color: #00d1b2; +} + +.select.is-primary select { + border-color: #00d1b2; +} + +.select.is-primary select:hover, .select.is-primary select.is-hovered { + border-color: #00b89c; +} + +.select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); +} + +.select.is-link:not(:hover)::after { + border-color: #3273dc; +} + +.select.is-link select { + border-color: #3273dc; +} + +.select.is-link select:hover, .select.is-link select.is-hovered { + border-color: #2366d1; +} + +.select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); +} + +.select.is-info:not(:hover)::after { + border-color: #209cee; +} + +.select.is-info select { + border-color: #209cee; +} + +.select.is-info select:hover, .select.is-info select.is-hovered { + border-color: #118fe4; +} + +.select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); +} + +.select.is-success:not(:hover)::after { + border-color: #23d160; +} + +.select.is-success select { + border-color: #23d160; +} + +.select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #20bc56; +} + +.select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); +} + +.select.is-warning:not(:hover)::after { + border-color: #ffdd57; +} + +.select.is-warning select { + border-color: #ffdd57; +} + +.select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83d; +} + +.select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); +} + +.select.is-danger:not(:hover)::after { + border-color: #ff3860; +} + +.select.is-danger select { + border-color: #ff3860; +} + +.select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #ff1f4b; +} + +.select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); +} + +.select.is-small { + border-radius: 2px; + font-size: 0.75rem; +} + +.select.is-medium { + font-size: 1.25rem; +} + +.select.is-large { + font-size: 1.5rem; +} + +.select.is-disabled::after { + border-color: #7a7a7a; +} + +.select.is-fullwidth { + width: 100%; +} + +.select.is-fullwidth select { + width: 100%; +} + +.select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + -webkit-transform: none; + transform: none; +} + +.select.is-loading.is-small:after { + font-size: 0.75rem; +} + +.select.is-loading.is-medium:after { + font-size: 1.25rem; +} + +.select.is-loading.is-large:after { + font-size: 1.5rem; +} + +.file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; +} + +.file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; +} + +.file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; +} + +.file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; +} + +.file.is-white:active .file-cta, .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; +} + +.file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; +} + +.file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; +} + +.file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; +} + +.file.is-black:active .file-cta, .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; +} + +.file.is-light .file-cta { + background-color: whitesmoke; + border-color: transparent; + color: #363636; +} + +.file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { + background-color: #eeeeee; + border-color: transparent; + color: #363636; +} + +.file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); + color: #363636; +} + +.file.is-light:active .file-cta, .file.is-light.is-active .file-cta { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; +} + +.file.is-dark .file-cta { + background-color: #363636; + border-color: transparent; + color: whitesmoke; +} + +.file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; +} + +.file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); + color: whitesmoke; +} + +.file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta { + background-color: #292929; + border-color: transparent; + color: whitesmoke; +} + +.file.is-primary .file-cta { + background-color: #00d1b2; + border-color: transparent; + color: #fff; +} + +.file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta { + background-color: #00c4a7; + border-color: transparent; + color: #fff; +} + +.file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(0, 209, 178, 0.25); + color: #fff; +} + +.file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta { + background-color: #00b89c; + border-color: transparent; + color: #fff; +} + +.file.is-link .file-cta { + background-color: #3273dc; + border-color: transparent; + color: #fff; +} + +.file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { + background-color: #276cda; + border-color: transparent; + color: #fff; +} + +.file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(50, 115, 220, 0.25); + color: #fff; +} + +.file.is-link:active .file-cta, .file.is-link.is-active .file-cta { + background-color: #2366d1; + border-color: transparent; + color: #fff; +} + +.file.is-info .file-cta { + background-color: #209cee; + border-color: transparent; + color: #fff; +} + +.file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { + background-color: #1496ed; + border-color: transparent; + color: #fff; +} + +.file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; +} + +.file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #118fe4; + border-color: transparent; + color: #fff; +} + +.file.is-success .file-cta { + background-color: #23d160; + border-color: transparent; + color: #fff; +} + +.file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #22c65b; + border-color: transparent; + color: #fff; +} + +.file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(35, 209, 96, 0.25); + color: #fff; +} + +.file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #20bc56; + border-color: transparent; + color: #fff; +} + +.file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); +} + +.file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); +} + +.file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); +} + +.file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); +} + +.file.is-danger .file-cta { + background-color: #ff3860; + border-color: transparent; + color: #fff; +} + +.file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #ff2b56; + border-color: transparent; + color: #fff; +} + +.file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 56, 96, 0.25); + color: #fff; +} + +.file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #ff1f4b; + border-color: transparent; + color: #fff; +} + +.file.is-small { + font-size: 0.75rem; +} + +.file.is-medium { + font-size: 1.25rem; +} + +.file.is-medium .file-icon .fa { + font-size: 21px; +} + +.file.is-large { + font-size: 1.5rem; +} + +.file.is-large .file-icon .fa { + font-size: 28px; +} + +.file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.file.has-name.is-empty .file-cta { + border-radius: 4px; +} + +.file.has-name.is-empty .file-name { + display: none; +} + +.file.is-boxed .file-label { + flex-direction: column; +} + +.file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; +} + +.file.is-boxed .file-name { + border-width: 0 1px 1px; +} + +.file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; +} + +.file.is-boxed .file-icon .fa { + font-size: 21px; +} + +.file.is-boxed.is-small .file-icon .fa { + font-size: 14px; +} + +.file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; +} + +.file.is-boxed.is-large .file-icon .fa { + font-size: 35px; +} + +.file.is-boxed.has-name .file-cta { + border-radius: 4px 4px 0 0; +} + +.file.is-boxed.has-name .file-name { + border-radius: 0 0 4px 4px; + border-width: 0 1px 1px; +} + +.file.is-centered { + justify-content: center; +} + +.file.is-fullwidth .file-label { + width: 100%; +} + +.file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; +} + +.file.is-right { + justify-content: flex-end; +} + +.file.is-right .file-cta { + border-radius: 0 4px 4px 0; +} + +.file.is-right .file-name { + border-radius: 4px 0 0 4px; + border-width: 1px 0 1px 1px; + order: -1; +} + +.file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; +} + +.file-label:hover .file-cta { + background-color: #eeeeee; + color: #363636; +} + +.file-label:hover .file-name { + border-color: #d5d5d5; +} + +.file-label:active .file-cta { + background-color: #e8e8e8; + color: #363636; +} + +.file-label:active .file-name { + border-color: #cfcfcf; +} + +.file-input { + height: 0.01em; + left: 0; + outline: none; + position: absolute; + top: 0; + width: 0.01em; +} + +.file-cta, +.file-name { + border-color: #dbdbdb; + border-radius: 4px; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; +} + +.file-cta { + background-color: whitesmoke; + color: #4a4a4a; +} + +.file-name { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; +} + +.file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; +} + +.file-icon .fa { + font-size: 14px; +} + +.label { + color: #363636; + display: block; + font-size: 1rem; + font-weight: 700; +} + +.label:not(:last-child) { + margin-bottom: 0.5em; +} + +.label.is-small { + font-size: 0.75rem; +} + +.label.is-medium { + font-size: 1.25rem; +} + +.label.is-large { + font-size: 1.5rem; +} + +.help { + display: block; + font-size: 0.75rem; + margin-top: 0.25rem; +} + +.help.is-white { + color: white; +} + +.help.is-black { + color: #0a0a0a; +} + +.help.is-light { + color: whitesmoke; +} + +.help.is-dark { + color: #363636; +} + +.help.is-primary { + color: #00d1b2; +} + +.help.is-link { + color: #3273dc; +} + +.help.is-info { + color: #209cee; +} + +.help.is-success { + color: #23d160; +} + +.help.is-warning { + color: #ffdd57; +} + +.help.is-danger { + color: #ff3860; +} + +.field:not(:last-child) { + margin-bottom: 0.75rem; +} + +.field.has-addons { + display: flex; + justify-content: flex-start; +} + +.field.has-addons .control:not(:last-child) { + margin-right: -1px; +} + +.field.has-addons .control:not(:first-child):not(:last-child) .button, +.field.has-addons .control:not(:first-child):not(:last-child) .input, +.field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; +} + +.field.has-addons .control:first-child .button, +.field.has-addons .control:first-child .input, +.field.has-addons .control:first-child .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.field.has-addons .control:last-child .button, +.field.has-addons .control:last-child .input, +.field.has-addons .control:last-child .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.field.has-addons .control .button:hover, .field.has-addons .control .button.is-hovered, +.field.has-addons .control .input:hover, +.field.has-addons .control .input.is-hovered, +.field.has-addons .control .select select:hover, +.field.has-addons .control .select select.is-hovered { + z-index: 2; +} + +.field.has-addons .control .button:focus, .field.has-addons .control .button.is-focused, .field.has-addons .control .button:active, .field.has-addons .control .button.is-active, +.field.has-addons .control .input:focus, +.field.has-addons .control .input.is-focused, +.field.has-addons .control .input:active, +.field.has-addons .control .input.is-active, +.field.has-addons .control .select select:focus, +.field.has-addons .control .select select.is-focused, +.field.has-addons .control .select select:active, +.field.has-addons .control .select select.is-active { + z-index: 3; +} + +.field.has-addons .control .button:focus:hover, .field.has-addons .control .button.is-focused:hover, .field.has-addons .control .button:active:hover, .field.has-addons .control .button.is-active:hover, +.field.has-addons .control .input:focus:hover, +.field.has-addons .control .input.is-focused:hover, +.field.has-addons .control .input:active:hover, +.field.has-addons .control .input.is-active:hover, +.field.has-addons .control .select select:focus:hover, +.field.has-addons .control .select select.is-focused:hover, +.field.has-addons .control .select select:active:hover, +.field.has-addons .control .select select.is-active:hover { + z-index: 4; +} + +.field.has-addons .control.is-expanded { + flex-grow: 1; +} + +.field.has-addons.has-addons-centered { + justify-content: center; +} + +.field.has-addons.has-addons-right { + justify-content: flex-end; +} + +.field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; +} + +.field.is-grouped { + display: flex; + justify-content: flex-start; +} + +.field.is-grouped > .control { + flex-shrink: 0; +} + +.field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; +} + +.field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; +} + +.field.is-grouped.is-grouped-centered { + justify-content: center; +} + +.field.is-grouped.is-grouped-right { + justify-content: flex-end; +} + +.field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; +} + +.field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; +} + +.field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; +} + +.field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; +} + +@media screen and (min-width: 769px), print { + .field.is-horizontal { + display: flex; + } +} + +.field-label .label { + font-size: inherit; +} + +@media screen and (max-width: 768px) { + .field-label { + margin-bottom: 0.5rem; + } +} + +@media screen and (min-width: 769px), print { + .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; + } + .field-label.is-small { + font-size: 0.75rem; + padding-top: 0.375em; + } + .field-label.is-normal { + padding-top: 0.375em; + } + .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; + } + .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; + } +} + +.field-body .field .field { + margin-bottom: 0; +} + +@media screen and (min-width: 769px), print { + .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; + } + .field-body .field { + margin-bottom: 0; + } + .field-body > .field { + flex-shrink: 1; + } + .field-body > .field:not(.is-narrow) { + flex-grow: 1; + } + .field-body > .field:not(:last-child) { + margin-right: 0.75rem; + } +} + +.control { + font-size: 1rem; + position: relative; + text-align: left; +} + +.control.has-icon .icon { + color: #dbdbdb; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; +} + +.control.has-icon .input:focus + .icon { + color: #7a7a7a; +} + +.control.has-icon .input.is-small + .icon { + font-size: 0.75rem; +} + +.control.has-icon .input.is-medium + .icon { + font-size: 1.25rem; +} + +.control.has-icon .input.is-large + .icon { + font-size: 1.5rem; +} + +.control.has-icon:not(.has-icon-right) .icon { + left: 0; +} + +.control.has-icon:not(.has-icon-right) .input { + padding-left: 2.25em; +} + +.control.has-icon.has-icon-right .icon { + right: 0; +} + +.control.has-icon.has-icon-right .input { + padding-right: 2.25em; +} + +.control.has-icons-left .input:focus ~ .icon, +.control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, +.control.has-icons-right .select:focus ~ .icon { + color: #7a7a7a; +} + +.control.has-icons-left .input.is-small ~ .icon, +.control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, +.control.has-icons-right .select.is-small ~ .icon { + font-size: 0.75rem; +} + +.control.has-icons-left .input.is-medium ~ .icon, +.control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, +.control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; +} + +.control.has-icons-left .input.is-large ~ .icon, +.control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, +.control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; +} + +.control.has-icons-left .icon, .control.has-icons-right .icon { + color: #dbdbdb; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; +} + +.control.has-icons-left .input, +.control.has-icons-left .select select { + padding-left: 2.25em; +} + +.control.has-icons-left .icon.is-left { + left: 0; +} + +.control.has-icons-right .input, +.control.has-icons-right .select select { + padding-right: 2.25em; +} + +.control.has-icons-right .icon.is-right { + right: 0; +} + +.control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; +} + +.control.is-loading.is-small:after { + font-size: 0.75rem; +} + +.control.is-loading.is-medium:after { + font-size: 1.25rem; +} + +.control.is-loading.is-large:after { + font-size: 1.5rem; +} + +.icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; +} + +.icon.is-small { + height: 1rem; + width: 1rem; +} + +.icon.is-medium { + height: 2rem; + width: 2rem; +} + +.icon.is-large { + height: 3rem; + width: 3rem; +} + +.image { + display: block; + position: relative; +} + +.image img { + display: block; + height: auto; + width: 100%; +} + +.image img.is-rounded { + border-radius: 290486px; +} + +.image.is-square img, .image.is-1by1 img, .image.is-5by4 img, .image.is-4by3 img, .image.is-3by2 img, .image.is-5by3 img, .image.is-16by9 img, .image.is-2by1 img, .image.is-3by1 img, .image.is-4by5 img, .image.is-3by4 img, .image.is-2by3 img, .image.is-3by5 img, .image.is-9by16 img, .image.is-1by2 img, .image.is-1by3 img { + height: 100%; + width: 100%; +} + +.image.is-square, .image.is-1by1 { + padding-top: 100%; +} + +.image.is-5by4 { + padding-top: 80%; +} + +.image.is-4by3 { + padding-top: 75%; +} + +.image.is-3by2 { + padding-top: 66.6666%; +} + +.image.is-5by3 { + padding-top: 60%; +} + +.image.is-16by9 { + padding-top: 56.25%; +} + +.image.is-2by1 { + padding-top: 50%; +} + +.image.is-3by1 { + padding-top: 33.3333%; +} + +.image.is-4by5 { + padding-top: 125%; +} + +.image.is-3by4 { + padding-top: 133.3333%; +} + +.image.is-2by3 { + padding-top: 150%; +} + +.image.is-3by5 { + padding-top: 166.6666%; +} + +.image.is-9by16 { + padding-top: 177.7777%; +} + +.image.is-1by2 { + padding-top: 200%; +} + +.image.is-1by3 { + padding-top: 300%; +} + +.image.is-16x16 { + height: 16px; + width: 16px; +} + +.image.is-24x24 { + height: 24px; + width: 24px; +} + +.image.is-32x32 { + height: 32px; + width: 32px; +} + +.image.is-48x48 { + height: 48px; + width: 48px; +} + +.image.is-64x64 { + height: 64px; + width: 64px; +} + +.image.is-96x96 { + height: 96px; + width: 96px; +} + +.image.is-128x128 { + height: 128px; + width: 128px; +} + +.notification { + background-color: whitesmoke; + border-radius: 4px; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; +} + +.notification a:not(.button) { + color: currentColor; + text-decoration: underline; +} + +.notification strong { + color: currentColor; +} + +.notification code, +.notification pre { + background: white; +} + +.notification pre code { + background: transparent; +} + +.notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; +} + +.notification .title, +.notification .subtitle, +.notification .content { + color: currentColor; +} + +.notification.is-white { + background-color: white; + color: #0a0a0a; +} + +.notification.is-black { + background-color: #0a0a0a; + color: white; +} + +.notification.is-light { + background-color: whitesmoke; + color: #363636; +} + +.notification.is-dark { + background-color: #363636; + color: whitesmoke; +} + +.notification.is-primary { + background-color: #00d1b2; + color: #fff; +} + +.notification.is-link { + background-color: #3273dc; + color: #fff; +} + +.notification.is-info { + background-color: #209cee; + color: #fff; +} + +.notification.is-success { + background-color: #23d160; + color: #fff; +} + +.notification.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); +} + +.notification.is-danger { + background-color: #ff3860; + color: #fff; +} + +.progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 1rem; + overflow: hidden; + padding: 0; + width: 100%; +} + +.progress::-webkit-progress-bar { + background-color: #dbdbdb; +} + +.progress::-webkit-progress-value { + background-color: #4a4a4a; +} + +.progress::-moz-progress-bar { + background-color: #4a4a4a; +} + +.progress::-ms-fill { + background-color: #4a4a4a; + border: none; +} + +.progress.is-white::-webkit-progress-value { + background-color: white; +} + +.progress.is-white::-moz-progress-bar { + background-color: white; +} + +.progress.is-white::-ms-fill { + background-color: white; +} + +.progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; +} + +.progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; +} + +.progress.is-black::-ms-fill { + background-color: #0a0a0a; +} + +.progress.is-light::-webkit-progress-value { + background-color: whitesmoke; +} + +.progress.is-light::-moz-progress-bar { + background-color: whitesmoke; +} + +.progress.is-light::-ms-fill { + background-color: whitesmoke; +} + +.progress.is-dark::-webkit-progress-value { + background-color: #363636; +} + +.progress.is-dark::-moz-progress-bar { + background-color: #363636; +} + +.progress.is-dark::-ms-fill { + background-color: #363636; +} + +.progress.is-primary::-webkit-progress-value { + background-color: #00d1b2; +} + +.progress.is-primary::-moz-progress-bar { + background-color: #00d1b2; +} + +.progress.is-primary::-ms-fill { + background-color: #00d1b2; +} + +.progress.is-link::-webkit-progress-value { + background-color: #3273dc; +} + +.progress.is-link::-moz-progress-bar { + background-color: #3273dc; +} + +.progress.is-link::-ms-fill { + background-color: #3273dc; +} + +.progress.is-info::-webkit-progress-value { + background-color: #209cee; +} + +.progress.is-info::-moz-progress-bar { + background-color: #209cee; +} + +.progress.is-info::-ms-fill { + background-color: #209cee; +} + +.progress.is-success::-webkit-progress-value { + background-color: #23d160; +} + +.progress.is-success::-moz-progress-bar { + background-color: #23d160; +} + +.progress.is-success::-ms-fill { + background-color: #23d160; +} + +.progress.is-warning::-webkit-progress-value { + background-color: #ffdd57; +} + +.progress.is-warning::-moz-progress-bar { + background-color: #ffdd57; +} + +.progress.is-warning::-ms-fill { + background-color: #ffdd57; +} + +.progress.is-danger::-webkit-progress-value { + background-color: #ff3860; +} + +.progress.is-danger::-moz-progress-bar { + background-color: #ff3860; +} + +.progress.is-danger::-ms-fill { + background-color: #ff3860; +} + +.progress.is-small { + height: 0.75rem; +} + +.progress.is-medium { + height: 1.25rem; +} + +.progress.is-large { + height: 1.5rem; +} + +.table { + background-color: white; + color: #363636; +} + +.table td, +.table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; +} + +.table td.is-white, +.table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; +} + +.table td.is-black, +.table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; +} + +.table td.is-light, +.table th.is-light { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; +} + +.table td.is-dark, +.table th.is-dark { + background-color: #363636; + border-color: #363636; + color: whitesmoke; +} + +.table td.is-primary, +.table th.is-primary { + background-color: #00d1b2; + border-color: #00d1b2; + color: #fff; +} + +.table td.is-link, +.table th.is-link { + background-color: #3273dc; + border-color: #3273dc; + color: #fff; +} + +.table td.is-info, +.table th.is-info { + background-color: #209cee; + border-color: #209cee; + color: #fff; +} + +.table td.is-success, +.table th.is-success { + background-color: #23d160; + border-color: #23d160; + color: #fff; +} + +.table td.is-warning, +.table th.is-warning { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); +} + +.table td.is-danger, +.table th.is-danger { + background-color: #ff3860; + border-color: #ff3860; + color: #fff; +} + +.table td.is-narrow, +.table th.is-narrow { + white-space: nowrap; + width: 1%; +} + +.table td.is-selected, +.table th.is-selected { + background-color: #00d1b2; + color: #fff; +} + +.table td.is-selected a, +.table td.is-selected strong, +.table th.is-selected a, +.table th.is-selected strong { + color: currentColor; +} + +.table th { + color: #363636; + text-align: left; +} + +.table tr.is-selected { + background-color: #00d1b2; + color: #fff; +} + +.table tr.is-selected a, +.table tr.is-selected strong { + color: currentColor; +} + +.table tr.is-selected td, +.table tr.is-selected th { + border-color: #fff; + color: currentColor; +} + +.table thead td, +.table thead th { + border-width: 0 0 2px; + color: #363636; +} + +.table tfoot td, +.table tfoot th { + border-width: 2px 0 0; + color: #363636; +} + +.table tbody tr:last-child td, +.table tbody tr:last-child th { + border-bottom-width: 0; +} + +.table.is-bordered td, +.table.is-bordered th { + border-width: 1px; +} + +.table.is-bordered tr:last-child td, +.table.is-bordered tr:last-child th { + border-bottom-width: 1px; +} + +.table.is-fullwidth { + width: 100%; +} + +.table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #fafafa; +} + +.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: whitesmoke; +} + +.table.is-narrow td, +.table.is-narrow th { + padding: 0.25em 0.5em; +} + +.table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #fafafa; +} + +.table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; +} + +.tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.tags .tag { + margin-bottom: 0.5rem; +} + +.tags .tag:not(:last-child) { + margin-right: 0.5rem; +} + +.tags:last-child { + margin-bottom: -0.5rem; +} + +.tags:not(:last-child) { + margin-bottom: 1rem; +} + +.tags.has-addons .tag { + margin-right: 0; +} + +.tags.has-addons .tag:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.tags.has-addons .tag:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.tags.is-centered { + justify-content: center; +} + +.tags.is-centered .tag { + margin-right: 0.25rem; + margin-left: 0.25rem; +} + +.tags.is-right { + justify-content: flex-end; +} + +.tags.is-right .tag:not(:first-child) { + margin-left: 0.5rem; +} + +.tags.is-right .tag:not(:last-child) { + margin-right: 0; +} + +.tag:not(body) { + align-items: center; + background-color: whitesmoke; + border-radius: 4px; + color: #4a4a4a; + display: inline-flex; + font-size: 0.75rem; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; +} + +.tag:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; +} + +.tag:not(body).is-white { + background-color: white; + color: #0a0a0a; +} + +.tag:not(body).is-black { + background-color: #0a0a0a; + color: white; +} + +.tag:not(body).is-light { + background-color: whitesmoke; + color: #363636; +} + +.tag:not(body).is-dark { + background-color: #363636; + color: whitesmoke; +} + +.tag:not(body).is-primary { + background-color: #00d1b2; + color: #fff; +} + +.tag:not(body).is-link { + background-color: #3273dc; + color: #fff; +} + +.tag:not(body).is-info { + background-color: #209cee; + color: #fff; +} + +.tag:not(body).is-success { + background-color: #23d160; + color: #fff; +} + +.tag:not(body).is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); +} + +.tag:not(body).is-danger { + background-color: #ff3860; + color: #fff; +} + +.tag:not(body).is-medium { + font-size: 1rem; +} + +.tag:not(body).is-large { + font-size: 1.25rem; +} + +.tag:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; +} + +.tag:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; +} + +.tag:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; +} + +.tag:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; +} + +.tag:not(body).is-delete::before, .tag:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform: translateX(-50%) translateY(-50%) rotate(45deg); + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.tag:not(body).is-delete::before { + height: 1px; + width: 50%; +} + +.tag:not(body).is-delete::after { + height: 50%; + width: 1px; +} + +.tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus { + background-color: #e8e8e8; +} + +.tag:not(body).is-delete:active { + background-color: #dbdbdb; +} + +.tag:not(body).is-rounded { + border-radius: 290486px; +} + +a.tag:hover { + text-decoration: underline; +} + +.title, +.subtitle { + word-break: break-word; +} + +.title em, +.title span, +.subtitle em, +.subtitle span { + font-weight: inherit; +} + +.title sub, +.subtitle sub { + font-size: 0.75em; +} + +.title sup, +.subtitle sup { + font-size: 0.75em; +} + +.title .tag, +.subtitle .tag { + vertical-align: middle; +} + +.title { + color: #363636; + font-size: 2rem; + font-weight: 600; + line-height: 1.125; +} + +.title strong { + color: inherit; + font-weight: inherit; +} + +.title + .highlight { + margin-top: -0.75rem; +} + +.title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; +} + +.title.is-1 { + font-size: 3rem; +} + +.title.is-2 { + font-size: 2.5rem; +} + +.title.is-3 { + font-size: 2rem; +} + +.title.is-4 { + font-size: 1.5rem; +} + +.title.is-5 { + font-size: 1.25rem; +} + +.title.is-6 { + font-size: 1rem; +} + +.title.is-7 { + font-size: 0.75rem; +} + +.subtitle { + color: #4a4a4a; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; +} + +.subtitle strong { + color: #363636; + font-weight: 600; +} + +.subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; +} + +.subtitle.is-1 { + font-size: 3rem; +} + +.subtitle.is-2 { + font-size: 2.5rem; +} + +.subtitle.is-3 { + font-size: 2rem; +} + +.subtitle.is-4 { + font-size: 1.5rem; +} + +.subtitle.is-5 { + font-size: 1.25rem; +} + +.subtitle.is-6 { + font-size: 1rem; +} + +.subtitle.is-7 { + font-size: 0.75rem; +} + +.heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; +} + +.highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; +} + +.highlight pre { + overflow: auto; + max-width: 100%; +} + +.number { + align-items: center; + background-color: whitesmoke; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; +} + +.breadcrumb { + font-size: 1rem; + white-space: nowrap; +} + +.breadcrumb a { + align-items: center; + color: #3273dc; + display: flex; + justify-content: center; + padding: 0 0.75em; +} + +.breadcrumb a:hover { + color: #363636; +} + +.breadcrumb li { + align-items: center; + display: flex; +} + +.breadcrumb li:first-child a { + padding-left: 0; +} + +.breadcrumb li.is-active a { + color: #363636; + cursor: default; + pointer-events: none; +} + +.breadcrumb li + li::before { + color: #b5b5b5; + content: "\0002f"; +} + +.breadcrumb ul, +.breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.breadcrumb .icon:first-child { + margin-right: 0.5em; +} + +.breadcrumb .icon:last-child { + margin-left: 0.5em; +} + +.breadcrumb.is-centered ol, +.breadcrumb.is-centered ul { + justify-content: center; +} + +.breadcrumb.is-right ol, +.breadcrumb.is-right ul { + justify-content: flex-end; +} + +.breadcrumb.is-small { + font-size: 0.75rem; +} + +.breadcrumb.is-medium { + font-size: 1.25rem; +} + +.breadcrumb.is-large { + font-size: 1.5rem; +} + +.breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; +} + +.breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; +} + +.breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; +} + +.breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; +} + +.card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #4a4a4a; + max-width: 100%; + position: relative; +} + +.card-header { + background-color: none; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; +} + +.card-header-title { + align-items: center; + color: #363636; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; +} + +.card-header-title.is-centered { + justify-content: center; +} + +.card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; +} + +.card-image { + display: block; + position: relative; +} + +.card-content { + background-color: none; + padding: 1.5rem; +} + +.card-footer { + background-color: none; + border-top: 1px solid #dbdbdb; + align-items: stretch; + display: flex; +} + +.card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; +} + +.card-footer-item:not(:last-child) { + border-right: 1px solid #dbdbdb; +} + +.card .media:not(:last-child) { + margin-bottom: 0.75rem; +} + +.dropdown { + display: inline-flex; + position: relative; + vertical-align: top; +} + +.dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { + display: block; +} + +.dropdown.is-right .dropdown-menu { + left: auto; + right: 0; +} + +.dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; +} + +.dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; +} + +.dropdown-content { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; +} + +.dropdown-item { + color: #4a4a4a; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; +} + +a.dropdown-item { + padding-right: 3rem; + white-space: nowrap; +} + +a.dropdown-item:hover { + background-color: whitesmoke; + color: #0a0a0a; +} + +a.dropdown-item.is-active { + background-color: #3273dc; + color: #fff; +} + +.dropdown-divider { + background-color: #dbdbdb; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; +} + +.level { + align-items: center; + justify-content: space-between; +} + +.level code { + border-radius: 4px; +} + +.level img { + display: inline-block; + vertical-align: top; +} + +.level.is-mobile { + display: flex; +} + +.level.is-mobile .level-left, +.level.is-mobile .level-right { + display: flex; +} + +.level.is-mobile .level-left + .level-right { + margin-top: 0; +} + +.level.is-mobile .level-item { + margin-right: 0.75rem; +} + +.level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; +} + +.level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; +} + +@media screen and (min-width: 769px), print { + .level { + display: flex; + } + .level > .level-item:not(.is-narrow) { + flex-grow: 1; + } +} + +.level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; +} + +.level-item .title, +.level-item .subtitle { + margin-bottom: 0; +} + +@media screen and (max-width: 768px) { + .level-item:not(:last-child) { + margin-bottom: 0.75rem; + } +} + +.level-left, +.level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; +} + +.level-left .level-item.is-flexible, +.level-right .level-item.is-flexible { + flex-grow: 1; +} + +@media screen and (min-width: 769px), print { + .level-left .level-item:not(:last-child), + .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; + } +} + +.level-left { + align-items: center; + justify-content: flex-start; +} + +@media screen and (max-width: 768px) { + .level-left + .level-right { + margin-top: 1.5rem; + } +} + +@media screen and (min-width: 769px), print { + .level-left { + display: flex; + } +} + +.level-right { + align-items: center; + justify-content: flex-end; +} + +@media screen and (min-width: 769px), print { + .level-right { + display: flex; + } +} + +.media { + align-items: flex-start; + display: flex; + text-align: left; +} + +.media .content:not(:last-child) { + margin-bottom: 0.75rem; +} + +.media .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + display: flex; + padding-top: 0.75rem; +} + +.media .media .content:not(:last-child), +.media .media .control:not(:last-child) { + margin-bottom: 0.5rem; +} + +.media .media .media { + padding-top: 0.5rem; +} + +.media .media .media + .media { + margin-top: 0.5rem; +} + +.media + .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + margin-top: 1rem; + padding-top: 1rem; +} + +.media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; +} + +.media-left, +.media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; +} + +.media-left { + margin-right: 1rem; +} + +.media-right { + margin-left: 1rem; +} + +.media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; +} + +.menu { + font-size: 1rem; +} + +.menu.is-small { + font-size: 0.75rem; +} + +.menu.is-medium { + font-size: 1.25rem; +} + +.menu.is-large { + font-size: 1.5rem; +} + +.menu-list { + line-height: 1.25; +} + +.menu-list a { + border-radius: 2px; + color: #4a4a4a; + display: block; + padding: 0.5em 0.75em; +} + +.menu-list a:hover { + background-color: whitesmoke; + color: #363636; +} + +.menu-list a.is-active { + background-color: #3273dc; + color: #fff; +} + +.menu-list li ul { + border-left: 1px solid #dbdbdb; + margin: 0.75em; + padding-left: 0.75em; +} + +.menu-label { + color: #7a7a7a; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.menu-label:not(:first-child) { + margin-top: 1em; +} + +.menu-label:not(:last-child) { + margin-bottom: 1em; +} + +.message { + background-color: whitesmoke; + border-radius: 4px; + font-size: 1rem; +} + +.message strong { + color: currentColor; +} + +.message a:not(.button):not(.tag) { + color: currentColor; + text-decoration: underline; +} + +.message.is-small { + font-size: 0.75rem; +} + +.message.is-medium { + font-size: 1.25rem; +} + +.message.is-large { + font-size: 1.5rem; +} + +.message.is-white { + background-color: white; +} + +.message.is-white .message-header { + background-color: white; + color: #0a0a0a; +} + +.message.is-white .message-body { + border-color: white; + color: #4d4d4d; +} + +.message.is-black { + background-color: #fafafa; +} + +.message.is-black .message-header { + background-color: #0a0a0a; + color: white; +} + +.message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; +} + +.message.is-light { + background-color: #fafafa; +} + +.message.is-light .message-header { + background-color: whitesmoke; + color: #363636; +} + +.message.is-light .message-body { + border-color: whitesmoke; + color: #505050; +} + +.message.is-dark { + background-color: #fafafa; +} + +.message.is-dark .message-header { + background-color: #363636; + color: whitesmoke; +} + +.message.is-dark .message-body { + border-color: #363636; + color: #2a2a2a; +} + +.message.is-primary { + background-color: #f5fffd; +} + +.message.is-primary .message-header { + background-color: #00d1b2; + color: #fff; +} + +.message.is-primary .message-body { + border-color: #00d1b2; + color: #021310; +} + +.message.is-link { + background-color: #f6f9fe; +} + +.message.is-link .message-header { + background-color: #3273dc; + color: #fff; +} + +.message.is-link .message-body { + border-color: #3273dc; + color: #22509a; +} + +.message.is-info { + background-color: #f6fbfe; +} + +.message.is-info .message-header { + background-color: #209cee; + color: #fff; +} + +.message.is-info .message-body { + border-color: #209cee; + color: #12537e; +} + +.message.is-success { + background-color: #f6fef9; +} + +.message.is-success .message-header { + background-color: #23d160; + color: #fff; +} + +.message.is-success .message-body { + border-color: #23d160; + color: #0e301a; +} + +.message.is-warning { + background-color: #fffdf5; +} + +.message.is-warning .message-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); +} + +.message.is-warning .message-body { + border-color: #ffdd57; + color: #3b3108; +} + +.message.is-danger { + background-color: #fff5f7; +} + +.message.is-danger .message-header { + background-color: #ff3860; + color: #fff; +} + +.message.is-danger .message-body { + border-color: #ff3860; + color: #cd0930; +} + +.message-header { + align-items: center; + background-color: #4a4a4a; + border-radius: 4px 4px 0 0; + color: #fff; + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em 1em; + position: relative; +} + +.message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; +} + +.message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.message-body { + border-color: #dbdbdb; + border-radius: 4px; + border-style: solid; + border-width: 0 0 0 4px; + color: #4a4a4a; + padding: 1.25em 1.5em; +} + +.message-body code, +.message-body pre { + background-color: white; +} + +.message-body pre code { + background-color: transparent; +} + +.modal { + align-items: center; + display: none; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; +} + +.modal.is-active { + display: flex; +} + +.modal-background { + background-color: rgba(10, 10, 10, 0.86); +} + +.modal-content, +.modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; +} + +@media screen and (min-width: 769px), print { + .modal-content, + .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; + } +} + +.modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; +} + +.modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; +} + +.modal-card-head, +.modal-card-foot { + align-items: center; + background-color: whitesmoke; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; +} + +.modal-card-head { + border-bottom: 1px solid #dbdbdb; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +.modal-card-title { + color: #363636; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; +} + +.modal-card-foot { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 1px solid #dbdbdb; +} + +.modal-card-foot .button:not(:last-child) { + margin-right: 10px; +} + +.modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; +} + +.navbar { + background-color: white; + min-height: 3.25rem; + position: relative; + z-index: 30; +} + +.navbar.is-white { + background-color: white; + color: #0a0a0a; +} + +.navbar.is-white .navbar-brand > .navbar-item, +.navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; +} + +.navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, +.navbar.is-white .navbar-brand .navbar-link:hover, +.navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; +} + +.navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; +} + +@media screen and (min-width: 1088px) { + .navbar.is-white .navbar-start > .navbar-item, + .navbar.is-white .navbar-start .navbar-link, + .navbar.is-white .navbar-end > .navbar-item, + .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; + } + .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, + .navbar.is-white .navbar-start .navbar-link:hover, + .navbar.is-white .navbar-start .navbar-link.is-active, + .navbar.is-white .navbar-end > a.navbar-item:hover, + .navbar.is-white .navbar-end > a.navbar-item.is-active, + .navbar.is-white .navbar-end .navbar-link:hover, + .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; + } + .navbar.is-white .navbar-start .navbar-link::after, + .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; + } + .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; + } + .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; + } +} + +.navbar.is-black { + background-color: #0a0a0a; + color: white; +} + +.navbar.is-black .navbar-brand > .navbar-item, +.navbar.is-black .navbar-brand .navbar-link { + color: white; +} + +.navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, +.navbar.is-black .navbar-brand .navbar-link:hover, +.navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; +} + +.navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; +} + +@media screen and (min-width: 1088px) { + .navbar.is-black .navbar-start > .navbar-item, + .navbar.is-black .navbar-start .navbar-link, + .navbar.is-black .navbar-end > .navbar-item, + .navbar.is-black .navbar-end .navbar-link { + color: white; + } + .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, + .navbar.is-black .navbar-start .navbar-link:hover, + .navbar.is-black .navbar-start .navbar-link.is-active, + .navbar.is-black .navbar-end > a.navbar-item:hover, + .navbar.is-black .navbar-end > a.navbar-item.is-active, + .navbar.is-black .navbar-end .navbar-link:hover, + .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; + } + .navbar.is-black .navbar-start .navbar-link::after, + .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; + } + .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; + } + .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; + } +} + +.navbar.is-light { + background-color: whitesmoke; + color: #363636; +} + +.navbar.is-light .navbar-brand > .navbar-item, +.navbar.is-light .navbar-brand .navbar-link { + color: #363636; +} + +.navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, +.navbar.is-light .navbar-brand .navbar-link:hover, +.navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; +} + +.navbar.is-light .navbar-brand .navbar-link::after { + border-color: #363636; +} + +@media screen and (min-width: 1088px) { + .navbar.is-light .navbar-start > .navbar-item, + .navbar.is-light .navbar-start .navbar-link, + .navbar.is-light .navbar-end > .navbar-item, + .navbar.is-light .navbar-end .navbar-link { + color: #363636; + } + .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, + .navbar.is-light .navbar-start .navbar-link:hover, + .navbar.is-light .navbar-start .navbar-link.is-active, + .navbar.is-light .navbar-end > a.navbar-item:hover, + .navbar.is-light .navbar-end > a.navbar-item.is-active, + .navbar.is-light .navbar-end .navbar-link:hover, + .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; + } + .navbar.is-light .navbar-start .navbar-link::after, + .navbar.is-light .navbar-end .navbar-link::after { + border-color: #363636; + } + .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #e8e8e8; + color: #363636; + } + .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #363636; + } +} + +.navbar.is-dark { + background-color: #363636; + color: whitesmoke; +} + +.navbar.is-dark .navbar-brand > .navbar-item, +.navbar.is-dark .navbar-brand .navbar-link { + color: whitesmoke; +} + +.navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, +.navbar.is-dark .navbar-brand .navbar-link:hover, +.navbar.is-dark .navbar-brand .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; +} + +.navbar.is-dark .navbar-brand .navbar-link::after { + border-color: whitesmoke; +} + +@media screen and (min-width: 1088px) { + .navbar.is-dark .navbar-start > .navbar-item, + .navbar.is-dark .navbar-start .navbar-link, + .navbar.is-dark .navbar-end > .navbar-item, + .navbar.is-dark .navbar-end .navbar-link { + color: whitesmoke; + } + .navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, + .navbar.is-dark .navbar-start .navbar-link:hover, + .navbar.is-dark .navbar-start .navbar-link.is-active, + .navbar.is-dark .navbar-end > a.navbar-item:hover, + .navbar.is-dark .navbar-end > a.navbar-item.is-active, + .navbar.is-dark .navbar-end .navbar-link:hover, + .navbar.is-dark .navbar-end .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; + } + .navbar.is-dark .navbar-start .navbar-link::after, + .navbar.is-dark .navbar-end .navbar-link::after { + border-color: whitesmoke; + } + .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #292929; + color: whitesmoke; + } + .navbar.is-dark .navbar-dropdown a.navbar-item.is-active { + background-color: #363636; + color: whitesmoke; + } +} + +.navbar.is-primary { + background-color: #00d1b2; + color: #fff; +} + +.navbar.is-primary .navbar-brand > .navbar-item, +.navbar.is-primary .navbar-brand .navbar-link { + color: #fff; +} + +.navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, +.navbar.is-primary .navbar-brand .navbar-link:hover, +.navbar.is-primary .navbar-brand .navbar-link.is-active { + background-color: #00b89c; + color: #fff; +} + +.navbar.is-primary .navbar-brand .navbar-link::after { + border-color: #fff; +} + +@media screen and (min-width: 1088px) { + .navbar.is-primary .navbar-start > .navbar-item, + .navbar.is-primary .navbar-start .navbar-link, + .navbar.is-primary .navbar-end > .navbar-item, + .navbar.is-primary .navbar-end .navbar-link { + color: #fff; + } + .navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, + .navbar.is-primary .navbar-start .navbar-link:hover, + .navbar.is-primary .navbar-start .navbar-link.is-active, + .navbar.is-primary .navbar-end > a.navbar-item:hover, + .navbar.is-primary .navbar-end > a.navbar-item.is-active, + .navbar.is-primary .navbar-end .navbar-link:hover, + .navbar.is-primary .navbar-end .navbar-link.is-active { + background-color: #00b89c; + color: #fff; + } + .navbar.is-primary .navbar-start .navbar-link::after, + .navbar.is-primary .navbar-end .navbar-link::after { + border-color: #fff; + } + .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #00b89c; + color: #fff; + } + .navbar.is-primary .navbar-dropdown a.navbar-item.is-active { + background-color: #00d1b2; + color: #fff; + } +} + +.navbar.is-link { + background-color: #3273dc; + color: #fff; +} + +.navbar.is-link .navbar-brand > .navbar-item, +.navbar.is-link .navbar-brand .navbar-link { + color: #fff; +} + +.navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, +.navbar.is-link .navbar-brand .navbar-link:hover, +.navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #2366d1; + color: #fff; +} + +.navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; +} + +@media screen and (min-width: 1088px) { + .navbar.is-link .navbar-start > .navbar-item, + .navbar.is-link .navbar-start .navbar-link, + .navbar.is-link .navbar-end > .navbar-item, + .navbar.is-link .navbar-end .navbar-link { + color: #fff; + } + .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, + .navbar.is-link .navbar-start .navbar-link:hover, + .navbar.is-link .navbar-start .navbar-link.is-active, + .navbar.is-link .navbar-end > a.navbar-item:hover, + .navbar.is-link .navbar-end > a.navbar-item.is-active, + .navbar.is-link .navbar-end .navbar-link:hover, + .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #2366d1; + color: #fff; + } + .navbar.is-link .navbar-start .navbar-link::after, + .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; + } + .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2366d1; + color: #fff; + } + .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #3273dc; + color: #fff; + } +} + +.navbar.is-info { + background-color: #209cee; + color: #fff; +} + +.navbar.is-info .navbar-brand > .navbar-item, +.navbar.is-info .navbar-brand .navbar-link { + color: #fff; +} + +.navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, +.navbar.is-info .navbar-brand .navbar-link:hover, +.navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #118fe4; + color: #fff; +} + +.navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; +} + +@media screen and (min-width: 1088px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; + } + .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #118fe4; + color: #fff; + } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; + } + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #118fe4; + color: #fff; + } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; + } +} + +.navbar.is-success { + background-color: #23d160; + color: #fff; +} + +.navbar.is-success .navbar-brand > .navbar-item, +.navbar.is-success .navbar-brand .navbar-link { + color: #fff; +} + +.navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, +.navbar.is-success .navbar-brand .navbar-link:hover, +.navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #20bc56; + color: #fff; +} + +.navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; +} + +@media screen and (min-width: 1088px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; + } + .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #20bc56; + color: #fff; + } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; + } + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #20bc56; + color: #fff; + } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #23d160; + color: #fff; + } +} + +.navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); +} + +.navbar.is-warning .navbar-brand > .navbar-item, +.navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); +} + +.navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, +.navbar.is-warning .navbar-brand .navbar-link:hover, +.navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); +} + +.navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); +} + +@media screen and (min-width: 1088px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); + } + .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); + } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); + } + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); + } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); + } +} + +.navbar.is-danger { + background-color: #ff3860; + color: #fff; +} + +.navbar.is-danger .navbar-brand > .navbar-item, +.navbar.is-danger .navbar-brand .navbar-link { + color: #fff; +} + +.navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, +.navbar.is-danger .navbar-brand .navbar-link:hover, +.navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #ff1f4b; + color: #fff; +} + +.navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; +} + +@media screen and (min-width: 1088px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; + } + .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #ff1f4b; + color: #fff; + } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; + } + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ff1f4b; + color: #fff; + } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #ff3860; + color: #fff; + } +} + +.navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; +} + +.navbar.has-shadow { + box-shadow: 0 2px 0 0 whitesmoke; +} + +.navbar.is-fixed-bottom, .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; +} + +.navbar.is-fixed-bottom { + bottom: 0; +} + +.navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 whitesmoke; +} + +.navbar.is-fixed-top { + top: 0; +} + +html.has-navbar-fixed-top, +body.has-navbar-fixed-top { + padding-top: 3.25rem; +} + +html.has-navbar-fixed-bottom, +body.has-navbar-fixed-bottom { + padding-bottom: 3.25rem; +} + +.navbar-brand, +.navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 3.25rem; +} + +.navbar-brand a.navbar-item:hover { + background-color: transparent; +} + +.navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; +} + +.navbar-burger { + cursor: pointer; + display: block; + height: 3.25rem; + position: relative; + width: 3.25rem; + margin-left: auto; +} + +.navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + -webkit-transform-origin: center; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, -webkit-transform; + transition-property: background-color, opacity, transform; + transition-property: background-color, opacity, transform, -webkit-transform; + transition-timing-function: ease-out; + width: 16px; +} + +.navbar-burger span:nth-child(1) { + top: calc(50% - 6px); +} + +.navbar-burger span:nth-child(2) { + top: calc(50% - 1px); +} + +.navbar-burger span:nth-child(3) { + top: calc(50% + 4px); +} + +.navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); +} + +.navbar-burger.is-active span:nth-child(1) { + -webkit-transform: translateY(5px) rotate(45deg); + transform: translateY(5px) rotate(45deg); +} + +.navbar-burger.is-active span:nth-child(2) { + opacity: 0; +} + +.navbar-burger.is-active span:nth-child(3) { + -webkit-transform: translateY(-5px) rotate(-45deg); + transform: translateY(-5px) rotate(-45deg); +} + +.navbar-menu { + display: none; +} + +.navbar-item, +.navbar-link { + color: #4a4a4a; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; +} + +.navbar-item .icon:only-child, +.navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; +} + +a.navbar-item, +.navbar-link { + cursor: pointer; +} + +a.navbar-item:hover, a.navbar-item.is-active, +.navbar-link:hover, +.navbar-link.is-active { + background-color: #fafafa; + color: #3273dc; +} + +.navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; +} + +.navbar-item img { + max-height: 1.75rem; +} + +.navbar-item.has-dropdown { + padding: 0; +} + +.navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; +} + +.navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 3.25rem; + padding-bottom: calc(0.5rem - 1px); +} + +.navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #3273dc; +} + +.navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #3273dc; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #3273dc; + padding-bottom: calc(0.5rem - 3px); +} + +.navbar-content { + flex-grow: 1; + flex-shrink: 1; +} + +.navbar-link { + padding-right: 2.5em; +} + +.navbar-link::after { + border-color: #3273dc; + margin-top: -0.375em; + right: 1.125em; +} + +.navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; +} + +.navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.navbar-divider { + background-color: whitesmoke; + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; +} + +@media screen and (max-width: 1087px) { + .navbar > .container { + display: block; + } + .navbar-brand .navbar-item, + .navbar-tabs .navbar-item { + align-items: center; + display: flex; + } + .navbar-link::after { + display: none; + } + .navbar-menu { + background-color: white; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; + } + .navbar-menu.is-active { + display: block; + } + .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; + } + .navbar.is-fixed-bottom-touch { + bottom: 0; + } + .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); + } + .navbar.is-fixed-top-touch { + top: 0; + } + .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 3.25rem); + overflow: auto; + } + html.has-navbar-fixed-top-touch, + body.has-navbar-fixed-top-touch { + padding-top: 3.25rem; + } + html.has-navbar-fixed-bottom-touch, + body.has-navbar-fixed-bottom-touch { + padding-bottom: 3.25rem; + } +} + +@media screen and (min-width: 1088px) { + .navbar, + .navbar-menu, + .navbar-start, + .navbar-end { + align-items: stretch; + display: flex; + } + .navbar { + min-height: 3.25rem; + } + .navbar.is-spaced { + padding: 1rem 2rem; + } + .navbar.is-spaced .navbar-start, + .navbar.is-spaced .navbar-end { + align-items: center; + } + .navbar.is-spaced a.navbar-item, + .navbar.is-spaced .navbar-link { + border-radius: 4px; + } + .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, + .navbar.is-transparent .navbar-link:hover, + .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; + } + .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; + } + .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; + } + .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #3273dc; + } + .navbar-burger { + display: none; + } + .navbar-item, + .navbar-link { + align-items: center; + display: flex; + } + .navbar-item { + display: flex; + } + .navbar-item.has-dropdown { + align-items: stretch; + } + .navbar-item.has-dropdown-up .navbar-link::after { + -webkit-transform: rotate(135deg) translate(0.25em, -0.25em); + transform: rotate(135deg) translate(0.25em, -0.25em); + } + .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 2px solid #dbdbdb; + border-radius: 6px 6px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; + } + .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; + } + .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + -webkit-transform: translateY(0); + transform: translateY(0); + } + .navbar-menu { + flex-grow: 1; + flex-shrink: 0; + } + .navbar-start { + justify-content: flex-start; + margin-right: auto; + } + .navbar-end { + justify-content: flex-end; + margin-left: auto; + } + .navbar-dropdown { + background-color: white; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 2px solid #dbdbdb; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; + } + .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; + } + .navbar-dropdown a.navbar-item { + padding-right: 3rem; + } + .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; + } + .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #3273dc; + } + .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { + border-radius: 6px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + -webkit-transform: translateY(-5px); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, -webkit-transform; + transition-property: opacity, transform; + transition-property: opacity, transform, -webkit-transform; + } + .navbar-dropdown.is-right { + left: auto; + right: 0; + } + .navbar-divider { + display: block; + } + .navbar > .container .navbar-brand, + .container > .navbar .navbar-brand { + margin-left: -1rem; + } + .navbar > .container .navbar-menu, + .container > .navbar .navbar-menu { + margin-right: -1rem; + } + .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; + } + .navbar.is-fixed-bottom-desktop { + bottom: 0; + } + .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); + } + .navbar.is-fixed-top-desktop { + top: 0; + } + html.has-navbar-fixed-top-desktop, + body.has-navbar-fixed-top-desktop { + padding-top: 3.25rem; + } + html.has-navbar-fixed-bottom-desktop, + body.has-navbar-fixed-bottom-desktop { + padding-bottom: 3.25rem; + } + html.has-spaced-navbar-fixed-top, + body.has-spaced-navbar-fixed-top { + padding-top: 5.25rem; + } + html.has-spaced-navbar-fixed-bottom, + body.has-spaced-navbar-fixed-bottom { + padding-bottom: 5.25rem; + } + a.navbar-item.is-active, + .navbar-link.is-active { + color: #0a0a0a; + } + a.navbar-item.is-active:not(:hover), + .navbar-link.is-active:not(:hover) { + background-color: transparent; + } + .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #fafafa; + } +} + +.pagination { + font-size: 1rem; + margin: -0.25rem; +} + +.pagination.is-small { + font-size: 0.75rem; +} + +.pagination.is-medium { + font-size: 1.25rem; +} + +.pagination.is-large { + font-size: 1.5rem; +} + +.pagination.is-rounded .pagination-previous, +.pagination.is-rounded .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; +} + +.pagination.is-rounded .pagination-link { + border-radius: 290486px; +} + +.pagination, +.pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; +} + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + font-size: 1em; + padding-left: 0.5em; + padding-right: 0.5em; + justify-content: center; + margin: 0.25rem; + text-align: center; +} + +.pagination-previous, +.pagination-next, +.pagination-link { + border-color: #dbdbdb; + color: #363636; + min-width: 2.25em; +} + +.pagination-previous:hover, +.pagination-next:hover, +.pagination-link:hover { + border-color: #b5b5b5; + color: #363636; +} + +.pagination-previous:focus, +.pagination-next:focus, +.pagination-link:focus { + border-color: #3273dc; +} + +.pagination-previous:active, +.pagination-next:active, +.pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); +} + +.pagination-previous[disabled], +.pagination-next[disabled], +.pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #7a7a7a; + opacity: 0.5; +} + +.pagination-previous, +.pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; +} + +.pagination-link.is-current { + background-color: #3273dc; + border-color: #3273dc; + color: #fff; +} + +.pagination-ellipsis { + color: #b5b5b5; + pointer-events: none; +} + +.pagination-list { + flex-wrap: wrap; +} + +@media screen and (max-width: 768px) { + .pagination { + flex-wrap: wrap; + } + .pagination-previous, + .pagination-next { + flex-grow: 1; + flex-shrink: 1; + } + .pagination-list li { + flex-grow: 1; + flex-shrink: 1; + } +} + +@media screen and (min-width: 769px), print { + .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; + } + .pagination-previous { + order: 2; + } + .pagination-next { + order: 3; + } + .pagination { + justify-content: space-between; + } + .pagination.is-centered .pagination-previous { + order: 1; + } + .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; + } + .pagination.is-centered .pagination-next { + order: 3; + } + .pagination.is-right .pagination-previous { + order: 1; + } + .pagination.is-right .pagination-next { + order: 2; + } + .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; + } +} + +.panel { + font-size: 1rem; +} + +.panel:not(:last-child) { + margin-bottom: 1.5rem; +} + +.panel-heading, +.panel-tabs, +.panel-block { + border-bottom: 1px solid #dbdbdb; + border-left: 1px solid #dbdbdb; + border-right: 1px solid #dbdbdb; +} + +.panel-heading:first-child, +.panel-tabs:first-child, +.panel-block:first-child { + border-top: 1px solid #dbdbdb; +} + +.panel-heading { + background-color: whitesmoke; + border-radius: 4px 4px 0 0; + color: #363636; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; +} + +.panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; +} + +.panel-tabs a { + border-bottom: 1px solid #dbdbdb; + margin-bottom: -1px; + padding: 0.5em; +} + +.panel-tabs a.is-active { + border-bottom-color: #4a4a4a; + color: #363636; +} + +.panel-list a { + color: #4a4a4a; +} + +.panel-list a:hover { + color: #3273dc; +} + +.panel-block { + align-items: center; + color: #363636; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; +} + +.panel-block input[type="checkbox"] { + margin-right: 0.75em; +} + +.panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; +} + +.panel-block.is-wrapped { + flex-wrap: wrap; +} + +.panel-block.is-active { + border-left-color: #3273dc; + color: #363636; +} + +.panel-block.is-active .panel-icon { + color: #3273dc; +} + +a.panel-block, +label.panel-block { + cursor: pointer; +} + +a.panel-block:hover, +label.panel-block:hover { + background-color: whitesmoke; +} + +.panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: #7a7a7a; + margin-right: 0.75em; +} + +.panel-icon .fa { + font-size: inherit; + line-height: inherit; +} + +.tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 1rem; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; +} + +.tabs a { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #4a4a4a; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; +} + +.tabs a:hover { + border-bottom-color: #363636; + color: #363636; +} + +.tabs li { + display: block; +} + +.tabs li.is-active a { + border-bottom-color: #3273dc; + color: #3273dc; +} + +.tabs ul { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; +} + +.tabs ul.is-left { + padding-right: 0.75em; +} + +.tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; +} + +.tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; +} + +.tabs .icon:first-child { + margin-right: 0.5em; +} + +.tabs .icon:last-child { + margin-left: 0.5em; +} + +.tabs.is-centered ul { + justify-content: center; +} + +.tabs.is-right ul { + justify-content: flex-end; +} + +.tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.tabs.is-boxed a:hover { + background-color: whitesmoke; + border-bottom-color: #dbdbdb; +} + +.tabs.is-boxed li.is-active a { + background-color: white; + border-color: #dbdbdb; + border-bottom-color: transparent !important; +} + +.tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; +} + +.tabs.is-toggle a { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; +} + +.tabs.is-toggle a:hover { + background-color: whitesmoke; + border-color: #b5b5b5; + z-index: 2; +} + +.tabs.is-toggle li + li { + margin-left: -1px; +} + +.tabs.is-toggle li:first-child a { + border-radius: 4px 0 0 4px; +} + +.tabs.is-toggle li:last-child a { + border-radius: 0 4px 4px 0; +} + +.tabs.is-toggle li.is-active a { + background-color: #3273dc; + border-color: #3273dc; + color: #fff; + z-index: 1; +} + +.tabs.is-toggle ul { + border-bottom: none; +} + +.tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; +} + +.tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; +} + +.tabs.is-small { + font-size: 0.75rem; +} + +.tabs.is-medium { + font-size: 1.25rem; +} + +.tabs.is-large { + font-size: 1.5rem; +} + +.column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; +} + +.columns.is-mobile > .column.is-narrow { + flex: none; +} + +.columns.is-mobile > .column.is-full { + flex: none; + width: 100%; +} + +.columns.is-mobile > .column.is-three-quarters { + flex: none; + width: 75%; +} + +.columns.is-mobile > .column.is-two-thirds { + flex: none; + width: 66.6666%; +} + +.columns.is-mobile > .column.is-half { + flex: none; + width: 50%; +} + +.columns.is-mobile > .column.is-one-third { + flex: none; + width: 33.3333%; +} + +.columns.is-mobile > .column.is-one-quarter { + flex: none; + width: 25%; +} + +.columns.is-mobile > .column.is-one-fifth { + flex: none; + width: 20%; +} + +.columns.is-mobile > .column.is-two-fifths { + flex: none; + width: 40%; +} + +.columns.is-mobile > .column.is-three-fifths { + flex: none; + width: 60%; +} + +.columns.is-mobile > .column.is-four-fifths { + flex: none; + width: 80%; +} + +.columns.is-mobile > .column.is-offset-three-quarters { + margin-left: 75%; +} + +.columns.is-mobile > .column.is-offset-two-thirds { + margin-left: 66.6666%; +} + +.columns.is-mobile > .column.is-offset-half { + margin-left: 50%; +} + +.columns.is-mobile > .column.is-offset-one-third { + margin-left: 33.3333%; +} + +.columns.is-mobile > .column.is-offset-one-quarter { + margin-left: 25%; +} + +.columns.is-mobile > .column.is-offset-one-fifth { + margin-left: 20%; +} + +.columns.is-mobile > .column.is-offset-two-fifths { + margin-left: 40%; +} + +.columns.is-mobile > .column.is-offset-three-fifths { + margin-left: 60%; +} + +.columns.is-mobile > .column.is-offset-four-fifths { + margin-left: 80%; +} + +.columns.is-mobile > .column.is-1 { + flex: none; + width: 8.33333%; +} + +.columns.is-mobile > .column.is-offset-1 { + margin-left: 8.33333%; +} + +.columns.is-mobile > .column.is-2 { + flex: none; + width: 16.66667%; +} + +.columns.is-mobile > .column.is-offset-2 { + margin-left: 16.66667%; +} + +.columns.is-mobile > .column.is-3 { + flex: none; + width: 25%; +} + +.columns.is-mobile > .column.is-offset-3 { + margin-left: 25%; +} + +.columns.is-mobile > .column.is-4 { + flex: none; + width: 33.33333%; +} + +.columns.is-mobile > .column.is-offset-4 { + margin-left: 33.33333%; +} + +.columns.is-mobile > .column.is-5 { + flex: none; + width: 41.66667%; +} + +.columns.is-mobile > .column.is-offset-5 { + margin-left: 41.66667%; +} + +.columns.is-mobile > .column.is-6 { + flex: none; + width: 50%; +} + +.columns.is-mobile > .column.is-offset-6 { + margin-left: 50%; +} + +.columns.is-mobile > .column.is-7 { + flex: none; + width: 58.33333%; +} + +.columns.is-mobile > .column.is-offset-7 { + margin-left: 58.33333%; +} + +.columns.is-mobile > .column.is-8 { + flex: none; + width: 66.66667%; +} + +.columns.is-mobile > .column.is-offset-8 { + margin-left: 66.66667%; +} + +.columns.is-mobile > .column.is-9 { + flex: none; + width: 75%; +} + +.columns.is-mobile > .column.is-offset-9 { + margin-left: 75%; +} + +.columns.is-mobile > .column.is-10 { + flex: none; + width: 83.33333%; +} + +.columns.is-mobile > .column.is-offset-10 { + margin-left: 83.33333%; +} + +.columns.is-mobile > .column.is-11 { + flex: none; + width: 91.66667%; +} + +.columns.is-mobile > .column.is-offset-11 { + margin-left: 91.66667%; +} + +.columns.is-mobile > .column.is-12 { + flex: none; + width: 100%; +} + +.columns.is-mobile > .column.is-offset-12 { + margin-left: 100%; +} + +@media screen and (max-width: 768px) { + .column.is-narrow-mobile { + flex: none; + } + .column.is-full-mobile { + flex: none; + width: 100%; + } + .column.is-three-quarters-mobile { + flex: none; + width: 75%; + } + .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; + } + .column.is-half-mobile { + flex: none; + width: 50%; + } + .column.is-one-third-mobile { + flex: none; + width: 33.3333%; + } + .column.is-one-quarter-mobile { + flex: none; + width: 25%; + } + .column.is-one-fifth-mobile { + flex: none; + width: 20%; + } + .column.is-two-fifths-mobile { + flex: none; + width: 40%; + } + .column.is-three-fifths-mobile { + flex: none; + width: 60%; + } + .column.is-four-fifths-mobile { + flex: none; + width: 80%; + } + .column.is-offset-three-quarters-mobile { + margin-left: 75%; + } + .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; + } + .column.is-offset-half-mobile { + margin-left: 50%; + } + .column.is-offset-one-third-mobile { + margin-left: 33.3333%; + } + .column.is-offset-one-quarter-mobile { + margin-left: 25%; + } + .column.is-offset-one-fifth-mobile { + margin-left: 20%; + } + .column.is-offset-two-fifths-mobile { + margin-left: 40%; + } + .column.is-offset-three-fifths-mobile { + margin-left: 60%; + } + .column.is-offset-four-fifths-mobile { + margin-left: 80%; + } + .column.is-1-mobile { + flex: none; + width: 8.33333%; + } + .column.is-offset-1-mobile { + margin-left: 8.33333%; + } + .column.is-2-mobile { + flex: none; + width: 16.66667%; + } + .column.is-offset-2-mobile { + margin-left: 16.66667%; + } + .column.is-3-mobile { + flex: none; + width: 25%; + } + .column.is-offset-3-mobile { + margin-left: 25%; + } + .column.is-4-mobile { + flex: none; + width: 33.33333%; + } + .column.is-offset-4-mobile { + margin-left: 33.33333%; + } + .column.is-5-mobile { + flex: none; + width: 41.66667%; + } + .column.is-offset-5-mobile { + margin-left: 41.66667%; + } + .column.is-6-mobile { + flex: none; + width: 50%; + } + .column.is-offset-6-mobile { + margin-left: 50%; + } + .column.is-7-mobile { + flex: none; + width: 58.33333%; + } + .column.is-offset-7-mobile { + margin-left: 58.33333%; + } + .column.is-8-mobile { + flex: none; + width: 66.66667%; + } + .column.is-offset-8-mobile { + margin-left: 66.66667%; + } + .column.is-9-mobile { + flex: none; + width: 75%; + } + .column.is-offset-9-mobile { + margin-left: 75%; + } + .column.is-10-mobile { + flex: none; + width: 83.33333%; + } + .column.is-offset-10-mobile { + margin-left: 83.33333%; + } + .column.is-11-mobile { + flex: none; + width: 91.66667%; + } + .column.is-offset-11-mobile { + margin-left: 91.66667%; + } + .column.is-12-mobile { + flex: none; + width: 100%; + } + .column.is-offset-12-mobile { + margin-left: 100%; + } +} + +@media screen and (min-width: 769px), print { + .column.is-narrow, .column.is-narrow-tablet { + flex: none; + } + .column.is-full, .column.is-full-tablet { + flex: none; + width: 100%; + } + .column.is-three-quarters, .column.is-three-quarters-tablet { + flex: none; + width: 75%; + } + .column.is-two-thirds, .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; + } + .column.is-half, .column.is-half-tablet { + flex: none; + width: 50%; + } + .column.is-one-third, .column.is-one-third-tablet { + flex: none; + width: 33.3333%; + } + .column.is-one-quarter, .column.is-one-quarter-tablet { + flex: none; + width: 25%; + } + .column.is-one-fifth, .column.is-one-fifth-tablet { + flex: none; + width: 20%; + } + .column.is-two-fifths, .column.is-two-fifths-tablet { + flex: none; + width: 40%; + } + .column.is-three-fifths, .column.is-three-fifths-tablet { + flex: none; + width: 60%; + } + .column.is-four-fifths, .column.is-four-fifths-tablet { + flex: none; + width: 80%; + } + .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { + margin-left: 75%; + } + .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; + } + .column.is-offset-half, .column.is-offset-half-tablet { + margin-left: 50%; + } + .column.is-offset-one-third, .column.is-offset-one-third-tablet { + margin-left: 33.3333%; + } + .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { + margin-left: 25%; + } + .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { + margin-left: 20%; + } + .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { + margin-left: 40%; + } + .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { + margin-left: 60%; + } + .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { + margin-left: 80%; + } + .column.is-1, .column.is-1-tablet { + flex: none; + width: 8.33333%; + } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.33333%; + } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.66667%; + } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.66667%; + } + .column.is-3, .column.is-3-tablet { + flex: none; + width: 25%; + } + .column.is-offset-3, .column.is-offset-3-tablet { + margin-left: 25%; + } + .column.is-4, .column.is-4-tablet { + flex: none; + width: 33.33333%; + } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.33333%; + } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.66667%; + } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.66667%; + } + .column.is-6, .column.is-6-tablet { + flex: none; + width: 50%; + } + .column.is-offset-6, .column.is-offset-6-tablet { + margin-left: 50%; + } + .column.is-7, .column.is-7-tablet { + flex: none; + width: 58.33333%; + } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.33333%; + } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.66667%; + } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.66667%; + } + .column.is-9, .column.is-9-tablet { + flex: none; + width: 75%; + } + .column.is-offset-9, .column.is-offset-9-tablet { + margin-left: 75%; + } + .column.is-10, .column.is-10-tablet { + flex: none; + width: 83.33333%; + } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.33333%; + } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.66667%; + } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.66667%; + } + .column.is-12, .column.is-12-tablet { + flex: none; + width: 100%; + } + .column.is-offset-12, .column.is-offset-12-tablet { + margin-left: 100%; + } +} + +@media screen and (max-width: 1087px) { + .column.is-narrow-touch { + flex: none; + } + .column.is-full-touch { + flex: none; + width: 100%; + } + .column.is-three-quarters-touch { + flex: none; + width: 75%; + } + .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; + } + .column.is-half-touch { + flex: none; + width: 50%; + } + .column.is-one-third-touch { + flex: none; + width: 33.3333%; + } + .column.is-one-quarter-touch { + flex: none; + width: 25%; + } + .column.is-one-fifth-touch { + flex: none; + width: 20%; + } + .column.is-two-fifths-touch { + flex: none; + width: 40%; + } + .column.is-three-fifths-touch { + flex: none; + width: 60%; + } + .column.is-four-fifths-touch { + flex: none; + width: 80%; + } + .column.is-offset-three-quarters-touch { + margin-left: 75%; + } + .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; + } + .column.is-offset-half-touch { + margin-left: 50%; + } + .column.is-offset-one-third-touch { + margin-left: 33.3333%; + } + .column.is-offset-one-quarter-touch { + margin-left: 25%; + } + .column.is-offset-one-fifth-touch { + margin-left: 20%; + } + .column.is-offset-two-fifths-touch { + margin-left: 40%; + } + .column.is-offset-three-fifths-touch { + margin-left: 60%; + } + .column.is-offset-four-fifths-touch { + margin-left: 80%; + } + .column.is-1-touch { + flex: none; + width: 8.33333%; + } + .column.is-offset-1-touch { + margin-left: 8.33333%; + } + .column.is-2-touch { + flex: none; + width: 16.66667%; + } + .column.is-offset-2-touch { + margin-left: 16.66667%; + } + .column.is-3-touch { + flex: none; + width: 25%; + } + .column.is-offset-3-touch { + margin-left: 25%; + } + .column.is-4-touch { + flex: none; + width: 33.33333%; + } + .column.is-offset-4-touch { + margin-left: 33.33333%; + } + .column.is-5-touch { + flex: none; + width: 41.66667%; + } + .column.is-offset-5-touch { + margin-left: 41.66667%; + } + .column.is-6-touch { + flex: none; + width: 50%; + } + .column.is-offset-6-touch { + margin-left: 50%; + } + .column.is-7-touch { + flex: none; + width: 58.33333%; + } + .column.is-offset-7-touch { + margin-left: 58.33333%; + } + .column.is-8-touch { + flex: none; + width: 66.66667%; + } + .column.is-offset-8-touch { + margin-left: 66.66667%; + } + .column.is-9-touch { + flex: none; + width: 75%; + } + .column.is-offset-9-touch { + margin-left: 75%; + } + .column.is-10-touch { + flex: none; + width: 83.33333%; + } + .column.is-offset-10-touch { + margin-left: 83.33333%; + } + .column.is-11-touch { + flex: none; + width: 91.66667%; + } + .column.is-offset-11-touch { + margin-left: 91.66667%; + } + .column.is-12-touch { + flex: none; + width: 100%; + } + .column.is-offset-12-touch { + margin-left: 100%; + } +} + +@media screen and (min-width: 1088px) { + .column.is-narrow-desktop { + flex: none; + } + .column.is-full-desktop { + flex: none; + width: 100%; + } + .column.is-three-quarters-desktop { + flex: none; + width: 75%; + } + .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; + } + .column.is-half-desktop { + flex: none; + width: 50%; + } + .column.is-one-third-desktop { + flex: none; + width: 33.3333%; + } + .column.is-one-quarter-desktop { + flex: none; + width: 25%; + } + .column.is-one-fifth-desktop { + flex: none; + width: 20%; + } + .column.is-two-fifths-desktop { + flex: none; + width: 40%; + } + .column.is-three-fifths-desktop { + flex: none; + width: 60%; + } + .column.is-four-fifths-desktop { + flex: none; + width: 80%; + } + .column.is-offset-three-quarters-desktop { + margin-left: 75%; + } + .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; + } + .column.is-offset-half-desktop { + margin-left: 50%; + } + .column.is-offset-one-third-desktop { + margin-left: 33.3333%; + } + .column.is-offset-one-quarter-desktop { + margin-left: 25%; + } + .column.is-offset-one-fifth-desktop { + margin-left: 20%; + } + .column.is-offset-two-fifths-desktop { + margin-left: 40%; + } + .column.is-offset-three-fifths-desktop { + margin-left: 60%; + } + .column.is-offset-four-fifths-desktop { + margin-left: 80%; + } + .column.is-1-desktop { + flex: none; + width: 8.33333%; + } + .column.is-offset-1-desktop { + margin-left: 8.33333%; + } + .column.is-2-desktop { + flex: none; + width: 16.66667%; + } + .column.is-offset-2-desktop { + margin-left: 16.66667%; + } + .column.is-3-desktop { + flex: none; + width: 25%; + } + .column.is-offset-3-desktop { + margin-left: 25%; + } + .column.is-4-desktop { + flex: none; + width: 33.33333%; + } + .column.is-offset-4-desktop { + margin-left: 33.33333%; + } + .column.is-5-desktop { + flex: none; + width: 41.66667%; + } + .column.is-offset-5-desktop { + margin-left: 41.66667%; + } + .column.is-6-desktop { + flex: none; + width: 50%; + } + .column.is-offset-6-desktop { + margin-left: 50%; + } + .column.is-7-desktop { + flex: none; + width: 58.33333%; + } + .column.is-offset-7-desktop { + margin-left: 58.33333%; + } + .column.is-8-desktop { + flex: none; + width: 66.66667%; + } + .column.is-offset-8-desktop { + margin-left: 66.66667%; + } + .column.is-9-desktop { + flex: none; + width: 75%; + } + .column.is-offset-9-desktop { + margin-left: 75%; + } + .column.is-10-desktop { + flex: none; + width: 83.33333%; + } + .column.is-offset-10-desktop { + margin-left: 83.33333%; + } + .column.is-11-desktop { + flex: none; + width: 91.66667%; + } + .column.is-offset-11-desktop { + margin-left: 91.66667%; + } + .column.is-12-desktop { + flex: none; + width: 100%; + } + .column.is-offset-12-desktop { + margin-left: 100%; + } +} + +@media screen and (min-width: 1280px) { + .column.is-narrow-widescreen { + flex: none; + } + .column.is-full-widescreen { + flex: none; + width: 100%; + } + .column.is-three-quarters-widescreen { + flex: none; + width: 75%; + } + .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; + } + .column.is-half-widescreen { + flex: none; + width: 50%; + } + .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; + } + .column.is-one-quarter-widescreen { + flex: none; + width: 25%; + } + .column.is-one-fifth-widescreen { + flex: none; + width: 20%; + } + .column.is-two-fifths-widescreen { + flex: none; + width: 40%; + } + .column.is-three-fifths-widescreen { + flex: none; + width: 60%; + } + .column.is-four-fifths-widescreen { + flex: none; + width: 80%; + } + .column.is-offset-three-quarters-widescreen { + margin-left: 75%; + } + .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; + } + .column.is-offset-half-widescreen { + margin-left: 50%; + } + .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; + } + .column.is-offset-one-quarter-widescreen { + margin-left: 25%; + } + .column.is-offset-one-fifth-widescreen { + margin-left: 20%; + } + .column.is-offset-two-fifths-widescreen { + margin-left: 40%; + } + .column.is-offset-three-fifths-widescreen { + margin-left: 60%; + } + .column.is-offset-four-fifths-widescreen { + margin-left: 80%; + } + .column.is-1-widescreen { + flex: none; + width: 8.33333%; + } + .column.is-offset-1-widescreen { + margin-left: 8.33333%; + } + .column.is-2-widescreen { + flex: none; + width: 16.66667%; + } + .column.is-offset-2-widescreen { + margin-left: 16.66667%; + } + .column.is-3-widescreen { + flex: none; + width: 25%; + } + .column.is-offset-3-widescreen { + margin-left: 25%; + } + .column.is-4-widescreen { + flex: none; + width: 33.33333%; + } + .column.is-offset-4-widescreen { + margin-left: 33.33333%; + } + .column.is-5-widescreen { + flex: none; + width: 41.66667%; + } + .column.is-offset-5-widescreen { + margin-left: 41.66667%; + } + .column.is-6-widescreen { + flex: none; + width: 50%; + } + .column.is-offset-6-widescreen { + margin-left: 50%; + } + .column.is-7-widescreen { + flex: none; + width: 58.33333%; + } + .column.is-offset-7-widescreen { + margin-left: 58.33333%; + } + .column.is-8-widescreen { + flex: none; + width: 66.66667%; + } + .column.is-offset-8-widescreen { + margin-left: 66.66667%; + } + .column.is-9-widescreen { + flex: none; + width: 75%; + } + .column.is-offset-9-widescreen { + margin-left: 75%; + } + .column.is-10-widescreen { + flex: none; + width: 83.33333%; + } + .column.is-offset-10-widescreen { + margin-left: 83.33333%; + } + .column.is-11-widescreen { + flex: none; + width: 91.66667%; + } + .column.is-offset-11-widescreen { + margin-left: 91.66667%; + } + .column.is-12-widescreen { + flex: none; + width: 100%; + } + .column.is-offset-12-widescreen { + margin-left: 100%; + } +} + +@media screen and (min-width: 1472px) { + .column.is-narrow-fullhd { + flex: none; + } + .column.is-full-fullhd { + flex: none; + width: 100%; + } + .column.is-three-quarters-fullhd { + flex: none; + width: 75%; + } + .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; + } + .column.is-half-fullhd { + flex: none; + width: 50%; + } + .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; + } + .column.is-one-quarter-fullhd { + flex: none; + width: 25%; + } + .column.is-one-fifth-fullhd { + flex: none; + width: 20%; + } + .column.is-two-fifths-fullhd { + flex: none; + width: 40%; + } + .column.is-three-fifths-fullhd { + flex: none; + width: 60%; + } + .column.is-four-fifths-fullhd { + flex: none; + width: 80%; + } + .column.is-offset-three-quarters-fullhd { + margin-left: 75%; + } + .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; + } + .column.is-offset-half-fullhd { + margin-left: 50%; + } + .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; + } + .column.is-offset-one-quarter-fullhd { + margin-left: 25%; + } + .column.is-offset-one-fifth-fullhd { + margin-left: 20%; + } + .column.is-offset-two-fifths-fullhd { + margin-left: 40%; + } + .column.is-offset-three-fifths-fullhd { + margin-left: 60%; + } + .column.is-offset-four-fifths-fullhd { + margin-left: 80%; + } + .column.is-1-fullhd { + flex: none; + width: 8.33333%; + } + .column.is-offset-1-fullhd { + margin-left: 8.33333%; + } + .column.is-2-fullhd { + flex: none; + width: 16.66667%; + } + .column.is-offset-2-fullhd { + margin-left: 16.66667%; + } + .column.is-3-fullhd { + flex: none; + width: 25%; + } + .column.is-offset-3-fullhd { + margin-left: 25%; + } + .column.is-4-fullhd { + flex: none; + width: 33.33333%; + } + .column.is-offset-4-fullhd { + margin-left: 33.33333%; + } + .column.is-5-fullhd { + flex: none; + width: 41.66667%; + } + .column.is-offset-5-fullhd { + margin-left: 41.66667%; + } + .column.is-6-fullhd { + flex: none; + width: 50%; + } + .column.is-offset-6-fullhd { + margin-left: 50%; + } + .column.is-7-fullhd { + flex: none; + width: 58.33333%; + } + .column.is-offset-7-fullhd { + margin-left: 58.33333%; + } + .column.is-8-fullhd { + flex: none; + width: 66.66667%; + } + .column.is-offset-8-fullhd { + margin-left: 66.66667%; + } + .column.is-9-fullhd { + flex: none; + width: 75%; + } + .column.is-offset-9-fullhd { + margin-left: 75%; + } + .column.is-10-fullhd { + flex: none; + width: 83.33333%; + } + .column.is-offset-10-fullhd { + margin-left: 83.33333%; + } + .column.is-11-fullhd { + flex: none; + width: 91.66667%; + } + .column.is-offset-11-fullhd { + margin-left: 91.66667%; + } + .column.is-12-fullhd { + flex: none; + width: 100%; + } + .column.is-offset-12-fullhd { + margin-left: 100%; + } +} + +.columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; +} + +.columns:last-child { + margin-bottom: -0.75rem; +} + +.columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); +} + +.columns.is-centered { + justify-content: center; +} + +.columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; +} + +.columns.is-gapless > .column { + margin: 0; + padding: 0 !important; +} + +.columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; +} + +.columns.is-gapless:last-child { + margin-bottom: 0; +} + +.columns.is-mobile { + display: flex; +} + +.columns.is-multiline { + flex-wrap: wrap; +} + +.columns.is-vcentered { + align-items: center; +} + +@media screen and (min-width: 769px), print { + .columns:not(.is-desktop) { + display: flex; + } +} + +@media screen and (min-width: 1088px) { + .columns.is-desktop { + display: flex; + } +} + +.columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); +} + +.columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); +} + +.columns.is-variable.is-0 { + --columnGap: 0rem; +} + +.columns.is-variable.is-1 { + --columnGap: 0.25rem; +} + +.columns.is-variable.is-2 { + --columnGap: 0.5rem; +} + +.columns.is-variable.is-3 { + --columnGap: 0.75rem; +} + +.columns.is-variable.is-4 { + --columnGap: 1rem; +} + +.columns.is-variable.is-5 { + --columnGap: 1.25rem; +} + +.columns.is-variable.is-6 { + --columnGap: 1.5rem; +} + +.columns.is-variable.is-7 { + --columnGap: 1.75rem; +} + +.columns.is-variable.is-8 { + --columnGap: 2rem; +} + +.tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: -webkit-min-content; + min-height: -moz-min-content; + min-height: min-content; +} + +.tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; +} + +.tile.is-ancestor:last-child { + margin-bottom: -0.75rem; +} + +.tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; +} + +.tile.is-child { + margin: 0 !important; +} + +.tile.is-parent { + padding: 0.75rem; +} + +.tile.is-vertical { + flex-direction: column; +} + +.tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; +} + +@media screen and (min-width: 769px), print { + .tile:not(.is-child) { + display: flex; + } + .tile.is-1 { + flex: none; + width: 8.33333%; + } + .tile.is-2 { + flex: none; + width: 16.66667%; + } + .tile.is-3 { + flex: none; + width: 25%; + } + .tile.is-4 { + flex: none; + width: 33.33333%; + } + .tile.is-5 { + flex: none; + width: 41.66667%; + } + .tile.is-6 { + flex: none; + width: 50%; + } + .tile.is-7 { + flex: none; + width: 58.33333%; + } + .tile.is-8 { + flex: none; + width: 66.66667%; + } + .tile.is-9 { + flex: none; + width: 75%; + } + .tile.is-10 { + flex: none; + width: 83.33333%; + } + .tile.is-11 { + flex: none; + width: 91.66667%; + } + .tile.is-12 { + flex: none; + width: 100%; + } +} + +.hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.hero .navbar { + background: none; +} + +.hero .tabs ul { + border-bottom: none; +} + +.hero.is-white { + background-color: white; + color: #0a0a0a; +} + +.hero.is-white a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-white strong { + color: inherit; +} + +.hero.is-white .title { + color: #0a0a0a; +} + +.hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); +} + +.hero.is-white .subtitle a:not(.button), +.hero.is-white .subtitle strong { + color: #0a0a0a; +} + +@media screen and (max-width: 1087px) { + .hero.is-white .navbar-menu { + background-color: white; + } +} + +.hero.is-white .navbar-item, +.hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); +} + +.hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, +.hero.is-white .navbar-link:hover, +.hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; +} + +.hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; +} + +.hero.is-white .tabs a:hover { + opacity: 1; +} + +.hero.is-white .tabs li.is-active a { + opacity: 1; +} + +.hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; +} + +.hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; +} + +.hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); + } +} + +.hero.is-black { + background-color: #0a0a0a; + color: white; +} + +.hero.is-black a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-black strong { + color: inherit; +} + +.hero.is-black .title { + color: white; +} + +.hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); +} + +.hero.is-black .subtitle a:not(.button), +.hero.is-black .subtitle strong { + color: white; +} + +@media screen and (max-width: 1087px) { + .hero.is-black .navbar-menu { + background-color: #0a0a0a; + } +} + +.hero.is-black .navbar-item, +.hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); +} + +.hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, +.hero.is-black .navbar-link:hover, +.hero.is-black .navbar-link.is-active { + background-color: black; + color: white; +} + +.hero.is-black .tabs a { + color: white; + opacity: 0.9; +} + +.hero.is-black .tabs a:hover { + opacity: 1; +} + +.hero.is-black .tabs li.is-active a { + opacity: 1; +} + +.hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { + color: white; +} + +.hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; +} + +.hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); + } +} + +.hero.is-light { + background-color: whitesmoke; + color: #363636; +} + +.hero.is-light a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-light strong { + color: inherit; +} + +.hero.is-light .title { + color: #363636; +} + +.hero.is-light .subtitle { + color: rgba(54, 54, 54, 0.9); +} + +.hero.is-light .subtitle a:not(.button), +.hero.is-light .subtitle strong { + color: #363636; +} + +@media screen and (max-width: 1087px) { + .hero.is-light .navbar-menu { + background-color: whitesmoke; + } +} + +.hero.is-light .navbar-item, +.hero.is-light .navbar-link { + color: rgba(54, 54, 54, 0.7); +} + +.hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, +.hero.is-light .navbar-link:hover, +.hero.is-light .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; +} + +.hero.is-light .tabs a { + color: #363636; + opacity: 0.9; +} + +.hero.is-light .tabs a:hover { + opacity: 1; +} + +.hero.is-light .tabs li.is-active a { + opacity: 1; +} + +.hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { + color: #363636; +} + +.hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #363636; + border-color: #363636; + color: whitesmoke; +} + +.hero.is-light.is-bold { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); + } +} + +.hero.is-dark { + background-color: #363636; + color: whitesmoke; +} + +.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-dark strong { + color: inherit; +} + +.hero.is-dark .title { + color: whitesmoke; +} + +.hero.is-dark .subtitle { + color: rgba(245, 245, 245, 0.9); +} + +.hero.is-dark .subtitle a:not(.button), +.hero.is-dark .subtitle strong { + color: whitesmoke; +} + +@media screen and (max-width: 1087px) { + .hero.is-dark .navbar-menu { + background-color: #363636; + } +} + +.hero.is-dark .navbar-item, +.hero.is-dark .navbar-link { + color: rgba(245, 245, 245, 0.7); +} + +.hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, +.hero.is-dark .navbar-link:hover, +.hero.is-dark .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; +} + +.hero.is-dark .tabs a { + color: whitesmoke; + opacity: 0.9; +} + +.hero.is-dark .tabs a:hover { + opacity: 1; +} + +.hero.is-dark .tabs li.is-active a { + opacity: 1; +} + +.hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a { + color: whitesmoke; +} + +.hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; +} + +.hero.is-dark.is-bold { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-dark.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); + } +} + +.hero.is-primary { + background-color: #00d1b2; + color: #fff; +} + +.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-primary strong { + color: inherit; +} + +.hero.is-primary .title { + color: #fff; +} + +.hero.is-primary .subtitle { + color: rgba(255, 255, 255, 0.9); +} + +.hero.is-primary .subtitle a:not(.button), +.hero.is-primary .subtitle strong { + color: #fff; +} + +@media screen and (max-width: 1087px) { + .hero.is-primary .navbar-menu { + background-color: #00d1b2; + } +} + +.hero.is-primary .navbar-item, +.hero.is-primary .navbar-link { + color: rgba(255, 255, 255, 0.7); +} + +.hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, +.hero.is-primary .navbar-link:hover, +.hero.is-primary .navbar-link.is-active { + background-color: #00b89c; + color: #fff; +} + +.hero.is-primary .tabs a { + color: #fff; + opacity: 0.9; +} + +.hero.is-primary .tabs a:hover { + opacity: 1; +} + +.hero.is-primary .tabs li.is-active a { + opacity: 1; +} + +.hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a { + color: #fff; +} + +.hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #00d1b2; +} + +.hero.is-primary.is-bold { + background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); + } +} + +.hero.is-link { + background-color: #3273dc; + color: #fff; +} + +.hero.is-link a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-link strong { + color: inherit; +} + +.hero.is-link .title { + color: #fff; +} + +.hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); +} + +.hero.is-link .subtitle a:not(.button), +.hero.is-link .subtitle strong { + color: #fff; +} + +@media screen and (max-width: 1087px) { + .hero.is-link .navbar-menu { + background-color: #3273dc; + } +} + +.hero.is-link .navbar-item, +.hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); +} + +.hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, +.hero.is-link .navbar-link:hover, +.hero.is-link .navbar-link.is-active { + background-color: #2366d1; + color: #fff; +} + +.hero.is-link .tabs a { + color: #fff; + opacity: 0.9; +} + +.hero.is-link .tabs a:hover { + opacity: 1; +} + +.hero.is-link .tabs li.is-active a { + opacity: 1; +} + +.hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; +} + +.hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #3273dc; +} + +.hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); + } +} + +.hero.is-info { + background-color: #209cee; + color: #fff; +} + +.hero.is-info a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-info strong { + color: inherit; +} + +.hero.is-info .title { + color: #fff; +} + +.hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); +} + +.hero.is-info .subtitle a:not(.button), +.hero.is-info .subtitle strong { + color: #fff; +} + +@media screen and (max-width: 1087px) { + .hero.is-info .navbar-menu { + background-color: #209cee; + } +} + +.hero.is-info .navbar-item, +.hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); +} + +.hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, +.hero.is-info .navbar-link:hover, +.hero.is-info .navbar-link.is-active { + background-color: #118fe4; + color: #fff; +} + +.hero.is-info .tabs a { + color: #fff; + opacity: 0.9; +} + +.hero.is-info .tabs a:hover { + opacity: 1; +} + +.hero.is-info .tabs li.is-active a { + opacity: 1; +} + +.hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; +} + +.hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; +} + +.hero.is-info.is-bold { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); + } +} + +.hero.is-success { + background-color: #23d160; + color: #fff; +} + +.hero.is-success a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-success strong { + color: inherit; +} + +.hero.is-success .title { + color: #fff; +} + +.hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); +} + +.hero.is-success .subtitle a:not(.button), +.hero.is-success .subtitle strong { + color: #fff; +} + +@media screen and (max-width: 1087px) { + .hero.is-success .navbar-menu { + background-color: #23d160; + } +} + +.hero.is-success .navbar-item, +.hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); +} + +.hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, +.hero.is-success .navbar-link:hover, +.hero.is-success .navbar-link.is-active { + background-color: #20bc56; + color: #fff; +} + +.hero.is-success .tabs a { + color: #fff; + opacity: 0.9; +} + +.hero.is-success .tabs a:hover { + opacity: 1; +} + +.hero.is-success .tabs li.is-active a { + opacity: 1; +} + +.hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; +} + +.hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #23d160; +} + +.hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%); + } +} + +.hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); +} + +.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-warning strong { + color: inherit; +} + +.hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); +} + +.hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); +} + +.hero.is-warning .subtitle a:not(.button), +.hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); +} + +@media screen and (max-width: 1087px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; + } +} + +.hero.is-warning .navbar-item, +.hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); +} + +.hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, +.hero.is-warning .navbar-link:hover, +.hero.is-warning .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); +} + +.hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; +} + +.hero.is-warning .tabs a:hover { + opacity: 1; +} + +.hero.is-warning .tabs li.is-active a { + opacity: 1; +} + +.hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); +} + +.hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; +} + +.hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); + } +} + +.hero.is-danger { + background-color: #ff3860; + color: #fff; +} + +.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag), +.hero.is-danger strong { + color: inherit; +} + +.hero.is-danger .title { + color: #fff; +} + +.hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); +} + +.hero.is-danger .subtitle a:not(.button), +.hero.is-danger .subtitle strong { + color: #fff; +} + +@media screen and (max-width: 1087px) { + .hero.is-danger .navbar-menu { + background-color: #ff3860; + } +} + +.hero.is-danger .navbar-item, +.hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); +} + +.hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, +.hero.is-danger .navbar-link:hover, +.hero.is-danger .navbar-link.is-active { + background-color: #ff1f4b; + color: #fff; +} + +.hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; +} + +.hero.is-danger .tabs a:hover { + opacity: 1; +} + +.hero.is-danger .tabs li.is-active a { + opacity: 1; +} + +.hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { + color: #fff; +} + +.hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); +} + +.hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #ff3860; +} + +.hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%); +} + +@media screen and (max-width: 768px) { + .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%); + } +} + +.hero.is-small .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; +} + +@media screen and (min-width: 769px), print { + .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; + } +} + +@media screen and (min-width: 769px), print { + .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; + } +} + +.hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body { + align-items: center; + display: flex; +} + +.hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; +} + +.hero.is-halfheight { + min-height: 50vh; +} + +.hero.is-fullheight { + min-height: 100vh; +} + +.hero-video { + overflow: hidden; +} + +.hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); +} + +.hero-video.is-transparent { + opacity: 0.3; +} + +@media screen and (max-width: 768px) { + .hero-video { + display: none; + } +} + +.hero-buttons { + margin-top: 1.5rem; +} + +@media screen and (max-width: 768px) { + .hero-buttons .button { + display: flex; + } + .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; + } +} + +@media screen and (min-width: 769px), print { + .hero-buttons { + display: flex; + justify-content: center; + } + .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; + } +} + +.hero-head, +.hero-foot { + flex-grow: 0; + flex-shrink: 0; +} + +.hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; +} + +.section { + padding: 3rem 1.5rem; +} + +@media screen and (min-width: 1088px) { + .section.is-medium { + padding: 9rem 1.5rem; + } + .section.is-large { + padding: 18rem 1.5rem; + } +} + +.footer { + background-color: #fafafa; + padding: 3rem 1.5rem 6rem; +} +/*# sourceMappingURL=bulma.css.map */ \ No newline at end of file diff --git a/pages/assets/css/fontawesome.all.min.css b/pages/assets/css/fontawesome.all.min.css new file mode 100644 index 0000000..3d28ab2 --- /dev/null +++ b/pages/assets/css/fontawesome.all.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\f95b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\f952"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\f905"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\f95c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\f95d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\f95e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\f95f"}.fa-handshake-slash:before{content:"\f960"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\f961"}.fa-head-side-cough-slash:before{content:"\f962"}.fa-head-side-mask:before{content:"\f963"}.fa-head-side-virus:before{content:"\f964"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\f965"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\f955"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\f966"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\f967"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\f956"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\f968"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\f969"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\f96a"}.fa-pump-soap:before{content:"\f96b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\f96c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\f957"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\f96e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\f96f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\f970"}.fa-store-slash:before{content:"\f971"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\f972"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\f974"}.fa-virus-slash:before{content:"\f975"}.fa-viruses:before{content:"\f976"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/pages/css/style.css b/pages/assets/css/style.css similarity index 100% rename from pages/css/style.css rename to pages/assets/css/style.css diff --git a/pages/js/choice_screen.js b/pages/assets/js/choice_screen.js similarity index 100% rename from pages/js/choice_screen.js rename to pages/assets/js/choice_screen.js diff --git a/pages/js/notice.js b/pages/assets/js/notice.js similarity index 97% rename from pages/js/notice.js rename to pages/assets/js/notice.js index 6a2319e..a8ec18e 100644 --- a/pages/js/notice.js +++ b/pages/assets/js/notice.js @@ -52,7 +52,7 @@ window.addEventListener("DOMContentLoaded", function () { document.getElementById("engine-description").textContent = engineDetails[ response.newEngine ]; const logo = document.getElementById("notice-logo") - logo.src = `logos/${response.newEngine.toLowerCase()}.png` + logo.src = `assets/logos/${response.newEngine.toLowerCase()}.png` logo.alt = `${response.newEngine} logo` } } diff --git a/pages/logos/ask.png b/pages/assets/logos/Ask.png similarity index 100% rename from pages/logos/ask.png rename to pages/assets/logos/Ask.png diff --git a/pages/logos/baidu.png b/pages/assets/logos/Baidu.png similarity index 100% rename from pages/logos/baidu.png rename to pages/assets/logos/Baidu.png diff --git a/pages/logos/bing.png b/pages/assets/logos/Bing.png similarity index 100% rename from pages/logos/bing.png rename to pages/assets/logos/Bing.png diff --git a/pages/logos/duckduckgo.png b/pages/assets/logos/DuckDuckGo.png similarity index 100% rename from pages/logos/duckduckgo.png rename to pages/assets/logos/DuckDuckGo.png diff --git a/pages/logos/ecosia.png b/pages/assets/logos/Ecosia.png similarity index 100% rename from pages/logos/ecosia.png rename to pages/assets/logos/Ecosia.png diff --git a/pages/logos/google.png b/pages/assets/logos/Google.png similarity index 100% rename from pages/logos/google.png rename to pages/assets/logos/Google.png diff --git a/pages/logos/princeton.png b/pages/assets/logos/Princeton.png similarity index 100% rename from pages/logos/princeton.png rename to pages/assets/logos/Princeton.png diff --git a/pages/logos/yahoo.png b/pages/assets/logos/Yahoo.png similarity index 100% rename from pages/logos/yahoo.png rename to pages/assets/logos/Yahoo.png diff --git a/pages/logos/yandex.png b/pages/assets/logos/Yandex.png similarity index 100% rename from pages/logos/yandex.png rename to pages/assets/logos/Yandex.png diff --git a/pages/choice_screen_1.html b/pages/choice_screen_1.html deleted file mode 100644 index 5d07d00..0000000 --- a/pages/choice_screen_1.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - - - Search Engine Choice Screen - - - - - -
-
-
-
-

Select a Search Engine for Firefox

-

- These search engines are each used by millions across the globe. -

-

- You can always select another - search engine later in Firefox settings. - Learn More. -

- -
- -
- -
-
-
- -
-
-

Google

-
-
- -
-
-
- -
-
-
- -
-
-

DuckDuckGo

-
-
- -
-
-
- -
-
-
- -
-
-

Bing

-
-
- -
-
-
- -
-
-
- -
-
-

Yahoo

-
-
- -
-
-
-
- -
-
-
- - - - - - - - \ No newline at end of file diff --git a/pages/choice_screen_2.html b/pages/choice_screen_2.html deleted file mode 100644 index 9c47060..0000000 --- a/pages/choice_screen_2.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - Search Engine Choice Screen - - - - - -
-
-
-
-

Select a Search Engine for Firefox

-

- These search engines are each used by millions across the globe. -

-

- You can always select another - search engine later in Firefox settings. - Learn More. -

- -
- -
- -
-
-
- -
-
-

Google

-

Find what you need with the world's most used search engine.

-
-
- -
-
- -
-
-
- -
-
-
- -
-
-

DuckDuckGo

-

We don't track you. Privacy, simplified.

-
-
- -
-
- -
-
-
- -
-
-
- -
-
-

Bing

-

Fast, accurate, and private search from Microsoft.

-
-
- -
-
- -
-
-
- -
-
-
- -
-
-

Yahoo

-

Yahoo connects people with the things they love.

-
-
- -
-
- -
-
-
-
- -
-
-
- - - - - - - - \ No newline at end of file diff --git a/pages/choice_screen_3.html b/pages/choice_screen_3.html deleted file mode 100644 index 84fbf16..0000000 --- a/pages/choice_screen_3.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - Search Engine Choice Screen - - - - - -
-
-
-
-

Select a Search Engine for Firefox

-

- These search engines are each used by millions across the globe. -

-

- You can always select another - search engine later in Firefox settings. - Learn More. -

- -
- -
-
-
-
- -
-
-

Google

-

Find what you need with the world's most used search engine.

-
-
- -
-
-
-
-
-
- -
-
-

DuckDuckGo

-

We don't track you. Privacy, simplified.

-
-
- -
-
-
-
-
-
- -
-
-

Bing

-

Fast, accurate, and private search from Microsoft.

-
-
- -
-
-
-
-
-
- -
-
-

Yahoo

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/pages/choice_screen_4.html b/pages/choice_screen_4.html deleted file mode 100644 index c675c53..0000000 --- a/pages/choice_screen_4.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - Search Engine Choice Screen - - - - - -
-
-
-
-

Select a Search Engine for Firefox

-

- These search engines are each used by millions across the globe. -

-

- You can always select another - search engine later in Firefox settings. - Learn More. -

- -
-
-
-
-
- -
-
-

Google

-

Find what you need with the world's most used search engine.

-
-
- -
-
-
-
-
-
- -
-
-

DuckDuckGo

-

We don't track you. Privacy, simplified.

-
-
- -
-
-
-
-
-
- -
-
-

Bing

-

Fast, accurate, and private search from Microsoft.

-
-
- -
-
-
-
-
-
- -
-
-

Yahoo

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
- -
-
-

Yandex

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
- -
-
-

Baidu

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
- -
-
-

Ecosia

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
-
- -
-
-

Ask.com

-

Yahoo connects people with the things they love.

-
-
- -
-
-
-
-
- -
-
-
- - - - - - - - \ No newline at end of file diff --git a/pages/components/choice_screen/ChoiceScreen.svelte b/pages/components/choice_screen/ChoiceScreen.svelte new file mode 100644 index 0000000..a778ebb --- /dev/null +++ b/pages/components/choice_screen/ChoiceScreen.svelte @@ -0,0 +1,116 @@ + + +
+
+
+
+

Select a Search Engine for Firefox

+

+ These search engines are each used by millions of users + worldwide. +

+

+ You can always select another search engine later in Firefox + settings. + Learn More. +

+ +
+
+ {#each engines as { engine, engineDisplayName, description }, i} + {#if type === "Extended"} + + {:else if i < 4} + {#if type === "Default"} + + {:else if type === "HiddenDescription"} + + {:else if type === "VisibleDescription"} + + {/if} + {/if} + {/each} +
+ {#if type === "Extended"} +
+ + {/if} +
+
+
+ diff --git a/pages/components/choice_screen/Entry.svelte b/pages/components/choice_screen/Entry.svelte new file mode 100644 index 0000000..470ed03 --- /dev/null +++ b/pages/components/choice_screen/Entry.svelte @@ -0,0 +1,30 @@ + + +
+
+
+ +
+
+

{engineDisplayName}

+
+
+ +
+
+
diff --git a/pages/components/choice_screen/EntryHiddenDescription.svelte b/pages/components/choice_screen/EntryHiddenDescription.svelte new file mode 100644 index 0000000..cd8b5d4 --- /dev/null +++ b/pages/components/choice_screen/EntryHiddenDescription.svelte @@ -0,0 +1,35 @@ + + +
+
+
+ +
+
+

{engineDisplayName}

+

+ {description} +

+
+
+ +