From 964abfc95268d427aeaf742943770103c1efa14d Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 4 Sep 2021 04:34:19 +0200 Subject: [PATCH 01/32] chore: start impleting new NodeSecure back-end --- .editorconfig | 13 +- .eslintrc | 11 +- FLAGS.md | 231 - README.md | 30 +- bin/index.js | 727 +-- flags/hasBannedFile.html | 13 - flags/hasCustomResolver.html | 14 - flags/hasExternalCapacity.html | 15 - flags/hasIndirectDependencies.html | 51 - flags/hasManyPublishers.html | 5 - flags/hasMinifiedCode.html | 26 - flags/hasMissingOrUnusedDependency.html | 4 - flags/hasMultipleLicenses.html | 17 - flags/hasNativeCode.html | 13 - flags/hasNoLicense.html | 22 - flags/hasScript.html | 24 - flags/hasWarnings.html | 6 - flags/isDead.html | 8 - flags/isDeprecated.html | 14 - flags/isDuplicate.html | 6 - flags/isGit.html | 13 - flags/isOutdated.html | 13 - flags/manifest.json | 70 - flags/vulnerabilities.html | 8 - i18n/english.js | 117 - i18n/french.js | 117 - index.d.ts | 155 - index.js | 148 - package-lock.json | 4784 ++++++++--------- package.json | 49 +- src/depWalker.js | 387 -- src/dependency.class.js | 104 - src/httpServer.js | 144 +- src/i18n.js | 70 - src/tarball.js | 218 - src/utils.js | 257 +- src/vulnerabilities/strategies.js | 9 - src/vulnerabilities/strategies/npm-audit.js | 63 - src/vulnerabilities/strategies/security-wg.js | 139 - src/vulnerabilities/vulnerabilitySource.js | 39 - src/warnings.js | 31 - test/__snapshots__/depWalker.js.snap | 120 - test/__snapshots__/httpServer.js.snap | 80 - test/depWalker.js | 62 - test/dependency.js | 50 - test/fixtures/depWalker/slimio.config.json | 36 - test/fixtures/depWalker/slimio.is.json | 34 - .../fixtures/getTarballComposition/one/README | 1 - .../getTarballComposition/two/empty.txt | 0 .../getTarballComposition/two/package.json | 1 - .../two/two-deep/test.js | 3 - test/fixtures/httpServer/payload.json | 3 - test/fixtures/mergeDependencies/one.json | 9 - test/fixtures/mergeDependencies/three.json | 1 - test/fixtures/mergeDependencies/two.json | 9 - test/getFilesRecursive.js | 27 - test/getTarballComposition.js | 29 - test/httpServer.js | 62 +- test/i18n.js | 49 - test/mergeDependencies.js | 64 - test/utils.js | 54 - test/vulnerabilities/npm-audit.js | 11 - test/vulnerabilities/security-wg.js | 25 - test/vulnerabilities/vulnerabilitySource.js | 81 - test/warnings.js | 19 - 65 files changed, 2719 insertions(+), 6296 deletions(-) delete mode 100644 FLAGS.md delete mode 100644 flags/hasBannedFile.html delete mode 100644 flags/hasCustomResolver.html delete mode 100644 flags/hasExternalCapacity.html delete mode 100644 flags/hasIndirectDependencies.html delete mode 100644 flags/hasManyPublishers.html delete mode 100644 flags/hasMinifiedCode.html delete mode 100644 flags/hasMissingOrUnusedDependency.html delete mode 100644 flags/hasMultipleLicenses.html delete mode 100644 flags/hasNativeCode.html delete mode 100644 flags/hasNoLicense.html delete mode 100644 flags/hasScript.html delete mode 100644 flags/hasWarnings.html delete mode 100644 flags/isDead.html delete mode 100644 flags/isDeprecated.html delete mode 100644 flags/isDuplicate.html delete mode 100644 flags/isGit.html delete mode 100644 flags/isOutdated.html delete mode 100644 flags/manifest.json delete mode 100644 flags/vulnerabilities.html delete mode 100644 i18n/english.js delete mode 100644 i18n/french.js delete mode 100644 index.d.ts delete mode 100644 index.js delete mode 100644 src/depWalker.js delete mode 100644 src/dependency.class.js delete mode 100644 src/i18n.js delete mode 100644 src/tarball.js delete mode 100644 src/vulnerabilities/strategies.js delete mode 100644 src/vulnerabilities/strategies/npm-audit.js delete mode 100644 src/vulnerabilities/strategies/security-wg.js delete mode 100644 src/vulnerabilities/vulnerabilitySource.js delete mode 100644 src/warnings.js delete mode 100644 test/__snapshots__/depWalker.js.snap delete mode 100644 test/__snapshots__/httpServer.js.snap delete mode 100644 test/depWalker.js delete mode 100644 test/dependency.js delete mode 100644 test/fixtures/depWalker/slimio.config.json delete mode 100644 test/fixtures/depWalker/slimio.is.json delete mode 100644 test/fixtures/getTarballComposition/one/README delete mode 100644 test/fixtures/getTarballComposition/two/empty.txt delete mode 100644 test/fixtures/getTarballComposition/two/package.json delete mode 100644 test/fixtures/getTarballComposition/two/two-deep/test.js delete mode 100644 test/fixtures/httpServer/payload.json delete mode 100644 test/fixtures/mergeDependencies/one.json delete mode 100644 test/fixtures/mergeDependencies/three.json delete mode 100644 test/fixtures/mergeDependencies/two.json delete mode 100644 test/getFilesRecursive.js delete mode 100644 test/getTarballComposition.js delete mode 100644 test/i18n.js delete mode 100644 test/mergeDependencies.js delete mode 100644 test/utils.js delete mode 100644 test/vulnerabilities/npm-audit.js delete mode 100644 test/vulnerabilities/security-wg.js delete mode 100644 test/vulnerabilities/vulnerabilitySource.js delete mode 100644 test/warnings.js diff --git a/.editorconfig b/.editorconfig index 198016fe..4cb15070 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,14 @@ +# Editor configuration, see https://editorconfig.org root = true [*] -indent_size = 4 -indent_style = space -end_of_line = lf charset = utf-8 -trim_trailing_whitespace = true +indent_style = space +indent_size = 2 insert_final_newline = true +trim_trailing_whitespace = true +end_of_line = lf + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.eslintrc b/.eslintrc index 5d4a9bc4..cc12cba5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,10 +1,7 @@ { - "extends": "@slimio/eslint-config", - "rules": { - "jsdoc/require-jsdoc": "off", - "require-atomic-updates": "off", - "arrow-body-style": "off", - "new-cap": "off", - "no-invalid-this": "off" + "extends": "@nodesecure/eslint-config", + "parserOptions": { + "sourceType": "module", + "requireConfigFile": false } } diff --git a/FLAGS.md b/FLAGS.md deleted file mode 100644 index 477eee73..00000000 --- a/FLAGS.md +++ /dev/null @@ -1,231 +0,0 @@ -# Flags - -## Why emojis for flags ? -Because it allows to convey a message while remaining compatible and simple to setup in a Web page. - -## Legends - -> 👀 click on the arrow to show the complete description - -Each summaries title are the name of the flag in the JSON. - -
☁️ isGit -
- -The project has been detected as a GIT repository. Sometimes a dependency on the package.json link to a GIT repository, example: - -```json -{ - "dependencies": { - "uNodeHttpServer": "git+https://github.com/tpoisseau/uNodeHttpServer.git#1.2.0" - } -} -``` - -Because under the hood we use [pacote](https://github.com/npm/pacote#readme) to fetch and extract packages we are supporting this given pattern. -
- -
🌲 hasIndirectDependencies -
- -The package has indirect (or also called transitive) dependencies. This means that the child dependencies of the package also have dependencies. - - - -In the following example **accepts** is flagged 🌲 because **mime-types** has a **mime-db** dependency which mean that the package is an indirect dependency of **accepts**. - -Indirect dependencies are dangerous for many reasons and you may found useful informations in these articles / study: -- [78% of vulnerabilities are found in indirect dependencies, making remediation complex](https://snyk.io/blog/78-of-vulnerabilities-are-found-in-indirect-dependencies-making-remediation-complex/) -- [Small World with High Risks: A Study of Security Threats in the npm Ecosystem](https://arxiv.org/pdf/1902.09217.pdf) -- [Angular vs React: the security risk of indirect dependencies](https://snyk.io/blog/angular-vs-react-the-security-risk-of-indirect-dependencies/) -
- -
🐲 hasNativeCode -
- -The package use native components (package, file, configuration) like **binding.gyp** or npm package for native addon like `node-addon-api`. - -The flag is set to true if: -- One of the package file has an extension like `.c`, `.cpp`, `.gyp` (etc..) -- One of the package dependency is known for building native addons (or anything else). -- The package.json file has the property "gypfile" set to `true`. -
- -
⚠️ hasWarnings -
- -This means that the [SAST](https://www.gartner.com/en/information-technology/glossary/static-application-security-testing-sast) Scanner has detected several problems by analyzing the Abstract Syntax Tree (AST) of a JavaScript source code. All warnings are accurately documented [here](https://github.com/fraxken/js-x-ray#warnings-legends-v20). - -
- -
⛔️ isDeprecated -
- -The given npm package has been deprecated by his author (it must be updated or replaced with an equivalent if there is no new version available). - -For more information on deprecation please check the official [npm documentation](https://docs.npmjs.com/deprecating-and-undeprecating-packages-or-package-versions). -
- -
📜 hasNoLicense -
- -This flag mean that we have not detected any licenses in the npm Tarball (or something went wrong in the detection) For detecting licenses we are reading the **package.json** and searching for local files that contain the word "license". - -For more information on how license must be described in the package.json, please check the [npm documentation](https://docs.npmjs.com/files/package.json#license). - -
- -
📚 hasMultipleLicenses -
- -We have detected different licenses in **package.json** and other licenses files (**LICENSE**, **LICENSE.MD** etc). This probably means that there is an inconsistency in the choice of the license (or a file not updated yet with the right license). - -This flag has not been created to detect multiple licenses / conformance rules. Example: `ISC OR GPL-2.0-with-GCC-exception`. Under the hood we use [conformance](https://github.com/cutenode/conformance#readme) to parse licenses ! -
- -
🔬 hasMinifiedCode -
- -Has one or many files that has been detected as minified JavaScript code. We use a package that will tell us if the code is minified (in case the file as a **.min** then we will consider the file minified by default). - -Minified JavaScript code are commonly used by hacker to obfuscate the code to avoid being spotted. A good practice is surely to check all the packages with the flag. - -Example of minified code: -```js -function cleanRange(version){const firstChar=version.charAt(0);if(firstChar==="^"||firstChar==="<"||firstChar===">"||firstChar==="="||firstChar==="~"){return version.slice(version.charAt(1)==="="?2:1)} -return version} -``` - -Some files may be considered as "minified" if they contains only short identifiers (there is a warning for this). A good example of code considered as minified because all identifiers are under 1.5 of length in average: [code](https://badjs.org/posts/smith-and-wesson-skimmer/#heading-modrrnize.js). - -
- -
💎 hasCustomResolver -
- -The package has custom dependencies resolver such as `+git` or `+ssh` or a local file with `file:`. Note that pacote doesn't support `ssh` so there is no support in nsecure for this kind of resolver. - -Documentation: [npm-install](https://docs.npmjs.com/cli/install) -
- -
🌍 hasExternalCapacity -
- -The package use a Node.js core package that allow to access the network. These core package are: -- http -- https -- net -- http2 -- dgram -- child_process - -> ⚠️ This flag only work if the AST analysis as successfully retrieved all dependencies as expected. - -
- -
📦 hasScript -
- -The package has pre and/or post script in the **package.json** file. These script will be executed before or after the installation of a dependency (this is useful for example to build native addons or similar things). However these script may be used to execute malicious code on your system. - -Exemple: -```json -{ - "scripts": { - "preinstall": "./maliciousScript.js" - } -} -``` - -- [Package install scripts vulnerability](https://blog.npmjs.org/post/141702881055/package-install-scripts-vulnerability) -- [10 npm Security Best Practices](https://snyk.io/blog/ten-npm-security-best-practices/) -
- -
👥 hasManyPublishers -
- -The package has been published on npm by multiple unique users. There is no big deal here, just mean the package is maintained by a group of people. -
- -
🚨 vulnerabilities -
- -Vulnerabilities has been detected for the given package **version**. We are fetching vulnerabilities from the official [Node.js Security-WG repository](https://github.com/nodejs/security-wg) -
- -
👀 hasMissingOrUnusedDependency -
- -The package has a missing dependency (in package.json) or a dependency that is not used in the code (this may happen if the AST Analysis fail!). - -> However stay alert with this flag.. There is a lot of patterns for requiring dependencies that we fail to get right (IOC etc). - -
- -
💀 isDead (hasReceivedUpdateInOneYear + hasOutdatedDependency) -
- -The dependency (package) has not received update from at least one year and has at least one dependency that need to be updated. It probably -means it's dangerous to use (or continue to) because the author doesn't seem to update the package anymore (even worst if you want him to implement a new version / security patch). -
- -
⚔️ hasBannedFile -
- -The project has at least one sensitive file (or a file with sensitive information in it). A sensitive file can be detected by its complete name or by its extension. - -- .npmrc -- .env -- file with **.key** or **.pem** extensions - -
- -
⌚️ isOutdated -
- -The current package version is not equal to the latest version of the package (that we fetch on the npm registry). It can also mean that the package uses a tag such as: - -- alpha -- beta -- next -- etc.. - -
- -
🎭 duplicate -
- -Indicate that the package is already somewhere else in the dependency tree with a different version. - - -
- -## Notes -In the JSON payload some flags are linked to a given package version while other are linked to the package in general. For example **hasManyPublishers** and **hasChangedAuthor** are package flags. - -## Add a new flag - -The purpose of this section is to describe the addition of a flag to the Node-secure project. This could be useful in order to maintain and evolve the project without having to review the entire code. - -### Back-end - -Most of the time the flags start their lives within the file `src/dependency.class.js`. You just need to add the new flag in the private property `#flags` and add a new pair of getter/setter for it (Only if there is a need to update the flag before export). - -Sometimes the flags are updated after the export via the functions **processPackageTarball** and **searchPackageAuthors**. In this case, you just have to complete the exported object from the Dependency class. - -Adding a new flag means changing the returned payload in the API.. That's why we're also going to have to update the `index.d.ts`, TypeScript **Flags** interface which contains all the flags. - -### Documentation - -The new flag must be added and properly documented in the following files: - -- FLAGS.md -- flags/manifest.json - -> ⚠️ Adding the flag in the manifest file is an important step for the front-end. - -### Front-end - -A new HTML file must be created in the **flags** directory with the name of the flag. It will be used to document the flag in the UI (in the emojis legends popup). - -Then update the **getFlags** method in the file `public/js/master.js` to add your own flag with the right emoji. diff --git a/README.md b/README.md index bb699200..4042af4d 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ The CLI allow to load the JSON into a Webpage with the **open** command. The pag ## Requirements -- [Node.js](https://nodejs.org/en/) version 12.12.0 or higher +- [Node.js](https://nodejs.org/en/) version 16.0.0 or higher ## Getting Started @@ -136,35 +136,11 @@ $ npm config set "http://your-registry/" ``` ## API -Use nsecure as an API package to fetch and work with the generated JSON. The following example demonstrates how to retrieve the Payload for mocha, cacache and is-wsl packages. It's possible to use the **cwd** method if you want to achieve similar work on a local project. - -```js -const { from } = require("nsecure"); -const { writeFile } = require("fs").promises; - -async function main() { - const toFetch = ["mocha", "cacache", "is-wsl"]; - const options = { verbose: false }; // disable verbose to not show the spinners - - const payloads = await Promise.all( - toFetch.map((name) => from(name, options)) - ); - - const toWritePromise = []; - for (let i = 0; i < toFetch.length; i++) { - const data = JSON.stringify(payloads[i], null, 2); - toWritePromise.push(writeFile(`${toFetch[i]}.json`, data)); - } - await Promise.allSettled(toWritePromise); -} -main().catch(console.error); -``` - -The SlimIO [Security project](https://github.com/SlimIO/Security) use nsecure with the API to analyze packages and repositories of a given github organization (or user). +Our back-end scanner package is available [here](https://github.com/NodeSecure/scanner). ## Flags legends -Flags and emojis legends are documented [here](./FLAGS.md). +Flags and emojis legends are documented [here](https://github.com/NodeSecure/flags/blob/main/FLAGS.md). ## Searchbar filters diff --git a/bin/index.js b/bin/index.js index 36645ac1..1f39c8c2 100644 --- a/bin/index.js +++ b/bin/index.js @@ -1,473 +1,474 @@ #!/usr/bin/env node - -"use strict"; - -require("make-promises-safe"); -require("dotenv").config(); - -// Require Node.js Dependencies -const { writeFileSync, promises: { unlink, readdir, readFile } } = require("fs"); -const { join, extname, basename } = require("path"); -const { once } = require("events"); - -// Require Third-party Dependencies -const { yellow, grey, white, green, cyan, red, magenta } = require("kleur"); -const sade = require("sade"); -const pacote = require("pacote"); -const Spinner = require("@slimio/async-cli-spinner"); -const filenamify = require("filenamify"); -const semver = require("semver"); -const ms = require("ms"); -const qoa = require("qoa"); -const ui = require("cliui")(); - -// Require Internal Dependencies -const startHTTPServer = require("../src/httpServer.js"); -const i18n = require("../src/i18n"); -const { getRegistryURL, formatBytes } = require("../src/utils"); -const { depWalker } = require("../src/depWalker"); -const { cwd, verify } = require("../index"); - +import "make-promises-safe"; +import dotenv from "dotenv"; +dotenv.config(); + +// Import Node.js Dependencies +import { writeFileSync } from "fs"; +import { unlink, readdir, readFile } from "fs/promises"; +import { join, extname, basename } from "path"; +import { once } from "events"; + +// Import Third-party Dependencies +import kleur from "kleur"; +import sade from "sade"; +import pacote from "pacote"; +import Spinner from "@slimio/async-cli-spinner"; +import filenamify from "filenamify"; +import semver from "semver"; +import ms from "ms"; +import qoa from "qoa"; +import cliui from "cliui"; +import i18n from "@nodesecure/i18n"; +import { cwd, verify, depWalker } from "@nodesecure/scanner"; +import { getLocalRegistryURL } from "@nodesecure/npm-registry-sdk"; +import vuln from "@nodesecure/vuln"; + +// Import Internal Dependencies +import { startHTTPServer } from "../src/httpServer.js"; +import { formatBytes } from "../src/utils.js"; + +const { yellow, grey, white, green, cyan, red, magenta } = kleur; +const ui = cliui(); // CONSTANTS -const REGISTRY_DEFAULT_ADDR = getRegistryURL(); +const REGISTRY_DEFAULT_ADDR = getLocalRegistryURL(); const token = typeof process.env.NODE_SECURE_TOKEN === "string" ? { token: process.env.NODE_SECURE_TOKEN } : {}; const httpPort = process.env.PORT; // Process script arguments -const version = require("../package.json").version; -const { setVulnerabilityStrategy } = require("../src/vulnerabilities/vulnerabilitySource.js"); -const { VULN_MODE_DB_SECURITY_WG, VULN_MODE_NPM_AUDIT } = require("../src/vulnerabilities/strategies.js"); -const prog = sade("nsecure").version(version); +const prog = sade("nsecure").version("0.9.0"); console.log(grey().bold(`\n > ${i18n.getToken("cli.executing_at")}: ${yellow().bold(process.cwd())}\n`)); const currNodeSemVer = process.versions.node; -if (semver.lt(currNodeSemVer, "12.10.0")) { - console.log(red().bold(` [!] ${i18n.getToken("cli.min_nodejs_version", "12.10.0")}\n`)); - process.exit(0); +if (semver.lt(currNodeSemVer, "16.1.0")) { + console.log(red().bold(` [!] ${i18n.getToken("cli.min_nodejs_version", "16.1.0")}\n`)); + process.exit(0); } function logAndWrite(payload, output = "nsecure-result") { - if (payload === null) { - console.log(i18n.getToken("cli.no_dep_to_proceed")); + if (payload === null) { + console.log(i18n.getToken("cli.no_dep_to_proceed")); - return null; - } + return null; + } - const ret = JSON.stringify(payload, null, 2); - const filePath = join(process.cwd(), extname(output) === ".json" ? filenamify(output) : `${filenamify(output)}.json`); - writeFileSync(filePath, ret); - console.log(white().bold(i18n.getToken("cli.successfully_written_json", green().bold(filePath)))); + const ret = JSON.stringify(payload, null, 2); + const filePath = join(process.cwd(), extname(output) === ".json" ? filenamify(output) : `${filenamify(output)}.json`); + writeFileSync(filePath, ret); + console.log(white().bold(i18n.getToken("cli.successfully_written_json", green().bold(filePath)))); - return filePath; + return filePath; } prog - .command("hydrate-db") - .describe(i18n.getToken("cli.commands.hydrate_db.desc")) - .action(hydrateCmd); + .command("hydrate-db") + .describe(i18n.getToken("cli.commands.hydrate_db.desc")) + .action(hydrateCmd); prog - .command("cwd") - .describe(i18n.getToken("cli.commands.cwd.desc")) - .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) - .option("-o, --output", i18n.getToken("cli.commands.option_output"), "nsecure-result") - .option("-n, --nolock", i18n.getToken("cli.commands.cwd.option_nolock"), false) - .option("-f, --full", i18n.getToken("cli.commands.cwd.option_full"), false) - .option("-s, --vulnerabilityStrategy", i18n.getToken("cli.commands.strategy"), VULN_MODE_NPM_AUDIT) - .action(cwdCmd); + .command("cwd") + .describe(i18n.getToken("cli.commands.cwd.desc")) + .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) + .option("-o, --output", i18n.getToken("cli.commands.option_output"), "nsecure-result") + .option("-n, --nolock", i18n.getToken("cli.commands.cwd.option_nolock"), false) + .option("-f, --full", i18n.getToken("cli.commands.cwd.option_full"), false) + .option("-s, --vulnerabilityStrategy", i18n.getToken("cli.commands.strategy"), vuln.strategies.NPM_AUDIT) + .action(cwdCmd); prog - .command("from ") - .describe(i18n.getToken("cli.commands.from.desc")) - .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) - .option("-o, --output", i18n.getToken("cli.commands.option_output"), "nsecure-result") - .action(fromCmd); + .command("from ") + .describe(i18n.getToken("cli.commands.from.desc")) + .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) + .option("-o, --output", i18n.getToken("cli.commands.option_output"), "nsecure-result") + .action(fromCmd); prog - .command("auto [package]") - .describe(i18n.getToken("cli.commands.auto.desc")) - .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) - .option("-k, --keep", i18n.getToken("cli.commands.auto.option_keep"), false) - .option("-s, --vulnerabilityStrategy", i18n.getToken("cli.commands.strategy"), VULN_MODE_DB_SECURITY_WG) - .action(autoCmd); + .command("auto [package]") + .describe(i18n.getToken("cli.commands.auto.desc")) + .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) + .option("-k, --keep", i18n.getToken("cli.commands.auto.option_keep"), false) + .option("-s, --vulnerabilityStrategy", i18n.getToken("cli.commands.strategy"), vuln.strategies.SECURITY_WG) + .action(autoCmd); prog - .command("open [json]") - .describe(i18n.getToken("cli.commands.open.desc")) - .option("-p, --port", i18n.getToken("cli.commands.open.option_port"), httpPort) - .action(httpCmd); + .command("open [json]") + .describe(i18n.getToken("cli.commands.open.desc")) + .option("-p, --port", i18n.getToken("cli.commands.open.option_port"), httpPort) + .action(httpCmd); prog - .command("verify [package]") - .describe(i18n.getToken("cli.commands.verify.desc")) - .option("-j, --json", i18n.getToken("cli.commands.verify.option_json"), false) - .action(verifyCmd); + .command("verify [package]") + .describe(i18n.getToken("cli.commands.verify.desc")) + .option("-j, --json", i18n.getToken("cli.commands.verify.option_json"), false) + .action(verifyCmd); prog - .command("summary [json]") - .describe(i18n.getToken("cli.commands.summary.desc")) - .action(summaryCmd); + .command("summary [json]") + .describe(i18n.getToken("cli.commands.summary.desc")) + .action(summaryCmd); prog - .command("lang") - .describe(i18n.getToken("cli.commands.lang.desc")) - .action(async() => { - const currentLang = i18n.getLocalLang(); - const dirents = await readdir(join(__dirname, "../i18n"), { withFileTypes: true }); - const langs = dirents - .filter((dirent) => dirent.isFile() && extname(dirent.name) === ".js") - .map((dirent) => basename(dirent.name, ".js")); - - langs.splice(langs.indexOf(currentLang), 1); - langs.unshift(currentLang); - - console.log(""); - const { selectedLang } = await qoa.interactive({ - query: green().bold(` ${i18n.getToken("cli.commands.lang.question_text")}`), - handle: "selectedLang", - menu: langs - }); - - await i18n.setLocalLang(selectedLang); - console.log(white().bold(`\n ${i18n.getToken("cli.commands.lang.new_selection", yellow().bold(selectedLang))}`)); + .command("lang") + .describe(i18n.getToken("cli.commands.lang.desc")) + .action(async() => { + const currentLang = i18n.getLocalLang(); + const dirents = await readdir(join(__dirname, "../i18n"), { withFileTypes: true }); + const langs = dirents + .filter((dirent) => dirent.isFile() && extname(dirent.name) === ".js") + .map((dirent) => basename(dirent.name, ".js")); + + langs.splice(langs.indexOf(currentLang), 1); + langs.unshift(currentLang); + + console.log(""); + const { selectedLang } = await qoa.interactive({ + query: green().bold(` ${i18n.getToken("cli.commands.lang.question_text")}`), + handle: "selectedLang", + menu: langs }); + await i18n.setLocalLang(selectedLang); + console.log(white().bold(`\n ${i18n.getToken("cli.commands.lang.new_selection", yellow().bold(selectedLang))}`)); + }); + prog.parse(process.argv); function locationToString(location) { - const start = `${location[0][0]}:${location[0][1]}`; - const end = `${location[1][0]}:${location[1][1]}`; + const start = `${location[0][0]}:${location[0][1]}`; + const end = `${location[1][0]}:${location[1][1]}`; - return `[${start}] - [${end}]`; + return `[${start}] - [${end}]`; } async function summaryCmd(json = "nsecure-result.json") { - const dataFilePath = join(process.cwd(), json); - const rawAnalysis = await readFile(dataFilePath, { encoding: "utf-8" }); - const { rootDepencyName, dependencies } = JSON.parse(rawAnalysis); + const dataFilePath = join(process.cwd(), json); + const rawAnalysis = await readFile(dataFilePath, { encoding: "utf-8" }); + const { rootDepencyName, dependencies } = JSON.parse(rawAnalysis); + + ui.div( + { text: cyan().bold(`${i18n.getToken("ui.stats.title")}: ${rootDepencyName}`), width: 50 } + ); + ui.div({ text: yellow("-------------------------------------------------------------------"), width: 70 }); + + if (dependencies) { + const { + packagesCount, + packageWithIndirectDeps, + totalSize, + extensionMap, + licenceMap + } = extractAnalysisData(dependencies); ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.title")}: ${rootDepencyName}`), width: 50 } + { text: cyan().bold(`${i18n.getToken("ui.stats.total_packages")}:`), width: 40 }, + { text: yellow().bold(`${packagesCount}`), width: 20 } + ); + ui.div( + { text: cyan().bold(`${i18n.getToken("ui.stats.total_size")}`), width: 40 }, + { text: yellow().bold(`${totalSize}`), width: 20 } + ); + ui.div( + { text: cyan().bold(`${i18n.getToken("ui.stats.indirect_deps")}:`), width: 40 }, + { text: yellow().bold(`${packageWithIndirectDeps}`), width: 20 } ); - ui.div({ text: yellow("-------------------------------------------------------------------"), width: 70 }); - - if (dependencies) { - const { - packagesCount, - packageWithIndirectDeps, - totalSize, - extensionMap, - licenceMap - } = extractAnalysisData(dependencies); - - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.total_packages")}:`), width: 40 }, - { text: yellow().bold(`${packagesCount}`), width: 20 } - ); - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.total_size")}`), width: 40 }, - { text: yellow().bold(`${totalSize}`), width: 20 } - ); - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.indirect_deps")}:`), width: 40 }, - { text: yellow().bold(`${packageWithIndirectDeps}`), width: 20 } - ); - - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.extensions")} :`), width: 40 } - ); - const extensionEntries = Object.entries(extensionMap); - ui.div( - { text: `${extensionEntries - .reduce(buildStringFromEntries, "") - }`, width: 70 } - ); - - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.licenses")} :`), width: 40 } - ); - const licenceEntries = Object.entries(licenceMap); - ui.div( - { text: yellow().bold(`${licenceEntries - .reduce(buildStringFromEntries, "") - }`), width: 70 } - ); - } - else { - ui.div( - { text: cyan().bold("Error:"), width: 20 }, - { text: yellow().bold("No dependencies"), width: 30 } - ); - } - ui.div({ text: yellow("-------------------------------------------------------------------"), width: 70 }); - console.log(`${ui.toString()}`); - ui.resetOutput(); - return void 0; + ui.div( + { text: cyan().bold(`${i18n.getToken("ui.stats.extensions")} :`), width: 40 } + ); + const extensionEntries = Object.entries(extensionMap); + ui.div( + { + text: `${extensionEntries.reduce(buildStringFromEntries, "")}`, width: 70 + } + ); + + ui.div( + { text: cyan().bold(`${i18n.getToken("ui.stats.licenses")} :`), width: 40 } + ); + const licenceEntries = Object.entries(licenceMap); + ui.div( + { + text: yellow().bold(`${licenceEntries.reduce(buildStringFromEntries, "")}`), width: 70 + } + ); + } + else { + ui.div( + { text: cyan().bold("Error:"), width: 20 }, + { text: yellow().bold("No dependencies"), width: 30 } + ); + } + ui.div({ text: yellow("-------------------------------------------------------------------"), width: 70 }); + console.log(`${ui.toString()}`); + ui.resetOutput(); + + return void 0; } // eslint-disable-next-line max-params function buildStringFromEntries(accumulator, [extension, count], index, sourceArray) { + // eslint-disable-next-line no-param-reassign + accumulator += `(${yellow(count)}) ${white().bold(extension)} `; + if (index !== sourceArray.length - 1) { // eslint-disable-next-line no-param-reassign - accumulator += `(${yellow(count)}) ${white().bold(extension)} `; - if (index !== sourceArray.length - 1) { - // eslint-disable-next-line no-param-reassign - accumulator += cyan("- "); - } + accumulator += cyan("- "); + } - return accumulator; + return accumulator; } function extractAnalysisData(dependencies) { - const analysisAggregator = { - packagesCount: 0, - totalSize: 0, - packageWithIndirectDeps: 0, - extensionMap: {}, - licenceMap: {} - }; - - for (const dependencyData of Object.values(dependencies)) { - const { versions, metadata } = dependencyData; - - for (const version of versions) { - const versionData = dependencyData[version]; - extractVersionData(versionData, analysisAggregator); - } - - analysisAggregator.packagesCount += metadata.dependencyCount; + const analysisAggregator = { + packagesCount: 0, + totalSize: 0, + packageWithIndirectDeps: 0, + extensionMap: {}, + licenceMap: {} + }; + + for (const dependencyData of Object.values(dependencies)) { + const { versions, metadata } = dependencyData; + + for (const version of versions) { + const versionData = dependencyData[version]; + extractVersionData(versionData, analysisAggregator); } - return analysisAggregator; + analysisAggregator.packagesCount += metadata.dependencyCount; + } + + return analysisAggregator; } function extractVersionData(version, analysisAggregator) { - for (const extension of version.composition.extensions) { - addOccurrences(analysisAggregator.extensionMap, extension); - } + for (const extension of version.composition.extensions) { + addOccurrences(analysisAggregator.extensionMap, extension); + } - if (version.license.uniqueLicenseIds) { - for (const licence of version.license.uniqueLicenseIds) { - addOccurrences(analysisAggregator.licenceMap, licence); - } + if (version.license.uniqueLicenseIds) { + for (const licence of version.license.uniqueLicenseIds) { + addOccurrences(analysisAggregator.licenceMap, licence); } + } - if (version.flags && version.flags.includes("hasIndirectDependencies")) { - analysisAggregator.packageWithIndirectDeps++; - } + if (version.flags && version.flags.includes("hasIndirectDependencies")) { + analysisAggregator.packageWithIndirectDeps++; + } - analysisAggregator.totalSize += version.size; + analysisAggregator.totalSize += version.size; } function addOccurrences(aggregator, key) { - if (aggregator[key]) { - aggregator[key]++; - } - else { - aggregator[key] = 1; - } + if (aggregator[key]) { + aggregator[key]++; + } + else { + aggregator[key] = 1; + } } async function verifyCmd(packageName = null, options) { - const payload = await verify(packageName); - if (options.json) { - return console.log(JSON.stringify(payload, null, 2)); - } - const { files, directorySize, uniqueLicenseIds, ast } = payload; - + const payload = await verify(packageName); + if (options.json) { + return console.log(JSON.stringify(payload, null, 2)); + } + const { files, directorySize, uniqueLicenseIds, ast } = payload; + + ui.div( + { text: cyan().bold("directory size:"), width: 20 }, + { text: yellow().bold(formatBytes(directorySize)), width: 10 } + ); + ui.div( + { text: cyan().bold("unique licenses:"), width: 20 }, + { text: white().bold(uniqueLicenseIds.join(", ")), width: 10 } + ); + console.log(`${ui.toString()}\n`); + ui.resetOutput(); + + { ui.div( - { text: cyan().bold("directory size:"), width: 20 }, - { text: yellow().bold(formatBytes(directorySize)), width: 10 } + { text: white().bold("ext"), width: 15, align: "center" }, + { text: white().bold("files"), width: 45 }, + { text: white().bold("minified files"), width: 30 } ); - ui.div( - { text: cyan().bold("unique licenses:"), width: 20 }, - { text: white().bold(uniqueLicenseIds.join(", ")), width: 10 } - ); - console.log(`${ui.toString()}\n`); - ui.resetOutput(); - { - ui.div( - { text: white().bold("ext"), width: 15, align: "center" }, - { text: white().bold("files"), width: 45 }, - { text: white().bold("minified files"), width: 30 } - ); - - const maxLen = files.list.length > files.extensions.length ? files.list.length : files.extensions.length; - const divArray = Array.from(Array(maxLen), () => ["", "", ""]); - files.extensions.forEach((value, index) => (divArray[index][0] = value)); - files.list.forEach((value, index) => (divArray[index][1] = value)); - files.minified.forEach((value, index) => (divArray[index][2] = value)); - - for (const [ext, file, min] of divArray) { - ui.div( - { text: cyan().bold(ext), width: 15, align: "center" }, - { text: file, width: 45 }, - { text: red().bold(min), width: 30 } - ); - } + const maxLen = files.list.length > files.extensions.length ? files.list.length : files.extensions.length; + const divArray = Array.from(Array(maxLen), () => ["", "", ""]); + files.extensions.forEach((value, index) => (divArray[index][0] = value)); + files.list.forEach((value, index) => (divArray[index][1] = value)); + files.minified.forEach((value, index) => (divArray[index][2] = value)); + + for (const [ext, file, min] of divArray) { + ui.div( + { text: cyan().bold(ext), width: 15, align: "center" }, + { text: file, width: 45 }, + { text: red().bold(min), width: 30 } + ); } - console.log(`${ui.toString()}\n`); - ui.resetOutput(); + } + console.log(`${ui.toString()}\n`); + ui.resetOutput(); - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: cyan().bold("Required dependency and files"), width: 70, align: "center" }); - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: "\n", width: 70, align: "center" }); - - for (const [fileName, deps] of Object.entries(ast.dependencies)) { - ui.div({ text: magenta().bold(fileName), width: 70, align: "center" }); - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div( - { text: white().bold("required stmt"), width: 32, align: "left" }, - { text: white().bold("try/catch"), width: 12, align: "center" }, - { text: white().bold("source location"), width: 26, align: "center" } - ); - for (const [depName, infos] of Object.entries(deps)) { - const { start, end } = infos.location; - const position = `[${start.line}:${start.column}] - [${end.line}:${end.column}]`; - - ui.div( - { text: depName, width: 32 }, - { text: (infos.inTry ? green : red)().bold(infos.inTry), width: 12, align: "center" }, - { text: grey().bold(position), width: 26, align: "center" } - ); - } - ui.div({ text: "", width: 70, align: "center" }); - console.log(`${ui.toString()}`); - ui.resetOutput(); - } + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: cyan().bold("Required dependency and files"), width: 70, align: "center" }); + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: "\n", width: 70, align: "center" }); + for (const [fileName, deps] of Object.entries(ast.dependencies)) { + ui.div({ text: magenta().bold(fileName), width: 70, align: "center" }); ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: cyan().bold("AST Warnings"), width: 70, align: "center" }); - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: "", width: 70, align: "center" }); - ui.div( - { text: white().bold("file"), width: 30 }, - { text: white().bold("kind"), width: 15, align: "center" }, - { text: white().bold("source location"), width: 25, align: "center" } + { text: white().bold("required stmt"), width: 32, align: "left" }, + { text: white().bold("try/catch"), width: 12, align: "center" }, + { text: white().bold("source location"), width: 26, align: "center" } ); - - for (const warning of ast.warnings) { - const position = warning.kind === "encoded-literal" ? - warning.location.map((loc) => locationToString(loc)).join(" // ") : - locationToString(warning.location); - - ui.div( - { text: warning.file || grey().bold("NONE"), width: 30 }, - { text: magenta().bold(warning.kind), width: 15, align: "center" }, - { text: grey().bold(position), width: 25, align: "center" } - ); - if (warning.value) { - ui.div({ text: "", width: 70, align: "center" }); - ui.div({ text: yellow().bold(warning.value), width: 70, align: "center" }); - } - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + for (const [depName, infos] of Object.entries(deps)) { + const { start, end } = infos.location; + const position = `[${start.line}:${start.column}] - [${end.line}:${end.column}]`; + + ui.div( + { text: depName, width: 32 }, + { text: (infos.inTry ? green : red)().bold(infos.inTry), width: 12, align: "center" }, + { text: grey().bold(position), width: 26, align: "center" } + ); } - + ui.div({ text: "", width: 70, align: "center" }); console.log(`${ui.toString()}`); ui.resetOutput(); + } - return void 0; -} - -async function hydrateCmd() { - const { deleteDB, hydrateDB } = await setVulnerabilityStrategy(VULN_MODE_DB_SECURITY_WG, { sideEffects: false }); + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: cyan().bold("AST Warnings"), width: 70, align: "center" }); + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: "", width: 70, align: "center" }); - deleteDB(); + ui.div( + { text: white().bold("file"), width: 30 }, + { text: white().bold("kind"), width: 15, align: "center" }, + { text: white().bold("source location"), width: 25, align: "center" } + ); - const spinner = new Spinner({ - text: white().bold(i18n.getToken("cli.commands.hydrate_db.running", yellow().bold("nodejs security-wg"))) - }).start(); - try { - await hydrateDB(); + for (const warning of ast.warnings) { + const position = warning.kind === "encoded-literal" ? + warning.location.map((loc) => locationToString(loc)).join(" // ") : + locationToString(warning.location); - const elapsedTime = cyan(ms(Number(spinner.elapsedTime.toFixed(2)))); - spinner.succeed(white().bold(i18n.getToken("cli.commands.hydrate_db.success", elapsedTime))); - } - catch (err) { - spinner.failed(err.message); + ui.div( + { text: warning.file || grey().bold("NONE"), width: 30 }, + { text: magenta().bold(warning.kind), width: 15, align: "center" }, + { text: grey().bold(position), width: 25, align: "center" } + ); + if (warning.value) { + ui.div({ text: "", width: 70, align: "center" }); + ui.div({ text: yellow().bold(warning.value), width: 70, align: "center" }); } + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + } + + console.log(`${ui.toString()}`); + ui.resetOutput(); + + return void 0; +} + +async function hydrateCmd() { + const strategy = await vuln.setStrategy(vuln.strategies.SECURITY_WG, { + hydrateDatabase: false + }); + + await strategy.deleteDatabase(); + + const spinner = new Spinner({ + text: white().bold(i18n.getToken("cli.commands.hydrate_db.running", yellow().bold("nodejs security-wg"))) + }).start(); + try { + await strategy.hydrateDatabase(); + + const elapsedTime = cyan(ms(Number(spinner.elapsedTime.toFixed(2)))); + spinner.succeed(white().bold(i18n.getToken("cli.commands.hydrate_db.success", elapsedTime))); + } + catch (err) { + spinner.failed(err.message); + } } async function autoCmd(packageName, opts) { - const keep = Boolean(opts.keep); - delete opts.keep; - delete opts.k; - - const payloadFile = await (typeof packageName === "string" ? fromCmd(packageName, opts) : cwdCmd(opts)); - try { - if (payloadFile !== null) { - await httpCmd(); - await once(process, "SIGINT"); - } + const keep = Boolean(opts.keep); + delete opts.keep; + delete opts.k; + + const payloadFile = await (typeof packageName === "string" ? fromCmd(packageName, opts) : cwdCmd(opts)); + try { + if (payloadFile !== null) { + await httpCmd(); + await once(process, "SIGINT"); } - finally { - if (!keep && payloadFile !== null) { - try { - await unlink(payloadFile); - } - catch (error) { - if (error.code !== "ENOENT") { - // eslint-disable-next-line no-unsafe-finally - throw error; - } - } + } + finally { + if (!keep && payloadFile !== null) { + try { + await unlink(payloadFile); + } + catch (error) { + if (error.code !== "ENOENT") { + // eslint-disable-next-line no-unsafe-finally + throw error; } + } } + } } async function cwdCmd(opts) { - const { depth: maxDepth = 4, output, nolock, full, vulnerabilityStrategy } = opts; + const { depth: maxDepth = 4, output, nolock, full, vulnerabilityStrategy } = opts; - const payload = await cwd(void 0, - { verbose: true, maxDepth, usePackageLock: !nolock, fullLockMode: full, vulnerabilityStrategy } - ); + const payload = await cwd(void 0, + { verbose: true, maxDepth, usePackageLock: !nolock, fullLockMode: full, vulnerabilityStrategy } + ); - return logAndWrite(payload, output); + return logAndWrite(payload, output); } async function fromCmd(packageName, opts) { - const { depth: maxDepth = 4, output } = opts; - let manifest = null; - - const spinner = new Spinner({ - text: white().bold(i18n.getToken("cli.commands.from.searching", yellow().bold(packageName))) - }).start(); - try { - manifest = await pacote.manifest(packageName, { - registry: REGISTRY_DEFAULT_ADDR, - ...token - }); - - const elapsedTime = cyan().bold(ms(Number(spinner.elapsedTime.toFixed(2)))); - spinner.succeed( - white().bold(i18n.getToken("cli.commands.from.fetched", yellow().bold(packageName), elapsedTime)) - ); - } - catch (err) { - spinner.failed(err.message); + const { depth: maxDepth = 4, output } = opts; + let manifest = null; + + const spinner = new Spinner({ + text: white().bold(i18n.getToken("cli.commands.from.searching", yellow().bold(packageName))) + }).start(); + try { + manifest = await pacote.manifest(packageName, { + registry: REGISTRY_DEFAULT_ADDR, + ...token + }); - return null; - } + const elapsedTime = cyan().bold(ms(Number(spinner.elapsedTime.toFixed(2)))); + spinner.succeed( + white().bold(i18n.getToken("cli.commands.from.fetched", yellow().bold(packageName), elapsedTime)) + ); + } + catch (err) { + spinner.failed(err.message); + + return null; + } - if (manifest !== null) { - const payload = await depWalker(manifest, { verbose: true, maxDepth }); + if (manifest !== null) { + const payload = await depWalker(manifest, { verbose: true, maxDepth }); - return logAndWrite(payload, output); - } + return logAndWrite(payload, output); + } - return null; + return null; } async function httpCmd(json = "nsecure-result.json", { port }) { - const dataFilePath = join(process.cwd(), json); - const configPort = Number.isNaN(Number(port)) ? 0 : Number(port); - const httpServer = await startHTTPServer(dataFilePath, configPort); + const dataFilePath = join(process.cwd(), json); + const configPort = Number.isNaN(Number(port)) ? 0 : Number(port); + const httpServer = await startHTTPServer(dataFilePath, configPort); - for (const eventName of ["SIGINT", "SIGTERM"]) { - process.on(eventName, () => httpServer.server.close()); - } + for (const eventName of ["SIGINT", "SIGTERM"]) { + process.on(eventName, () => httpServer.server.close()); + } } diff --git a/flags/hasBannedFile.html b/flags/hasBannedFile.html deleted file mode 100644 index 2a4db012..00000000 --- a/flags/hasBannedFile.html +++ /dev/null @@ -1,13 +0,0 @@ -

hasBannedFile

-

- The project has at least one sensitive file (or a file with sensitive information in it). -

-
-

- The list of sensitive files are: -

-
    -
  • .npmrc
  • -
  • .env
  • -
  • files with extension like .key or .pem
  • -
diff --git a/flags/hasCustomResolver.html b/flags/hasCustomResolver.html deleted file mode 100644 index 8a8b4bc5..00000000 --- a/flags/hasCustomResolver.html +++ /dev/null @@ -1,14 +0,0 @@ -

hasCustomResolver

-

- The package has custom dependencies resolver such as +git or - +ssh or a local file with file:. In this kind of case it is better to check the package.json. -

-
-

- Note that pacote doesn't support ssh so there is no support in nsecure for this kind of resolver. -

-
-

- Documentation: - npm-install -

diff --git a/flags/hasExternalCapacity.html b/flags/hasExternalCapacity.html deleted file mode 100644 index b9543325..00000000 --- a/flags/hasExternalCapacity.html +++ /dev/null @@ -1,15 +0,0 @@ -

hasExternalCapacity

-

- The package use a Node.js core package that allow to access the network. - These core package are: -

-
    -
  • - http
  • -
  • - https
  • -
  • - net
  • -
  • - http2
  • -
  • - dgram
  • -
-

- ⚠️ This flag only work if the AST analysis as successfully retrieved all dependencies as expected. -

diff --git a/flags/hasIndirectDependencies.html b/flags/hasIndirectDependencies.html deleted file mode 100644 index 0b1c55ee..00000000 --- a/flags/hasIndirectDependencies.html +++ /dev/null @@ -1,51 +0,0 @@ -

hasIndirectDependencies

-

- The package has indirect (or also called transitive) dependencies. This - means that the child dependencies of the package also have dependencies. -

-
- -

-

- In the following example accepts is flagged 🌲 because - mime-types has a mime-db dependency which - mean that the package is an indirect dependency of accepts. -

-
-

- Indirect dependencies are dangerous for many reasons and you may found - useful informations in these articles / study: -

-
- diff --git a/flags/hasManyPublishers.html b/flags/hasManyPublishers.html deleted file mode 100644 index fdb903f6..00000000 --- a/flags/hasManyPublishers.html +++ /dev/null @@ -1,5 +0,0 @@ -

hasManyPublishers

-

- The package has been published on npm by multiple unique users. There is no - big deal here, just mean the package is maintained by a group of people. -

diff --git a/flags/hasMinifiedCode.html b/flags/hasMinifiedCode.html deleted file mode 100644 index 6f48f9a1..00000000 --- a/flags/hasMinifiedCode.html +++ /dev/null @@ -1,26 +0,0 @@ -

hasMinifiedCode

-

- Has one or many files that has been detected as minified JavaScript code. We - use a package that will tell us if the code is minified (in case the file as - a .min then we will consider the file minified by default). -

-
-

- Minified JavaScript code are commonly used by hacker to obfuscate the code - to avoid being spotted. A good practice is surely to check all the packages - with the flag. -

-
-

Example of minified code:

-
- -
-

- ⚠️ sometimes one line file are considered minified (we are working to fix this in the future). -

-
-

Under the hood we use the npm package is-minified-code.

-
-

Files can be found in the Minified Files list items of the left menu.

-
- diff --git a/flags/hasMissingOrUnusedDependency.html b/flags/hasMissingOrUnusedDependency.html deleted file mode 100644 index 65de1e31..00000000 --- a/flags/hasMissingOrUnusedDependency.html +++ /dev/null @@ -1,4 +0,0 @@ -

hasMissingOrUnusedDependency

-

- The package has a missing dependency (in package.json) or a dependency that is not used in the code (this may happen if the AST Analysis fail!) -

diff --git a/flags/hasMultipleLicenses.html b/flags/hasMultipleLicenses.html deleted file mode 100644 index 70262798..00000000 --- a/flags/hasMultipleLicenses.html +++ /dev/null @@ -1,17 +0,0 @@ -

hasMultipleLicenses

-

- We have detected different licenses in package.json and - other licenses files (LICENSE, - LICENSE.MD etc). This probably means that there is an - inconsistency in the choice of the license (or a file not updated yet with - the right license). -

-
-

- This flag has not been created to detect multiple licenses / conformance rules. -

-

Example: ISC OR GPL-2.0-with-GCC-exception.

-
-

- Under the hood we use conformance to parse licenses ! -

diff --git a/flags/hasNativeCode.html b/flags/hasNativeCode.html deleted file mode 100644 index e23c3e46..00000000 --- a/flags/hasNativeCode.html +++ /dev/null @@ -1,13 +0,0 @@ -

hasNativeCode

-

- The package use native components (package, file, configuration) like binding.gyp or npm package for native addon like node-addon-api. -

-
-

- The flag is set to true if: -

-
    -
  • - One of the package file has an extension like .c, .cpp, .gyp (etc..)
  • -
  • - One of the package dependency is known for building native addons.
  • -
  • - The package.json file has the property "gypfile" set to true.
  • -
diff --git a/flags/hasNoLicense.html b/flags/hasNoLicense.html deleted file mode 100644 index 88a08c76..00000000 --- a/flags/hasNoLicense.html +++ /dev/null @@ -1,22 +0,0 @@ -

hasNoLicense

-

- This flag mean that we have not detected any licenses in the npm Tarball (or - something went wrong in the detection). For detecting licenses we are reading - the package.json and searching for local files that contain the word license. -

-
-

- The code and logic behind the detection is handled in the npm-tarball-license-parser package. -

-
-

- For more information on how license must be described in the package.json, - please check the - npm documentation. -

-
-

- ⚠️ we are working to stabilize this flag ! -

diff --git a/flags/hasScript.html b/flags/hasScript.html deleted file mode 100644 index 619d50ab..00000000 --- a/flags/hasScript.html +++ /dev/null @@ -1,24 +0,0 @@ -

hasScript

-

- The package has pre and/or post script in the - package.json file. These script will be executed before or - after the installation of a dependency (this is useful for example to build - native addons or similar things). However these script may be used to - execute malicious code on your system. -

- diff --git a/flags/hasWarnings.html b/flags/hasWarnings.html deleted file mode 100644 index d10ca5e4..00000000 --- a/flags/hasWarnings.html +++ /dev/null @@ -1,6 +0,0 @@ -

hasWarnings

-

- This means that the SAST Scanner - has detected several problems by analyzing the Abstract Syntax Tree (AST) of a JavaScript source code. - All warnings are accurately documented here. -

diff --git a/flags/isDead.html b/flags/isDead.html deleted file mode 100644 index 0da4549d..00000000 --- a/flags/isDead.html +++ /dev/null @@ -1,8 +0,0 @@ -

isDead

-

- The dependency (package) has not received update from at least one year and has at least one dependency that need to be updated. -

-
-

- It probably means it's dangerous to use (or continue to) because the author doesn't seem to update the package anymore (even worst if you want him to implement a new version / security patch). -

diff --git a/flags/isDeprecated.html b/flags/isDeprecated.html deleted file mode 100644 index 3ec3d47b..00000000 --- a/flags/isDeprecated.html +++ /dev/null @@ -1,14 +0,0 @@ -

isDeprecated

-

- The given npm package has been deprecated by his author (it must be updated - or replaced with an equivalent if there is no new version available). -

-
-

- For more information on deprecation please check the official - npm documentation. -

diff --git a/flags/isDuplicate.html b/flags/isDuplicate.html deleted file mode 100644 index c2ac63a3..00000000 --- a/flags/isDuplicate.html +++ /dev/null @@ -1,6 +0,0 @@ -

isDuplicate

-

- Indicate that the package is also used somewhere else in the dependency tree but with a different version (like in the screenshot with yallist). -

-
- diff --git a/flags/isGit.html b/flags/isGit.html deleted file mode 100644 index 74123d17..00000000 --- a/flags/isGit.html +++ /dev/null @@ -1,13 +0,0 @@ -

isGit

-

- The project has been detected as a GIT repository. Sometimes a dependency on - the package.json link to a GIT repository, example: -

-
- -
-

- Because under the hood we use - pacote to fetch and - extract packages we are supporting this given pattern. -

diff --git a/flags/isOutdated.html b/flags/isOutdated.html deleted file mode 100644 index b01ecad7..00000000 --- a/flags/isOutdated.html +++ /dev/null @@ -1,13 +0,0 @@ -

isOutdated

-

- The current package version is not equal to the latest version of the package (Compared to the versions we retrieve from the npm registry).
-

-
-

- This can happen, for example, when the package uses tags such as: -

-
    -
  • @alpha
  • -
  • @beta
  • -
  • @next
  • -
diff --git a/flags/manifest.json b/flags/manifest.json deleted file mode 100644 index 1c5c5807..00000000 --- a/flags/manifest.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "🌍": { - "title": "hasExternalCapacity", - "tooltipDescription": "The package use at least one Node.js dependency capable to communicate outside or to establish a listening server." - }, - "⚠": { - "title": "hasWarnings", - "tooltipDescription": "The AST analysis has detected warnings (suspect import, unsafe regex ..)" - }, - "🐲": { - "title": "hasNativeCode", - "tooltipDescription": "The package use native components (package, file, configuration)." - }, - "💎": { - "title": "hasCustomResolver", - "tooltipDescription": "The package has dependencies that are not packages." - }, - "📜": { - "title": "hasNoLicense", - "tooltipDescription": "The package does not seem to have a license." - }, - "📚": { - "title": "hasMultipleLicenses", - "tooltipDescription": "The package has multiple licenses in multiple files" - }, - "🔬": { - "title": "hasMinifiedCode", - "tooltipDescription": "The package seems to have files that are minified/uglified." - }, - "⛔️": { - "title": "isDeprecated", - "tooltipDescription": "The package is deprecated." - }, - "👥": { - "title": "hasManyPublishers", - "tooltipDescription": "The package has several publishers." - }, - "📦": { - "title": "hasScript", - "tooltipDescription": "has `post` and/or `pre` (un)install npm script" - }, - "🌲": { - "title": "hasIndirectDependencies", - "tooltipDescription": "The package have indirect dependencies." - }, - "☁️": { - "title": "isGit", - "tooltipDescription": "The package (project) is a git repository" - }, - "🚨": { - "title": "vulnerabilities", - "tooltipDescription": "The package have one or many vulnerabilities." - }, - "👀": { - "title": "hasMissingOrUnusedDependency", - "tooltipDescription": "A dependency is missing in package.json or a dependency is installed but never used!" - }, - "💀": { - "title": "isDead", - "tooltipDescription": "The dependency has not received update from at least one year!" - }, - "⚔️": { - "title": "hasBannedFile", - "tooltipDescription": "The project has at least one sensitive file." - }, - "⌚️": { - "title": "isOutdated", - "tooltipDescription": "The current package version is not equal to the package latest version!" - } -} diff --git a/flags/vulnerabilities.html b/flags/vulnerabilities.html deleted file mode 100644 index f11d82f2..00000000 --- a/flags/vulnerabilities.html +++ /dev/null @@ -1,8 +0,0 @@ -

Vulnerabilities

-

- Vulnerabilities has been detected for the given package - version. We are fetching vulnerabilities from the official - Node.js Security-WG repository -

diff --git a/i18n/english.js b/i18n/english.js deleted file mode 100644 index bfcaaa8f..00000000 --- a/i18n/english.js +++ /dev/null @@ -1,117 +0,0 @@ -/* eslint-disable max-len */ -"use strict"; - -// Require Internal Dependencies -const { taggedString: tS } = require("../src/utils"); - -module.exports = { - lang: "en", - cli: { - executing_at: "Executing node-secure at", - min_nodejs_version: tS`node-secure requires at least Node.js ${0} to work! Please upgrade your Node.js version.`, - no_dep_to_proceed: "No dependencies to proceed!", - successfully_written_json: tS`Successfully written results file at: ${0}`, - http_server_started: "HTTP Server started on:", - commands: { - option_depth: "Maximum dependencies depth to fetch", - option_output: "Json file output name", - strategy: "Vulnerabilities source to use", - hydrate_db: { - desc: "Hydrate the vulnerabilities db", - running: tS`Hydrating local vulnerabilities with the '${0}' database...`, - success: tS`Successfully hydrated vulnerabilities database in ${0}` - }, - cwd: { - desc: "Run security analysis on the current working dir", - option_nolock: "Disable usage of package-lock.json", - option_full: "Enable full analysis of packages in the package-lock.json file" - }, - from: { - desc: "Run security analysis on a given package from npm registry", - searching: tS`Searching for '${0}' manifest in the npm registry...`, - fetched: tS`Fetched ${0} manifest from npm in ${1}` - }, - auto: { - desc: "Run security analysis on cwd or a given package and automatically open the web interface", - option_keep: "Keep the nsecure-result.json file on the system after execution" - }, - open: { - desc: "Run an HTTP Server with a given nsecure JSON file", - option_port: "Define the running port" - }, - verify: { - desc: "Run a complete advanced analysis for a given npm package", - option_json: "Stdout the analysis payload" - }, - summary: { - desc: "Display your analysis results" - }, - lang: { - desc: "Configure the CLI default language", - question_text: "What language do you want to use?", - new_selection: tS`'${0}' has been selected as the new CLI language!` - } - } - }, - depWalker: { - dep_tree: "dependency tree", - fetch_and_walk_deps: "Fetching and walking through all dependencies...", - fetch_on_registry: "Waiting for packages to fetch from npm registry...", - waiting_tarball: "Waiting tarballs to be analyzed...", - fetch_metadata: "Fetched package metadata:", - analyzed_tarball: "Analyzed npm tarballs:", - success_fetch_deptree: tS`Successfully navigated through the ${0} in ${1}`, - success_tarball: tS`Successfully analyzed ${0} packages tarballs in ${1}`, - success_registry_metadata: "Successfully fetched required metadata for all packages!", - failed_rmdir: tS`Failed to remove directory ${0}!` - }, - ui: { - stats: { - title: "Global Stats", - total_packages: "Total of packages", - total_size: "Total size", - indirect_deps: "Packages with indirect dependencies", - extensions: "Extensions", - licenses: "Licenses", - maintainers: "Maintainers" - }, - package_info: { - show_children: "Show children", - hide_children: "Hide children", - vuln: "Vuln", - files_extensions: "files extensions", - unused_deps: "unused dependencies", - missing_deps: "missing dependencies", - minified_files: "minified files", - node_deps: "node.js dependencies", - third_party_deps: "third-party dependencies", - required_files: "required files", - used_by: "used by" - }, - popups: { - licenses: { - title: "Licenses", - name: "Name", - from: "from (file)" - }, - warnings: { - title: "Warnings", - homepage: "Homepage", - type: "type", - file: "file", - errorMsg: "incrimined value", - position: "position", - inspect: "inspect" - } - }, - searchbar_placeholder: "Search", - btn_emojis_legends: "Emojis legend", - show_complete_desc: "Select a package to show a complete description here", - loading_nodes: "... Loading nodes ...", - please_wait: "(Please wait)" - }, - warnings: { - disable_scarf: "This dependency could collect data against your will so think to disable it with the env var: SCARF_ANALYTICS", - keylogging: "This dependency can retrieve your keyboard and mouse inputs. It can be used for 'keylogging' attacks/malwares." - } -}; diff --git a/i18n/french.js b/i18n/french.js deleted file mode 100644 index 2e7d2198..00000000 --- a/i18n/french.js +++ /dev/null @@ -1,117 +0,0 @@ -/* eslint-disable max-len */ -"use strict"; - -// Require Internal Dependencies -const { taggedString: tS } = require("../src/utils"); - -module.exports = { - lang: "fr", - cli: { - executing_at: "Exécution de node-secure à", - min_nodejs_version: tS`node-secure nécessite au moins Node.js ${0} pour fonctionner ! Merci de mettre à jour votre version de Node.js.`, - no_dep_to_proceed: "Aucune dépendance pour continuer !", - successfully_written_json: tS`Ecriture du fichier de résultats réalisée avec succès ici : ${0}`, - http_server_started: "Serveur HTTP démarré sur :", - commands: { - option_depth: "Niveau de profondeur de dépendances maximum à aller chercher", - option_output: "Nom de sortie du fichier json", - strategy: "Source de vulnérabilités à utiliser", - hydrate_db: { - desc: "Mise à jour de la base de vulnérabilité", - running: tS`Mise à jour locale des vulnérabilités avec la base '${0}'...`, - success: tS`Base de vulnérabilités mise à jour avec succès en ${0}` - }, - cwd: { - desc: "Démarre une analyse de sécurité sur le dossier courant", - option_nolock: "Désactive l'utilisation du package-lock.json", - option_full: "Active l'analyse complète des packages présents dans le package-lock.json" - }, - from: { - desc: "Démarre une analyse de sécurité sur un package donné du registre npm", - searching: tS`Recherche du manifest '${0}' dans le registre npm...`, - fetched: tS`Manifest du package ${0} importé de npm en ${1}` - }, - auto: { - desc: "Démarre une analyse de sécurité sur le dossier courant ou sur un package donné et ouvre automatiquement l'interface web", - option_keep: "Conserve le fichier nsecure-result.json sur le systeme après l'exécution" - }, - open: { - desc: "Démarre un serveur HTTP avec un fichier .json nsecure donné", - option_port: "Port à utiliser" - }, - verify: { - desc: "Démarre une analyse AST avancée pour un package npm donné", - option_json: "Affiche le résultat d'analyse dans la sortie standard" - }, - summary: { - desc: "Afficher le résultat de votre analyse" - }, - lang: { - desc: "Configure le langage par défaut du CLI", - question_text: "Quel langage souhaitez-vous utiliser ?", - new_selection: tS`'${0}' a été selectionné comme étant le nouveau langage du CLI !` - } - } - }, - depWalker: { - dep_tree: "arbre de dépendances", - fetch_and_walk_deps: "Importation et analyse de l'intégralité des dépendances...", - fetch_on_registry: "En attente de l'importation des packages du registre npm...", - waiting_tarball: "En attente de l'analyse des tarballs...", - fetch_metadata: "Metadonnées importées :", - analyzed_tarball: "Tarballs en cours d'analyse :", - success_fetch_deptree: tS`Analyse de l'${0} terminée avec succès en ${1}`, - success_tarball: tS`${0} tarballs analysés avec succès en ${1}`, - success_registry_metadata: "Metadonnées requises pour tous les packages importées avec succès !", - failed_rmdir: tS`Suppression du dossier ${0} échouée !` - }, - ui: { - stats: { - title: "Stats Globales", - total_packages: "Total des packages", - total_size: "Poids total", - indirect_deps: "Packages avec dépendances indirectes", - extensions: "Extensions", - licenses: "Licences", - maintainers: "Mainteneurs" - }, - package_info: { - show_children: "Afficher les enfants", - hide_children: "Cacher les enfants", - vuln: "Vuln", - files_extensions: "extensions des fichiers", - unused_deps: "dépendances non utilisées ", - missing_deps: "dépendances manquantes", - minified_files: "fichiers minifiées", - node_deps: "dépendances node.js", - third_party_deps: "dépendances tierces", - required_files: "fichiers requis", - used_by: "utilisé par" - }, - popups: { - licenses: { - title: "Licences", - name: "Nom", - from: "fichier source" - }, - warnings: { - title: "Warnings", - homepage: "Page d'accueil", - type: "type", - file: "fichier", - errorMsg: "valeur incriminée", - position: "position", - inspect: "inspecter" - } - }, - searchbar_placeholder: "Recherche", - btn_emojis_legends: "Légende des émojis", - show_complete_desc: "Sélectionnez un package pour voir une description complète ici", - loading_nodes: "... Chargement des noeuds ...", - please_wait: "(Merci de patienter)" - }, - warnings: { - disable_scarf: "Cette dépendance peut récolter des données contre votre volonté, pensez donc à la désactiver en fournissant la variable d'environnement SCARF_ANALYTICS", - keylogging: "Cette dépendance peut obtenir vos entrées clavier ou de souris. Cette dépendance peut être utilisée en tant que 'keylogging' attacks/malwares." - } -}; diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index a7c476ca..00000000 --- a/index.d.ts +++ /dev/null @@ -1,155 +0,0 @@ -/// -/// - -import { Warning, Dependencies } from "js-x-ray"; -import { license as License } from "ntlp"; - -declare namespace NodeSecure { - interface Publisher { - name: string; - version: string; - at: string; - } - - interface Maintainer { - name: string; - email: string; - } - - interface Author { - name?: string; - url?: string; - email?: string; - } - - type Flags = - "isGit" | - "isDeprecated" | - "isOutdated" | - "hasNativeCode" | - "hasManifest" | - "hasOutdatedDependency" | - "hasWarnings" | - "hasNoLicense" | - "hasMultipleLicenses" | - "hasMissingOrUnusedDependency" | - "hasMinifiedCode" | - "hasIndirectDependencies" | - "hasCustomResolver" | - "hasDependencies" | - "hasExternalCapacity" | - "hasScript" | - "hasBannedFile"; - - interface Dependency { - name: string; - version: string; - parent?: { - name: string; - version: string; - }; - flags: Flags[]; - } - - interface Vulnerability { - id: number; - created_at: string; - updated_at: string; - title: string; - author: { - name: string; - website: string | null; - username: string | null; - }; - module_name: string; - publish_data: string; - cves: string[]; - vulnerable_versions: string; - patched_versions: string; - overview: string; - recommendation: string; - references: string[]; - cvss_vector: string; - cvss_score: number; - coordinating_vendor: string; - } - - type VulnerabilityStrategy = "npm" | "node"; - - interface VersionDescriptor { - metadata: { - dependencyCount: number; - publishedCount: number; - lastUpdateAt: number; - lastVersion: number; - hasChangedAuthor: boolean; - hasManyPublishers: boolean; - hasReceivedUpdateInOneYear: boolean; - author: string | null; - homepage: string | null; - maintainers: Maintainer[]; - publishers: Publisher[]; - }; - versions: string[]; - vulnerabilities: Vulnerability[]; - [version: string]: { - id: number; - usedBy: Record; - size: number; - description: string; - author: string | Author; - warnings: Warning[]; - composition: { - extensions: string[]; - files: string[]; - minified: string[]; - required_files: string[]; - required_thirdparty: string[]; - required_nodejs: string[]; - unused: string[]; - missing: string[]; - }; - license: string | License[]; - flags: Flags; - gitUrl: null | string; - }; - } - - interface Payload { - id: string; - rootDependencyName: string; - warnings: []; - dependencies: Record; - version: string; - vulnerabilityStrategy: VulnerabilityStrategy; - } - - interface VerifyPayload { - files: { - list: string[]; - extensions: string[]; - minified: string[]; - }; - directorySize: number; - uniqueLicenseIds: string[]; - licenses: License[]; - ast: { - dependencies: Record; - warnings: Warning[]; - }; - } - - interface Options { - readonly verbose?: boolean; - readonly maxDepth?: number; - readonly usePackageLock?: boolean; - readonly vulnerabilityStrategy: VulnerabilityStrategy; - } - - export function cwd(path: string, options?: NodeSecure.Options): Promise; - export function from(packageName: string, options?: NodeSecure.Options): Promise; - export function verify(packageName: string): Promise; -} - -export = NodeSecure; -export as namespace NodeSecure; diff --git a/index.js b/index.js deleted file mode 100644 index f9c737d8..00000000 --- a/index.js +++ /dev/null @@ -1,148 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const os = require("os"); -const { join, extname } = require("path"); -const { mkdtemp, readFile } = require("fs").promises; -const { promisify } = require("util"); - -// Require Third-party Dependencies -const pacote = require("pacote"); -const { runASTAnalysis } = require("js-x-ray"); -const ntlp = require("ntlp"); -const isMinified = require("is-minified-code"); - -// Require Internal Dependencies -const { depWalker } = require("./src/depWalker"); -const { getRegistryURL, getTarballComposition, recursiveRmdir } = require("./src/utils"); -const { setVulnerabilityStrategy } = require("./src/vulnerabilities/vulnerabilitySource.js"); -const { VULN_MODE_DB_SECURITY_WG, VULN_MODE_NPM_AUDIT } = require("./src/vulnerabilities/strategies.js"); - -// CONSTANTS -const TMP = os.tmpdir(); -const REGISTRY_DEFAULT_ADDR = getRegistryURL(); -const JS_EXTENSIONS = new Set([".js", ".mjs"]); - -// VARS -const nextTick = promisify(setImmediate); - -async function cwd(cwd = process.cwd(), options) { - const packagePath = join(cwd, "package.json"); - const str = await readFile(packagePath, "utf-8"); - options.forceRootAnalysis = true; - if (!("usePackageLock" in options)) { - options.usePackageLock = true; - } - - setVulnerabilityStrategy("vulnerabilityStrategy" in options ? options.vulnerabilityStrategy : VULN_MODE_NPM_AUDIT); - - return depWalker(JSON.parse(str), options); -} - -async function from(packageName, options) { - const token = typeof process.env.NODE_SECURE_TOKEN === "string" ? { token: process.env.NODE_SECURE_TOKEN } : {}; - const manifest = await pacote.manifest(packageName, token); - - setVulnerabilityStrategy("vulnerabilityStrategy" in options ? options.vulnerabilityStrategy : VULN_MODE_DB_SECURITY_WG); - - return depWalker(manifest, options); -} - -async function readJSFile(dest, file) { - const str = await readFile(join(dest, file), "utf-8"); - - return [file, str]; -} - -async function analyseGivenLocation(dest, packageName) { - // Read the package.json file inside the extracted directory. - let isProjectUsingESM = false; - let localPackageName = packageName; - { - const packageStr = await readFile(join(dest, "package.json"), "utf-8"); - const { type = "script", name } = JSON.parse(packageStr); - isProjectUsingESM = type === "module"; - if (localPackageName === null) { - localPackageName = name; - } - } - - // Get the tarball composition - await nextTick(); - const { ext, files, size } = await getTarballComposition(dest); - - // Search for runtime dependencies - const dependencies = Object.create(null); - const minified = []; - const warnings = []; - - const JSFiles = files.filter((name) => JS_EXTENSIONS.has(extname(name))); - const allFilesContent = (await Promise.allSettled(JSFiles.map((file) => readJSFile(dest, file)))) - .filter((_p) => _p.status === "fulfilled").map((_p) => _p.value); - - // TODO: 2) handle dependency by file to not loose data. - for (const [file, str] of allFilesContent) { - try { - const ASTAnalysis = runASTAnalysis(str, { - module: extname(file) === ".mjs" ? true : isProjectUsingESM - }); - ASTAnalysis.dependencies.removeByName(localPackageName); - dependencies[file] = ASTAnalysis.dependencies.dependencies; - warnings.push(...ASTAnalysis.warnings.map((warn) => { - warn.file = file; - - return warn; - })); - - if (!ASTAnalysis.isOneLineRequire && !file.includes(".min") && isMinified(str)) { - minified.push(file); - } - } - catch (err) { - if (!Reflect.has(err, "code")) { - warnings.push({ file, kind: "parsing-error", value: err.message, location: [[0, 0], [0, 0]] }); - } - } - } - - await nextTick(); - const { uniqueLicenseIds, licenses } = await ntlp(dest); - ext.delete(""); - - return { - files: { list: files, extensions: [...ext], minified }, - directorySize: size, - uniqueLicenseIds, - licenses, - ast: { dependencies, warnings } - }; -} - -async function verify(packageName = null) { - if (typeof packageName === "undefined" || packageName === null) { - const analysisPayload = await analyseGivenLocation(process.cwd()); - - return analysisPayload; - } - - const token = typeof process.env.NODE_SECURE_TOKEN === "string" ? { token: process.env.NODE_SECURE_TOKEN } : {}; - const tmpLocation = await mkdtemp(join(TMP, "/")); - const dest = join(tmpLocation, packageName); - - try { - await pacote.extract(packageName, dest, { - ...token, registry: REGISTRY_DEFAULT_ADDR, cache: `${os.homedir()}/.npm` - }); - const analysisPayload = await analyseGivenLocation(dest, packageName); - - return analysisPayload; - } - finally { - await nextTick(); - await recursiveRmdir(tmpLocation); - } -} - -module.exports = { - cwd, from, verify -}; diff --git a/package-lock.json b/package-lock.json index 7423a500..b5c3a0b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,154 +10,304 @@ "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==" }, "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "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" + } + } } }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, "@babel/core": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", - "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.12.17", - "@babel/helper-module-transforms": "^7.12.17", - "@babel/helpers": "^7.12.17", - "@babel/parser": "^7.12.17", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.17", - "@babel/types": "^7.12.17", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.4.tgz", + "integrity": "sha512-Lkcv9I4a8bgUI8LJOLM6IKv6hnz1KOju6KM1lceqVMKlKKqNRopYd2Pc9MgIurqvMJ6BooemrnJz8jlIiQIpsA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { "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 + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/eslint-parser": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.4.tgz", + "integrity": "sha512-hPMIAmGNbmQzXJIo2P43Zj9UhRmGev5f9nqdBFOWNGDGh6XKmjby79woBvg6y0Jur6yRfQBneDbUQ8ZVc1krFw==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "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 + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/generator": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.17.tgz", - "integrity": "sha512-DSA7ruZrY4WI8VxuS1jWSRezFnghEoYEFrZcw9BizQRmOZiUsiHl59+qEARGPqPikwA/GPTyRCi7isuCK/oyqg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "requires": { - "@babel/types": "^7.12.17", + "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "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==", + "dev": true + } } }, "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.17.tgz", - "integrity": "sha512-Bzv4p3ODgS/qpBE0DiJ9qf5WxSmrQ8gVTe8ClMfwwsY2x/rhykxxy3bXzG7AGTnPB2ij37zGJ/Q/6FruxHxsxg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "requires": { - "@babel/types": "^7.12.17" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", - "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.17.tgz", - "integrity": "sha512-sFL+p6zOCQMm9vilo06M4VHuTxUAwa6IxgL56Tq1DVtA0ziAGTH1ThmJq7xwPqdQlgAbKX3fb0oZNbtRIyA5KQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13", - "@babel/helper-simple-access": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.17", - "@babel/types": "^7.12.17", - "lodash": "^4.17.19" + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", + "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-plugin-utils": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz", - "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, "@babel/helper-replace-supers": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz", - "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", - "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { @@ -166,15 +316,21 @@ "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, "@babel/helpers": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.17.tgz", - "integrity": "sha512-tEpjqSBGt/SFEsFikKds1sLNChKKGGR17flIgQKXH4fG6m9gTgl3gnOC1giHNyaBCSKuTfxaSzHi7UnvqiVKxg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.17", - "@babel/types": "^7.12.17" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/highlight": { @@ -241,9 +397,9 @@ } }, "@babel/parser": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.17.tgz", - "integrity": "sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.4.tgz", + "integrity": "sha512-xmzz+7fRpjrvDUj+GV7zfz/R3gSK2cOxGlazaXooxspCr539cbTXJKvBJzSVI2pPhcRGquoOtaIkKCsHQUiO3w==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -346,59 +502,67 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/runtime": { - "version": "7.12.18", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.18.tgz", - "integrity": "sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg==", + "@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/traverse": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.17.tgz", - "integrity": "sha512-LGkTqDqdiwC6Q7fWSwQoas/oyiEYw6Hqjve5KOSykXkmFJFqzvGMb9niaUEag3Rlve492Mkye3gLw9FTv94fdQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.12.17", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.12.17", - "@babel/types": "^7.12.17", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.17.tgz", - "integrity": "sha512-tNMDjcv/4DIcHxErTgwB9q2ZcYyN0sUfgGKUK/mm1FJK7Wz+KstoEekxrl/tBiNDgLK1HGi+sppj1An/1DR4fQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } } }, "@bcoe/v8-coverage": { @@ -407,55 +571,54 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, "@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.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.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" }, "dependencies": { "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } - }, - "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 } } }, - "@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==" + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, "@istanbuljs/load-nyc-config": { @@ -478,49 +641,50 @@ "dev": true }, "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", + "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", + "jest-message-util": "^27.1.0", + "jest-util": "^27.1.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.0.tgz", + "integrity": "sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.1.0", + "@jest/reporters": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", + "jest-changed-files": "^27.1.0", + "jest-config": "^27.1.0", + "jest-haste-map": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-resolve-dependencies": "^27.1.0", + "jest-runner": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", + "jest-watcher": "^27.1.0", + "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", @@ -545,53 +709,53 @@ } }, "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", + "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", "dev": true, "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^26.6.2" + "jest-mock": "^27.1.0" } }, "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", + "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", + "@jest/types": "^27.1.0", + "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-message-util": "^27.1.0", + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0" } }, "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", + "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" + "@jest/environment": "^27.1.0", + "@jest/types": "^27.1.0", + "expect": "^27.1.0" } }, "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.0.tgz", + "integrity": "sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -602,118 +766,750 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", + "jest-haste-map": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "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 - } + "v8-to-istanbul": "^8.0.0" } }, "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", + "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", + "dev": true, + "requires": { + "@jest/console": "^27.1.0", + "@jest/types": "^27.1.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz", + "integrity": "sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A==", + "dev": true, + "requires": { + "@jest/test-result": "^27.1.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.1.0", + "jest-runtime": "^27.1.0" + } + }, + "@jest/transform": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", + "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.1.0", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.1.0", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.1.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", + "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@myunisoft/httpie": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@myunisoft/httpie/-/httpie-1.1.0.tgz", + "integrity": "sha512-tyRDEJZvH/YP2r9DbIc+RnP0Ya5m6DZs7fkmZxN0xlL8MjD0ONKA/N/XsMiCS2S14cWDWYT/jPZFq/bbd8eiSg==", + "requires": { + "content-type": "^1.0.4", + "lru-cache": "^6.0.0", + "statuses": "^2.0.1", + "undici": "^4.3.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nodesecure/eslint-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nodesecure/eslint-config/-/eslint-config-1.2.0.tgz", + "integrity": "sha512-/EpN0YibAgUocS4olMod8RjArpmniGJLuJugigRTPm05EOxJAbd8KQEpbTG4HMVACMNGIGKP9gfRL3Hccgmi/w==", + "dev": true, + "requires": { + "@babel/eslint-parser": "^7.15.0", + "@typescript-eslint/eslint-plugin": "^4.29.0", + "@typescript-eslint/parser": "^4.29.0", + "eslint": "^7.32.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/code-frame": { + "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" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.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 + }, + "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.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.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", + "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.1.2", + "globals": "^13.6.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.merge": "^4.6.2", + "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.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-visitor-keys": { + "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 + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "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 + }, + "string-width": { + "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" + } + }, + "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.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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" + } + } + } + } + } + }, + "@nodesecure/flags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/flags/-/flags-1.0.0.tgz", + "integrity": "sha512-qm8t0gHmcOcBmcHKXVo4Xw7D6CFTqfh91c7Wqt2ZIBo5QSgV1WSTwUldtWv7zpmHmZvbPflYi5XlQKjPkCaFpw==" + }, + "@nodesecure/fs-walk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/fs-walk/-/fs-walk-1.0.0.tgz", + "integrity": "sha512-3Sn8N78jWiOdatBTTLt6YbEHNhkuO13T9gQT3bhVkQdU/cQ4VKX6K76Up8HQLH5IQ168vIzAz8eWvM4dPsnK7w==" + }, + "@nodesecure/i18n": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@nodesecure/i18n/-/i18n-1.1.1.tgz", + "integrity": "sha512-iTkUA0isViwGG/vsSbTWsbMUQV7Ee5VWO0NXp+KYXKH4iM96R/d1dmxgkMw07O4AJmrQU/BKk2CEdZg5tX1tCQ==", + "requires": { + "cacache": "^15.2.0", + "lodash.get": "^4.4.2" + }, + "dependencies": { + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + } + } + }, + "@nodesecure/js-x-ray": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nodesecure/js-x-ray/-/js-x-ray-4.0.1.tgz", + "integrity": "sha512-bQkpXDLPgmgvDgFFxeg5NXnfORYFzxxRxP1BeYewhrtvuUaQi5DleB6qgT/gnVihMvu5XSkDQcM3Vu4ZhHWArQ==", + "requires": { + "@nodesecure/sec-literal": "^1.0.0", + "estree-walker": "^3.0.0", + "meriyah": "^4.2.0", + "safe-regex": "^2.1.1" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz", + "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==" + }, + "meriyah": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-4.2.0.tgz", + "integrity": "sha512-fCVh5GB9YT53Bq14l00HLYE3i9DywrY0JVZxbk0clXWDuMsUKKwluvC5sY0bMBqHbnIbpIjfSSIsnrzbauA8Yw==" + } + } + }, + "@nodesecure/npm-registry-sdk": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nodesecure/npm-registry-sdk/-/npm-registry-sdk-1.2.0.tgz", + "integrity": "sha512-xWW1R+UexRXAYZcmroJBf99BDfGfeyWDegk0cATBb3K+xjMN6XkQ6YJrzCYblnJYpUk74H1fDbaI5Xau3F6MFQ==", + "requires": { + "@myunisoft/httpie": "^1.1.0", + "@npm/types": "^1.0.1" + } + }, + "@nodesecure/ntlp": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nodesecure/ntlp/-/ntlp-1.2.1.tgz", + "integrity": "sha512-1/xrLeqEpSCDGzafUWeEcLm6E7n+zWHwJlRwPfAh+FyWwA1XmaBB9oeSGeSR74Ev9KqJCzo5Owl2xpuiSdSBpQ==", + "requires": { + "conformance": "^1.0.0" + } + }, + "@nodesecure/scanner": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.0.0.tgz", + "integrity": "sha512-GbeRkSMGTBc1oG2PsZxydGWG2+L2BaQuRwyTzzf6RPdosJ9e5R3JVNkSDdJY022N7+5bStLQjqkOrWmvl1S7Lg==", + "requires": { + "@nodesecure/flags": "^1.0.0", + "@nodesecure/fs-walk": "^1.0.0", + "@nodesecure/i18n": "^1.1.1", + "@nodesecure/js-x-ray": "^4.0.1", + "@nodesecure/npm-registry-sdk": "^1.1.2", + "@nodesecure/ntlp": "^1.2.1", + "@nodesecure/vuln": "^1.2.0", + "@npm/types": "^1.0.1", + "@npmcli/arborist": "^2.8.0", + "@slimio/async-cli-spinner": "^0.5.2", + "@slimio/lock": "^0.5.0", + "builtins": "^4.0.0", + "combine-async-iterators": "^2.0.0", + "filenamify": "^5.0.0", + "is-minified-code": "^2.0.0", + "itertools": "^1.7.0", + "kleur": "^4.1.4", + "lodash.difference": "^4.5.0", + "lodash.get": "^4.4.2", + "ms": "^2.1.3", + "pacote": "^11.3.5", + "semver": "^7.3.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@npmcli/arborist": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.8.3.tgz", + "integrity": "sha512-miFcxbZjmQqeFTeRSLLh+lc/gxIKDO5L4PVCp+dp+kmcwJmYsEJmF7YvHR2yi3jF+fxgvLf3CCFzboPIXAuabg==", + "requires": { + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "builtins": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", + "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "requires": { + "semver": "^7.0.0" + } + }, + "filenamify": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.0.1.tgz", + "integrity": "sha512-JaWJHplckZTbg9jgZmOeXq1Sm7GiylBTSacyW45YO9QGsQSELlC9PTKkDBOo+3VHdS2a7dvgyaHe7XcVlEitxw==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "itertools": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/itertools/-/itertools-1.7.0.tgz", + "integrity": "sha512-HSS1CnDbL+3DDDCoVvnwaTH8UsvsBwkwN9HhiL2m1E0Cmr6pbFBxmMjn2wXfgH2TsflWDEJXdZMWuoMbnGSIfg==", + "requires": { + "@babel/runtime": "^7.14.6" + } + }, + "json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + } + } + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.0.0.tgz", + "integrity": "sha512-FIgZbQWlnjVEQvMkylz64/rUggGtrKstPnx8OZyYFG0tAFR8CSBtpXxSwbFLHyeXFn/cunFL7MpuSOvDSOPo9g==", + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } } } }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, + "@nodesecure/sec-literal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/sec-literal/-/sec-literal-1.0.0.tgz", + "integrity": "sha512-LJRrURC/zrFWFKahtAMgKn8lJAXnLATiFJAYKoRVKxY0w1TTNTRiK93vKncQEjD1qPqrVmAGEXzcszrQI1mfPA==", "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "frequency-set": "^1.0.1", + "is-base64": "^1.1.0", + "is-svg": "^4.3.1", + "string-width": "^5.0.0" }, "dependencies": { - "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 + "ansi-regex": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", + "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + }, + "string-width": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", + "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", + "requires": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.0" + } + }, + "strip-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", + "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", + "requires": { + "ansi-regex": "^6.0.0" + } } } }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, + "@nodesecure/vuln": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.2.0.tgz", + "integrity": "sha512-DV3HbhUqF4pJkoThh2aKFYW2aU8LJX7FREX6Lf6aUgJp0Jyc3rXB+OQC15k0OT7EkZQGRaXCMQmD4m/6UraKig==", "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "@nodesecure/npm-registry-sdk": "^1.1.1", + "@npmcli/arborist": "^2.8.0", + "@slimio/github": "^1.0.0", + "semver": "^7.3.5" } }, + "@npm/types": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npm/types/-/types-1.0.1.tgz", + "integrity": "sha512-+tTwymYjZrm7s5KPcS6Abq2l1wVlsk0Jxx4RWMMlC9BePNK4BGMaXUKWphdi7xAYJNA+lwqIqFK6hcNrMu/HFg==" + }, "@npmcli/arborist": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.2.6.tgz", - "integrity": "sha512-dLWPjMeUTrlIJG+f4j3cOMZ24vJ1GQmZm7QixXeOnx3XCo7reWqzjDZfQvPE21FPUuz25EGoRw+MSHzc7OlxAA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.8.3.tgz", + "integrity": "sha512-miFcxbZjmQqeFTeRSLLh+lc/gxIKDO5L4PVCp+dp+kmcwJmYsEJmF7YvHR2yi3jF+fxgvLf3CCFzboPIXAuabg==", "requires": { "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/map-workspaces": "^1.0.2", @@ -721,33 +1517,55 @@ "@npmcli/move-file": "^1.1.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", "@npmcli/run-script": "^1.8.2", "bin-links": "^2.2.1", "cacache": "^15.0.3", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "^8.1.5", "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^9.0.0", - "pacote": "^11.2.6", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", - "semver": "^7.3.4", - "tar": "^6.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", "treeverse": "^1.0.4", "walk-up-path": "^1.0.0" }, "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, "read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "requires": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -755,25 +1573,69 @@ } } }, - "@npmcli/ci-detect": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", - "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==" + "@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } }, "@npmcli/git": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.6.tgz", - "integrity": "sha512-a1MnTfeRPBaKbFY07fd+6HugY1WAkKJzdiJvlRub/9o5xz2F/JtPacZZapx5zRJUQFIzSL677vmTSxEcDMrDbg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "requires": { - "@npmcli/promise-spawn": "^1.1.0", + "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", - "mkdirp": "^1.0.3", - "npm-pick-manifest": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", - "semver": "^7.3.2", - "unique-filename": "^1.1.1", + "semver": "^7.3.5", "which": "^2.0.2" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + } } }, "@npmcli/installed-package-contents": { @@ -825,6 +1687,14 @@ "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==" }, + "@npmcli/package-json": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", + "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, "@npmcli/promise-spawn": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", @@ -857,18 +1727,18 @@ "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==" }, "@sinonjs/commons": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", - "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -908,26 +1778,14 @@ } } }, - "@slimio/eslint-config": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@slimio/eslint-config/-/eslint-config-4.1.0.tgz", - "integrity": "sha512-j8rIt2WzhLQwCnzPYRkSBDCCicznCVi0gXBJKhwluN9IJc5tcVIrhnDz12GI3pevG1b32ysJwAhBu1Z9bwQO1Q==", - "dev": true, - "requires": { - "@iarna/toml": "^2.2.5", - "babel-eslint": "^10.1.0", - "eslint": "^7.0.0", - "eslint-plugin-jsdoc": "^25.4.0" - } - }, "@slimio/github": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@slimio/github/-/github-0.5.0.tgz", - "integrity": "sha512-1TEFfvsCJzqAbchuvjT1dv+reSaY5abdi4J30aT/ii6AJLd4CYL0hi54yR+DHz5Hzhz1LBqMG2u3oS//3RSx+w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slimio/github/-/github-1.0.0.tgz", + "integrity": "sha512-HjH/KeJszTKrL8tL106l4NwmDDh6jlZ7ZcTTzZXuX4aU3pBNGScYouT4CoxUu83z8KvkZWa6BgPy4c32KpvBaw==", "requires": { + "@myunisoft/httpie": "^1.0.0", "@slimio/is": "^1.5.0", - "follow-redirects": "^1.7.0", - "tar-fs": "^2.0.0" + "tar-fs": "^2.1.1" } }, "@slimio/is": { @@ -940,22 +1798,6 @@ "resolved": "https://registry.npmjs.org/@slimio/lock/-/lock-0.5.0.tgz", "integrity": "sha512-Eu4Krm0GDkW8l6+0l2LoIkcZwxJc9v31EEXkK26Ik9zcn1eYubqzF3mczN8kIGVAr651yzSG1eHgh0ngV49fFw==" }, - "@slimio/npm-registry": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@slimio/npm-registry/-/npm-registry-0.7.0.tgz", - "integrity": "sha512-odoQAxbSljy9t0ULV0POX/4pi6T/wVNMDxO8gEoV9q8UYbbIHG5pPEvsswVdh/7rtX7zHdKQJnas8lcNkGaxDw==", - "requires": { - "@slimio/is": "^1.5.1", - "httpie": "^2.0.0-next.11" - }, - "dependencies": { - "httpie": { - "version": "2.0.0-next.13", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-2.0.0-next.13.tgz", - "integrity": "sha512-KbKOnq8wt0hVEfteYCSnEsPgzaWxcVc4qZ4OaDU9mVOYLRo3XChjWs3MiuRgFu5y+4JDo7sDKdKzkAn1ljQYFA==" - } - } - }, "@slimio/wcwidth": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@slimio/wcwidth/-/wcwidth-1.0.0.tgz", @@ -967,9 +1809,9 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -980,18 +1822,18 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -999,9 +1841,9 @@ } }, "@types/babel__traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", - "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -1032,53 +1874,182 @@ } }, "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, - "@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "@types/node": { + "version": "16.7.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", + "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==", "dev": true }, "@types/prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", + "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.30.0", + "@typescript-eslint/scope-manager": "4.30.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "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" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", + "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/typescript-estree": "4.30.0", + "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" + } + }, + "eslint-visitor-keys": { + "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 + } + } + }, + "@typescript-eslint/parser": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.30.0.tgz", + "integrity": "sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/typescript-estree": "4.30.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", + "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/visitor-keys": "4.30.0" + } + }, + "@typescript-eslint/types": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", + "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", "dev": true }, + "@typescript-eslint/typescript-estree": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", + "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/visitor-keys": "4.30.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "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" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", + "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.30.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "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 + } + } + }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -1163,18 +2134,18 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } @@ -1193,9 +2164,9 @@ } }, "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", @@ -1225,34 +2196,16 @@ "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 - }, - "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 - }, - "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 - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "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=", + "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 }, "arrify": { @@ -1279,12 +2232,6 @@ "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=", - "dev": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -1296,12 +2243,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "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 - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1312,31 +2253,17 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.0.tgz", + "integrity": "sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA==", "dev": true, "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", + "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", + "babel-preset-jest": "^27.0.6", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -1356,9 +2283,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", + "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -1388,12 +2315,12 @@ } }, "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", + "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^26.6.2", + "babel-plugin-jest-hoist": "^27.0.6", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -1402,61 +2329,6 @@ "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==", - "dev": 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, - "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, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1529,6 +2401,19 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "browserslist": { + "version": "4.16.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", + "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001251", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.811", + "escalade": "^3.1.1", + "node-releases": "^1.1.75" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -1548,19 +2433,11 @@ } }, "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==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "builtins": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-3.0.1.tgz", - "integrity": "sha512-JxlnRUmQpQReAt5mUshMNQpHe7MEZuy1qH+Eck31mc4GBBM9AmGX9oBrzQH/zAOIRM/CAqNA0J2692a/yJiGQQ==", - "requires": { - "semver": "^7.0.0" - } - }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -1568,10 +2445,11 @@ "dev": true }, "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "requires": { + "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -1586,28 +2464,11 @@ "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.0", + "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.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==", - "dev": 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" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1620,14 +2481,11 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } + "caniuse-lite": { + "version": "1.0.30001252", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz", + "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==", + "dev": true }, "caseless": { "version": "0.12.0", @@ -1656,40 +2514,17 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "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, - "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, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -1773,16 +2608,6 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": 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", @@ -1796,6 +2621,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "colorette": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", + "dev": true + }, "combine-async-iterators": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/combine-async-iterators/-/combine-async-iterators-2.0.0.tgz", @@ -1809,23 +2640,11 @@ "delayed-stream": "~1.0.0" } }, - "comment-parser": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.6.tgz", - "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==", - "dev": true - }, "common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" }, - "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 - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1844,21 +2663,20 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, + "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==" + }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1971,15 +2789,15 @@ } }, "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==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "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=", + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, "deep-is": { @@ -1999,47 +2817,6 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2071,11 +2848,20 @@ } }, "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "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" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2103,9 +2889,9 @@ } }, "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" }, "ecc-jsbn": { "version": "0.1.2", @@ -2116,10 +2902,16 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.3.830", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz", + "integrity": "sha512-gBN7wNAxV5vl1430dG+XRcQhD4pIeYeak6p6rjdCtlz5wWNwDad8jwvphe5oi1chL5MV6RNRikfffBBiFuj+rQ==", + "dev": true + }, "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, "emoji-regex": { @@ -2173,9 +2965,15 @@ } }, "esbuild": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.5.tgz", - "integrity": "sha512-ZBOtZX9HxgSdwkAroVifEUgylWqbOjqbu1i1ohRvhoaYt6aj81dxbizODx419gwDAupqut44ehFVwUq7WRN/OA==", + "version": "0.12.25", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.25.tgz", + "integrity": "sha512-woie0PosbRSoN8gQytrdCzUbS2ByKgO8nD1xCZkEup3D9q92miCze4PqEI9TZDYAuwn6CruEnQpJxgTRWdooAg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { @@ -2184,18 +2982,24 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "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": "^4.2.0", + "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", @@ -2226,13 +3030,6 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "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, - "optional": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -2245,29 +3042,32 @@ } }, "eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.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", + "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", - "file-entry-cache": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -2275,7 +3075,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -2284,7 +3084,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" }, @@ -2304,19 +3104,25 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "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 + }, "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 }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "strip-ansi": { @@ -2327,35 +3133,6 @@ "requires": { "ansi-regex": "^5.0.0" } - }, - "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 - } - } - }, - "eslint-plugin-jsdoc": { - "version": "25.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-25.4.3.tgz", - "integrity": "sha512-5FyIKcNoM+AMBf1sTHvs2DVyij2x6eCYO1hxOUWFLBZV6H5AIdXPT3fVc9H6hrxOYe9SRF+5SjY1hqimV3Q+gQ==", - "dev": true, - "requires": { - "comment-parser": "^0.7.4", - "debug": "^4.1.1", - "jsdoctypeparser": "^6.1.0", - "lodash": "^4.17.15", - "regextras": "^0.7.1", - "semver": "^6.3.0", - "spdx-expression-parse": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, @@ -2441,87 +3218,27 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "estree-walker": { - "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==" - }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "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" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "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 - }, - "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" - } - } + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, "exit": { @@ -2530,171 +3247,83 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "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=", + "expect": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", + "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", "dev": 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" + "@jest/types": "^27.1.0", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-regex-util": "^27.0.6" }, "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" - } - }, - "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, - "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, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - } - }, "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=", + "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-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "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, - "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==", - "dev": 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" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "dependencies": { - "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, - "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, - "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==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "is-glob": "^4.0.1" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true } } }, - "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-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2711,6 +3340,15 @@ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" }, + "fastq": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -2735,9 +3373,9 @@ "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" }, "filenamify": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", - "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.0.1.tgz", + "integrity": "sha512-JaWJHplckZTbg9jgZmOeXq1Sm7GiylBTSacyW45YO9QGsQSELlC9PTKkDBOo+3VHdS2a7dvgyaHe7XcVlEitxw==", "requires": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.1", @@ -2779,17 +3417,6 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "follow-redirects": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", - "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2805,15 +3432,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=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "frequency-set": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/frequency-set/-/frequency-set-1.0.1.tgz", @@ -2856,12 +3474,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gar": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz", - "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==", - "dev": true - }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -2889,16 +3501,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-folder-size": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-2.0.1.tgz", - "integrity": "sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==", - "dev": true, - "requires": { - "gar": "^1.0.4", - "tiny-each-async": "2.0.3" - } - }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -2906,18 +3508,9 @@ "dev": true }, "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" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "getpass": { @@ -2942,9 +3535,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" @@ -2956,17 +3549,32 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, - "optional": 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 + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "har-schema": { "version": "2.0.0", @@ -3002,58 +3610,6 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": 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, - "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, - "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, - "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, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -3102,11 +3658,6 @@ "sshpk": "^1.7.0" } }, - "httpie": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", - "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==" - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -3117,9 +3668,9 @@ } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "humanize-ms": { @@ -3220,32 +3771,6 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "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, - "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, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3257,19 +3782,13 @@ "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-1.1.0.tgz", "integrity": "sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g==" }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", "dev": true, "requires": { - "ci-info": "^2.0.0" + "ci-info": "^3.1.1" } }, "is-core-module": { @@ -3281,55 +3800,10 @@ "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, - "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, - "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, - "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 - } - } - }, "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=", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-extglob": { "version": "2.1.1", @@ -3382,25 +3856,16 @@ "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, - "requires": { - "isobject": "^3.0.1" - } - }, "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "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-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-svg": { @@ -3416,12 +3881,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "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 - }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -3440,12 +3899,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -3497,14 +3950,6 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "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 - } } }, "istanbul-reports": { @@ -3517,291 +3962,268 @@ "istanbul-lib-report": "^3.0.0" } }, - "itertools": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/itertools/-/itertools-1.6.1.tgz", - "integrity": "sha512-V4/0OGqJNtDatQnRdG1/WH4EmHSOMr/o9Zh58DggeQjsHlCLPJe8KECGjb00uv4lAUGfZw2znBskFMxy+EPdxw==", - "requires": { - "@babel/runtime": "^7.6.0" - } - }, "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", "dev": true, "requires": { - "@jest/core": "^26.6.3", + "@jest/core": "^27.1.0", "import-local": "^3.0.2", - "jest-cli": "^26.6.3" + "jest-cli": "^27.1.0" }, "dependencies": { "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.0.tgz", + "integrity": "sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw==", "dev": true, "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/core": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", + "jest-config": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "prompts": "^2.0.1", - "yargs": "^15.4.1" + "yargs": "^16.0.3" } } } }, "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.0.tgz", + "integrity": "sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "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", - "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" - } - }, - "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 - }, - "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" - } - } + "@jest/types": "^27.1.0", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.0.tgz", + "integrity": "sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA==", + "dev": true, + "requires": { + "@jest/environment": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.1.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" } }, "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.0.tgz", + "integrity": "sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", + "@jest/test-sequencer": "^27.1.0", + "@jest/types": "^27.1.0", + "babel-jest": "^27.1.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" + "is-ci": "^3.0.0", + "jest-circus": "^27.1.0", + "jest-environment-jsdom": "^27.1.0", + "jest-environment-node": "^27.1.0", + "jest-get-type": "^27.0.6", + "jest-jasmine2": "^27.1.0", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-runner": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", + "micromatch": "^4.0.4", + "pretty-format": "^27.1.0" } }, "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", + "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.1.0" } }, "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", + "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.0.6", + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0" } }, "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz", + "integrity": "sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0", + "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.0.tgz", + "integrity": "sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0" } }, "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", "dev": true }, "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", + "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.1.0", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", + "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz", + "integrity": "sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.1.0", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^26.6.2", + "expect": "^27.1.0", "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "jest-each": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0", + "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz", + "integrity": "sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA==", "dev": true, "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.0.6", + "pretty-format": "^27.1.0" } }, "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", + "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-diff": "^27.1.0", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.1.0" } }, "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", + "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.1.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.1.0", "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", + "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.1.0", "@types/node": "*" } }, @@ -3812,105 +4234,109 @@ "dev": true }, "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", "dev": true }, "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", + "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", + "escalade": "^3.1.1", "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.1.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", + "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz", + "integrity": "sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" + "@jest/types": "^27.1.0", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.1.0" } }, "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.0.tgz", + "integrity": "sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.1.0", + "@jest/environment": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.7.1", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.1.0", + "jest-environment-node": "^27.1.0", + "jest-haste-map": "^27.1.0", + "jest-leak-detector": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "throat": "^6.0.1" } }, "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", + "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", + "dev": true, + "requires": { + "@jest/console": "^27.1.0", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/globals": "^27.1.0", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", + "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", + "jest-haste-map": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-mock": "^27.1.0", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", - "yargs": "^15.4.1" + "yargs": "^16.0.3" } }, "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "dev": true, "requires": { "@types/node": "*", @@ -3918,55 +4344,63 @@ } }, "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", + "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", "dev": true, "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^26.6.2", + "expect": "^27.1.0", "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", + "jest-diff": "^27.1.0", + "jest-get-type": "^27.0.6", + "jest-haste-map": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-util": "^27.1.0", "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", + "pretty-format": "^27.1.0", "semver": "^7.3.2" } }, "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", + "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "is-ci": "^3.0.0", + "picomatch": "^2.2.3" } }, "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", + "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", + "@jest/types": "^27.1.0", + "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", + "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "pretty-format": "^27.1.0" }, "dependencies": { "camelcase": { @@ -3978,29 +4412,40 @@ } }, "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.0.tgz", + "integrity": "sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ==", "dev": true, "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^26.6.2", + "jest-util": "^27.1.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", + "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" + }, + "dependencies": { + "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": { + "has-flag": "^4.0.0" + } + } } }, "js-tokens": { @@ -4009,17 +4454,6 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-x-ray": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/js-x-ray/-/js-x-ray-3.2.0.tgz", - "integrity": "sha512-zi/Tngz3sGTUR99hauBAHNGJyr/rZi77WG50nETe4AHcSLAyiCmJtKWevabDOPaA3Y/784gWodyBoV4a0v7UOw==", - "requires": { - "estree-walker": "^2.0.2", - "meriyah": "^4.1.5", - "safe-regex": "^2.1.1", - "sec-literal": "^1.2.0" - } - }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -4035,55 +4469,67 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "jsdoctypeparser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz", - "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==", - "dev": true - }, "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", + "abab": "^2.0.5", + "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", - "cssstyle": "^2.2.0", + "cssstyle": "^2.3.0", "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", + "decimal.js": "^10.2.1", "domexception": "^2.0.1", - "escodegen": "^1.14.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", + "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": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", + "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.0.0", - "ws": "^7.2.3", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "dependencies": { - "tough-cookie": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true + }, + "form-data": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "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" } } } @@ -4122,9 +4568,9 @@ "dev": true }, "json-stringify-nice": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.1.tgz", - "integrity": "sha512-aHOgcSoOLvmFZQMvZ27rFw68r4e9OlQtH7YEcF2u5amVYbF/D3cKBXKCvl5EGhQz2NwJZ6RPfgRX6yNQ+UBKJw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" }, "json-stringify-safe": { "version": "5.0.1", @@ -4166,22 +4612,11 @@ "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.0.0.tgz", "integrity": "sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w==" }, - "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 - }, "kleur": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==" }, - "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -4198,12 +4633,6 @@ "type-check": "~0.4.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=", - "dev": true - }, "list.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/list.js/-/list.js-2.3.1.tgz", @@ -4258,6 +4687,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.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", @@ -4268,10 +4703,16 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "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.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 }, "loud-rejection": { @@ -4310,12 +4751,12 @@ } }, "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "requires": { "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", + "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -4326,8 +4767,9 @@ "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", + "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" } }, @@ -4345,21 +4787,6 @@ "tmpl": "1.0.x" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": 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, - "requires": { - "object-visit": "^1.0.0" - } - }, "matchit": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", @@ -4374,19 +4801,20 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "meriyah": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-4.1.5.tgz", - "integrity": "sha512-ptw5umwiQILhfIGKO99NIY3Y2/jhEyEPIwSFwKLBQdXnN/6606rQoHyF4WK+2WiUmvFbBbTVMo4Q+po30xVjtg==" + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.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.0.5" + "picomatch": "^2.2.3" } }, "mime": { @@ -4495,27 +4923,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, - "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, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -4546,36 +4953,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": 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", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "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 + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "node-gyp": { "version": "7.1.2", @@ -4606,29 +4993,11 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "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==", - "dev": true, - "optional": true, - "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.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true - } - } + "node-releases": { + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "dev": true }, "nopt": { "version": "5.0.0", @@ -4703,13 +5072,11 @@ } }, "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", + "make-fetch-happen": "^9.0.1", "minipass": "^3.1.3", "minipass-fetch": "^1.3.0", "minipass-json-stream": "^1.0.1", @@ -4718,20 +5085,12 @@ } }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "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": "^2.0.0" - }, - "dependencies": { - "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-key": "^3.0.0" } }, "npmlog": { @@ -4745,14 +5104,6 @@ "set-blocking": "~2.0.0" } }, - "ntlp": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ntlp/-/ntlp-1.1.3.tgz", - "integrity": "sha512-gbfTRMQzg4+SLWJ6EjyA66Zwd2u3tu45LUf9rzlThu4ryFVocRXI1RX/3TZZwAQzKlDlyUpeHTU77KGcOY1Zuw==", - "requires": { - "conformance": "^1.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -4765,63 +5116,14 @@ "dev": true }, "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=", - "dev": 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, - "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=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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, - "requires": { - "isobject": "^3.0.0" - } + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, - "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, - "requires": { - "isobject": "^3.0.1" - } + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "once": { "version": "1.4.0", @@ -4840,9 +5142,9 @@ } }, "open": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/open/-/open-8.0.3.tgz", - "integrity": "sha512-7nsHNw3rOIPTwhF5iYkgE+LVM/oUHWC3cgrWNxPqa+W+Wl5Ekvo32qayB5PYX8zNjXzUkrTaJsWpaGmuw8Aspg==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", + "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -4869,12 +5171,6 @@ "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true }, - "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-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -4908,11 +5204,11 @@ "dev": true }, "pacote": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.2.7.tgz", - "integrity": "sha512-ogxPor11v/rnU9ukwLlI2dPx22q9iob1+yZyqSwerKsOvBMhU9e+SJHtxY4y2N0MRH4/5jGsGiRLsZeJWyM4dQ==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", "requires": { - "@npmcli/git": "^2.0.1", + "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", "@npmcli/run-script": "^1.8.2", @@ -4925,7 +5221,7 @@ "npm-package-arg": "^8.0.1", "npm-packlist": "^2.1.4", "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^9.0.0", + "npm-registry-fetch": "^11.0.0", "promise-retry": "^2.0.1", "read-package-json-fast": "^2.0.1", "rimraf": "^3.0.2", @@ -4952,28 +5248,10 @@ "just-diff-apply": "^3.0.0" } }, - "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, - "requires": { - "@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" - } - }, "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "path-exists": { @@ -4994,9 +5272,15 @@ "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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 }, "performance-now": { @@ -5005,9 +5289,9 @@ "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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { @@ -5114,8 +5398,7 @@ }, "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==", + "resolved": "", "dev": true }, "indent-string": { @@ -5302,12 +5585,6 @@ "trouter": "^2.0.1" } }, - "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 - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5315,20 +5592,20 @@ "dev": true }, "pretty-bytes": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.5.0.tgz", - "integrity": "sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", + "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.1.0", "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "dependencies": { @@ -5337,9 +5614,20 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, + "proc-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", + "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -5376,9 +5664,9 @@ } }, "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -5427,10 +5715,16 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "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 + }, "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "read-cmd-shim": { @@ -5447,69 +5741,6 @@ "npm-normalize-package-bin": "^1.0.1" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "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 - }, - "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" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "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 - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -5540,27 +5771,6 @@ "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==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - } - } - }, "regexp-tree": { "version": "0.1.23", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.23.tgz", @@ -5572,30 +5782,6 @@ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, - "regextras": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz", - "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", - "dev": true - }, - "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 - }, - "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 - }, - "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 - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -5623,26 +5809,6 @@ "uuid": "^3.3.2" } }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5655,12 +5821,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", @@ -5686,12 +5846,6 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "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 - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -5701,17 +5855,17 @@ "signal-exit": "^3.0.2" } }, - "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 - }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, + "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", @@ -5720,233 +5874,54 @@ "glob": "^7.1.3" } }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "sade": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", - "requires": { - "mri": "^1.1.0" - } - }, - "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==" - }, - "safe-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", - "requires": { - "regexp-tree": "~0.1.1" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": 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, - "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, - "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, - "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=", - "dev": 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, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": 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" - } - }, - "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, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "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, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "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" - } - }, - "sec-literal": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/sec-literal/-/sec-literal-1.2.0.tgz", - "integrity": "sha512-L3e3h+t0Egu7Sz9fCVkW5hWsHOuQORVeSNCk0NcOXlj9x+dfmLkeLUXZSgqk++fPvC3zOFjzdy05HbOEKh1bcw==", - "requires": { - "frequency-set": "^1.0.1", - "is-base64": "^1.1.0", - "is-svg": "^4.3.1", - "string-width": "^4.2.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==" - }, - "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==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.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==", - "requires": { - "ansi-regex": "^5.0.0" - } - } + "requires": { + "mri": "^1.1.0" + } + }, + "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==" + }, + "safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "requires": { + "regexp-tree": "~0.1.1" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "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" } }, "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==", "requires": { "lru-cache": "^6.0.0" } @@ -5956,29 +5931,6 @@ "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==", - "dev": 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, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5994,32 +5946,25 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "sirv": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz", - "integrity": "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz", + "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==", "requires": { - "@polka/url": "^1.0.0-next.9", + "@polka/url": "^1.0.0-next.20", "mime": "^2.3.1", "totalist": "^1.0.0" }, "dependencies": { "@polka/url": { - "version": "1.0.0-next.11", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.11.tgz", - "integrity": "sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==" + "version": "1.0.0-next.20", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.20.tgz", + "integrity": "sha512-88p7+M0QGxKpmnkfXjS4V26AnoC/eiqZutE8GLdaI5X12NY75bXSdTY9NkmYb2Xyk1O+MmkuO6Frmsj84V6I8Q==" } } }, @@ -6068,166 +6013,31 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" }, - "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, - "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, - "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, - "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, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": 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, - "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, - "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, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "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, - "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, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "socks": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.5.1.tgz", - "integrity": "sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", "requires": { "ip": "^1.1.5", "smart-buffer": "^4.1.0" } }, "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.0.0.tgz", + "integrity": "sha512-FIgZbQWlnjVEQvMkylz64/rUggGtrKstPnx8OZyYFG0tAFR8CSBtpXxSwbFLHyeXFn/cunFL7MpuSOvDSOPo9g==", "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "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, - "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", @@ -6236,22 +6046,8 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "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 - } } }, - "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 - }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -6281,15 +6077,6 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" }, - "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, - "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", @@ -6337,37 +6124,15 @@ } } }, - "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, - "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, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { "char-regex": "^1.0.2", @@ -6429,12 +6194,6 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -6465,9 +6224,9 @@ } }, "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -6481,21 +6240,23 @@ "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.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", - "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -6523,9 +6284,9 @@ "dev": true }, "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", @@ -6545,9 +6306,9 @@ } }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -6627,15 +6388,9 @@ "dev": true }, "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "tiny-each-async": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz", - "integrity": "sha1-jru/1tYpXxNwAD+7NxYq/loKUdE=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "tmpl": { @@ -6650,49 +6405,6 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": 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, - "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, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - } - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6717,9 +6429,9 @@ } }, "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "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" @@ -6746,6 +6458,21 @@ "matchit": "^1.0.0" } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -6774,6 +6501,12 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "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 + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -6782,17 +6515,10 @@ "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==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } + "undici": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-4.5.1.tgz", + "integrity": "sha512-1Kmphp4SMwVbSauz9xH4gxt0m3sLGs5qRHs/XYgjeO3bNSt6hspDZqMhM8+ETu9ynB5bq9e6mnwcDz+NVCQ3UQ==" }, "unique-filename": { "version": "1.1.1", @@ -6810,45 +6536,11 @@ "imurmurhash": "^0.1.4" } }, - "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, - "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, - "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, - "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 - } - } + "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 }, "uri-js": { "version": "4.4.1", @@ -6858,18 +6550,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 - }, - "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 - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6887,9 +6567,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", - "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -6941,9 +6621,9 @@ } }, "vis-network": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-9.0.2.tgz", - "integrity": "sha512-0UFs81YsGcHSzZG5d3AsDQDvREF0h0/mAqzRDV+62jq0Tj5fpJzB+xvcbRuZfQIfrYN7DqNsHXvNOthAuCAlrg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-9.1.0.tgz", + "integrity": "sha512-rx96L144RJWcqOa6afjiFyxZKUerRRbT/YaNMpsusHdwzxrVTO2LlduR45PeJDEztrAf3AU5l2zmiG+1ydUZCw==", "dev": true }, "w3c-hr-time": { @@ -7011,13 +6691,13 @@ "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==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", + "lodash": "^4.7.0", + "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, @@ -7029,12 +6709,6 @@ "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=", - "dev": true - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -7106,9 +6780,9 @@ } }, "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", + "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", "dev": true }, "xml-name-validator": { @@ -7124,9 +6798,9 @@ "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { @@ -7135,22 +6809,18 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "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" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "dependencies": { "ansi-regex": { @@ -7159,17 +6829,6 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "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" - } - }, "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", @@ -7177,9 +6836,9 @@ "dev": true }, "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", @@ -7195,30 +6854,15 @@ "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" - } - }, - "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.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, "zup": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/zup/-/zup-0.0.1.tgz", diff --git a/package.json b/package.json index 5083ec19..f8ac4125 100644 --- a/package.json +++ b/package.json @@ -73,50 +73,39 @@ }, "homepage": "https://github.com/ES-Community/nsecure#readme", "devDependencies": { - "@slimio/eslint-config": "^4.1.0", - "@types/node": "^14.14.31", - "esbuild": "^0.9.5", - "eslint": "^7.20.0", - "get-folder-size": "^2.0.1", - "jest": "^26.6.3", + "@nodesecure/eslint-config": "^1.2.0", + "@types/node": "^16.7.10", + "esbuild": "^0.12.25", + "eslint": "^7.32.0", + "jest": "^27.1.0", "list.js": "^2.3.1", "pkg-ok": "^2.3.1", - "pretty-bytes": "^5.5.0", + "pretty-bytes": "^5.6.0", "size-satisfies": "^1.0.0", - "vis-network": "^9.0.2" + "vis-network": "^9.1.0" }, "dependencies": { - "@npmcli/arborist": "^2.2.6", + "@nodesecure/flags": "^1.0.0", + "@nodesecure/i18n": "^1.1.1", + "@nodesecure/npm-registry-sdk": "^1.2.0", + "@nodesecure/scanner": "^1.0.0", + "@nodesecure/vuln": "^1.2.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", - "@slimio/github": "^0.5.0", - "@slimio/is": "^1.5.1", - "@slimio/lock": "^0.5.0", - "@slimio/npm-registry": "^0.7.0", - "builtins": "^3.0.1", - "cacache": "^15.0.5", + "cacache": "^15.3.0", "cliui": "^7.0.4", - "combine-async-iterators": "^2.0.0", - "dotenv": "^8.2.0", - "filenamify": "^4.2.0", - "httpie": "^1.1.2", - "is-minified-code": "^2.0.0", - "itertools": "^1.6.1", - "js-x-ray": "^3.2.0", + "dotenv": "^10.0.0", + "filenamify": "^5.0.1", "kleur": "^4.1.4", - "klona": "^2.0.4", - "lodash.difference": "^4.5.0", - "lodash.get": "^4.4.2", "make-promises-safe": "^5.1.0", "ms": "^2.1.3", - "ntlp": "^1.1.3", - "open": "^8.0.3", - "pacote": "^11.2.7", + "open": "^8.2.1", + "pacote": "^11.3.5", "polka": "^0.5.2", "qoa": "^0.2.0", "sade": "^1.7.4", - "semver": "^7.3.4", - "sirv": "^1.0.11", + "semver": "^7.3.5", + "sirv": "^1.0.17", "zup": "0.0.1" } } diff --git a/src/depWalker.js b/src/depWalker.js deleted file mode 100644 index f375d8d2..00000000 --- a/src/depWalker.js +++ /dev/null @@ -1,387 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const { join } = require("path"); -const { mkdtemp, access } = require("fs").promises; -const os = require("os"); - -// Require Third-party Dependencies -const { red, white, yellow, cyan, gray, green } = require("kleur"); -const combineAsyncIterators = require("combine-async-iterators"); -const Arborist = require("@npmcli/arborist"); -const Spinner = require("@slimio/async-cli-spinner"); -const Registry = require("@slimio/npm-registry"); -const Lock = require("@slimio/lock"); -const iter = require("itertools"); -const pacote = require("pacote"); -const semver = require("semver"); -const ms = require("ms"); -const is = require("@slimio/is"); - -// Require Internal Dependencies -const { mergeDependencies, cleanRange, recursiveRmdir, constants } = require("./utils"); -const { getVulnerabilityStrategy } = require("./vulnerabilities/vulnerabilitySource"); -const { analyzeDirOrArchiveOnDisk } = require("./tarball"); -const Dependency = require("./dependency.class"); -const applyWarnings = require("./warnings"); -const i18n = require("./i18n"); -const { version: packageVersion } = require("../package.json"); - -// VARS -const npmReg = new Registry(constants.DEFAULT_REGISTRY_ADDR); -Spinner.DEFAULT_SPINNER = "dots"; - -async function getExpectedSemVer(depName, range) { - try { - const { versions, "dist-tags": { latest } } = await pacote.packument(depName, { - ...constants.NPM_TOKEN, registry: constants.DEFAULT_REGISTRY_ADDR - }); - const currVersion = semver.maxSatisfying(Object.keys(versions), range); - - return [currVersion === null ? latest : currVersion, semver.eq(latest, currVersion)]; - } - catch (err) { - return [cleanRange(range), true]; - } -} - -async function getCleanDependencyName([depName, range]) { - const [depVer, isLatest] = await getExpectedSemVer(depName, range); - - return [`${depName}@${range}`, `${depName}@${depVer}`, isLatest]; -} - -async function* searchDeepDependencies(packageName, gitURL, options) { - const isGit = typeof gitURL === "string"; - const { exclude, currDepth = 0, parent, maxDepth } = options; - - const { name, version, deprecated, ...pkg } = await pacote.manifest(isGit ? gitURL : packageName, { - ...constants.NPM_TOKEN, - registry: constants.DEFAULT_REGISTRY_ADDR, - cache: `${os.homedir()}/.npm` - }); - const { dependencies, customResolvers } = mergeDependencies(pkg); - - const current = new Dependency(name, version, parent); - isGit && current.isGit(gitURL); - current.addFlag("isDeprecated", deprecated === true); - current.addFlag("hasCustomResolver", customResolvers.size > 0); - current.addFlag("hasDependencies", dependencies.size > 0); - - if (currDepth !== maxDepth) { - const config = { - exclude, currDepth: currDepth + 1, parent: current, maxDepth - }; - - const gitDependencies = iter.filter(customResolvers.entries(), ([, valueStr]) => valueStr.startsWith("git+")); - for (const [depName, valueStr] of gitDependencies) { - yield* searchDeepDependencies(depName, valueStr.slice(4), config); - } - - const depsNames = await Promise.all(iter.map(dependencies.entries(), getCleanDependencyName)); - for (const [fullName, cleanName, isLatest] of depsNames) { - if (!isLatest) { - current.addFlag("hasOutdatedDependency"); - } - - if (exclude.has(cleanName)) { - exclude.get(cleanName).add(current.fullName); - } - else { - exclude.set(cleanName, new Set([current.fullName])); - yield* searchDeepDependencies(fullName, void 0, config); - } - } - } - - yield current; -} - -async function* deepReadEdges(currentPackageName, { to, parent, exclude, fullLockMode }) { - const { version, integrity = to.integrity } = to.package; - - const updatedVersion = version === "*" || typeof version === "undefined" ? "latest" : version; - const current = new Dependency(currentPackageName, updatedVersion, parent); - - if (fullLockMode) { - const { deprecated, _integrity, ...pkg } = await pacote.manifest(`${currentPackageName}@${updatedVersion}`, { - ...constants.NPM_TOKEN, registry: constants.DEFAULT_REGISTRY_ADDR, cache: `${os.homedir()}/.npm` - }); - const { customResolvers } = mergeDependencies(pkg); - - current.addFlag("hasValidIntegrity", _integrity === integrity); - current.addFlag("isDeprecated"); - current.addFlag("hasCustomResolver", customResolvers.size > 0); - } - current.addFlag("hasDependencies", to.edgesOut.size > 0); - - for (const [packageName, { to: toNode }] of to.edgesOut) { - if (toNode === null || toNode.dev) { - continue; - } - const cleanName = `${packageName}@${toNode.package.version}`; - - if (exclude.has(cleanName)) { - exclude.get(cleanName).add(current.fullName); - } - else { - exclude.set(cleanName, new Set([current.fullName])); - yield* deepReadEdges(packageName, { parent: current, to: toNode, exclude }); - } - } - yield current; -} - -async function fetchPackageMetadata(name, version, options) { - const { ref, metadataLocker } = options; - const free = await metadataLocker.acquireOne(); - - try { - const publishers = new Set(); - const oneYearFromToday = new Date(); - oneYearFromToday.setFullYear(oneYearFromToday.getFullYear() - 1); - - const pkg = await npmReg.package(name); - if (semver.neq(version, pkg.lastVersion)) { - ref[version].flags.push("isOutdated"); - } - ref.metadata.publishedCount = pkg.versions.length; - ref.metadata.lastUpdateAt = pkg.publishedAt(pkg.lastVersion); - ref.metadata.hasReceivedUpdateInOneYear = !(oneYearFromToday > ref.metadata.lastUpdateAt); - ref.metadata.lastVersion = pkg.lastVersion; - ref.metadata.homepage = pkg.homepage || null; - ref.metadata.maintainers = pkg.maintainers; - if (is.string(pkg.author)) { - ref.metadata.author = pkg.author; - } - else { - ref.metadata.author = "name" in pkg.author ? pkg.author.name : null; - } - - for (const version of pkg.versions) { - const { npmUser } = pkg.version(version); - if (is.nullOrUndefined(npmUser) || !("name" in npmUser) || !is.string(npmUser.name)) { - continue; - } - - if (ref.metadata.author === null) { - ref.metadata.author = npmUser.name; - } - else if (npmUser.name !== ref.metadata.author) { - ref.metadata.hasManyPublishers = true; - } - - if (!publishers.has(npmUser.name)) { - publishers.add(npmUser.name); - ref.metadata.publishers.push({ name: npmUser.name, version, at: pkg.publishedAt(version) }); - } - } - - if (ref.metadata.author === null) { - ref.metadata.author = "N/A"; - } - } - catch (err) { - // Ignore - } - finally { - free(); - } -} - -async function* getRootDependencies(manifest, options) { - const { maxDepth = 4, exclude, usePackageLock, fullLockMode } = options; - - const { dependencies, customResolvers } = mergeDependencies(manifest, void 0); - const parent = new Dependency(manifest.name, manifest.version); - parent.addFlag("hasCustomResolver", customResolvers.size > 0); - parent.addFlag("hasDependencies", dependencies.size > 0); - - let iterators; - if (usePackageLock) { - const arb = new Arborist({ ...constants.NPM_TOKEN, registry: constants.DEFAULT_REGISTRY_ADDR }); - let tree; - try { - await access(join(process.cwd(), "node_modules")); - tree = await arb.loadActual(); - } - catch { - tree = await arb.loadVirtual(); - } - - iterators = iter.filter(tree.edgesOut.entries(), ([, { to }]) => !to.dev) - .map(([packageName, { to }]) => deepReadEdges(packageName, { to, parent, fullLockMode, exclude })); - } - else { - const configRef = { exclude, maxDepth, parent }; - iterators = [ - ...iter.filter(customResolvers.entries(), ([, valueStr]) => valueStr.startsWith("git+")) - .map(([depName, valueStr]) => searchDeepDependencies(depName, valueStr.slice(4), configRef)), - ...iter.map(dependencies.entries(), ([name, ver]) => searchDeepDependencies(`${name}@${ver}`, void 0, configRef)) - ]; - } - for await (const dep of combineAsyncIterators({}, ...iterators)) { - yield dep; - } - - // Add root dependencies to the exclude Map (because the parent is not handled by searchDeepDependencies) - // if we skip this the code will fail to re-link properly dependencies in the following steps - const depsName = await Promise.all(iter.map(dependencies.entries(), getCleanDependencyName)); - for (const [, fullRange, isLatest] of depsName) { - if (!isLatest) { - parent.addFlag("hasOutdatedDependency"); - } - if (exclude.has(fullRange)) { - exclude.get(fullRange).add(parent.fullName); - } - } - - yield parent; -} - -async function depWalker(manifest, options = Object.create(null)) { - const { verbose = true, forceRootAnalysis = false, usePackageLock = false, fullLockMode = false } = options; - - // Create TMP directory - const tmpLocation = await mkdtemp(join(os.tmpdir(), "/")); - - const id = tmpLocation.slice(-6); - - const payload = { - id, - rootDepencyName: manifest.name, - warnings: [], - dependencies: new Map(), - version: packageVersion - }; - - // We are dealing with an exclude Map to avoid checking a package more than one time in searchDeepDependencies - const exclude = new Map(); - - { - const treeSpinner = new Spinner({ verbose }) - .start(white().bold(i18n.getToken("depWalker.fetch_and_walk_deps"))); - const tarballSpinner = new Spinner({ verbose }) - .start(white().bold(i18n.getToken("depWalker.waiting_tarball"))); - const regSpinner = new Spinner({ verbose }) - .start(white().bold(i18n.getToken("depWalker.fetch_on_registry"))); - - let allDependencyCount = 0; - let processedTarballCount = 0; - let processedRegistryCount = 0; - const promisesToWait = []; - - const tarballLocker = new Lock({ maxConcurrent: 5 }); - const metadataLocker = new Lock({ maxConcurrent: 10 }); - metadataLocker.on("freeOne", () => { - processedRegistryCount++; - const stats = gray().bold(`[${yellow().bold(processedRegistryCount)}/${allDependencyCount}]`); - regSpinner.text = white().bold(`${i18n.getToken("depWalker.fetch_metadata")} ${stats}`); - }); - tarballLocker.on("freeOne", () => { - processedTarballCount++; - const stats = gray().bold(`[${yellow().bold(processedTarballCount)}/${allDependencyCount}]`); - tarballSpinner.text = white().bold(`${i18n.getToken("depWalker.analyzed_tarball")} ${stats}`); - }); - - const rootDepsOptions = { maxDepth: options.maxDepth, exclude, usePackageLock, fullLockMode }; - for await (const currentDep of getRootDependencies(manifest, rootDepsOptions)) { - const { name, version } = currentDep; - const current = currentDep.exportAsPlainObject(name === manifest.name ? 0 : void 0); - let processDep = true; - - if (payload.dependencies.has(name)) { - // TODO: how to handle different metadata ? - const dep = payload.dependencies.get(name); - - const currVersion = current.versions[0]; - if (Reflect.has(dep, currVersion)) { - processDep = false; - } - else { - dep[currVersion] = current[currVersion]; - dep.versions.push(currVersion); - } - } - else { - payload.dependencies.set(name, current); - } - - if (processDep) { - allDependencyCount++; - promisesToWait.push(fetchPackageMetadata(name, version, { ref: current, metadataLocker })); - promisesToWait.push(analyzeDirOrArchiveOnDisk(name, version, { - ref: current[version], - tmpLocation: forceRootAnalysis && name === manifest.name ? null : tmpLocation, - tarballLocker - })); - } - } - - const execTree = cyan().bold(ms(Number(treeSpinner.elapsedTime.toFixed(2)))); - treeSpinner.succeed(white().bold( - i18n.getToken("depWalker.success_fetch_deptree", yellow().bold(i18n.getToken("depWalker.dep_tree")), execTree))); - - // Wait for all extraction to be done! - await Promise.allSettled(promisesToWait); - await new Promise((resolve) => setImmediate(resolve)); - - const execTarball = cyan().bold(ms(Number(tarballSpinner.elapsedTime.toFixed(2)))); - tarballSpinner.succeed(white().bold( - i18n.getToken("depWalker.success_tarball", green().bold(allDependencyCount), execTarball))); - regSpinner.succeed(white().bold(i18n.getToken("depWalker.success_registry_metadata"))); - } - - // Search for vulnerabilities relatively to the current initialized strategy - const vulnStrategy = await getVulnerabilityStrategy(); - await vulnStrategy.hydrateNodeSecurePayload(payload.dependencies); - - payload.vulnerabilityStrategy = vulnStrategy.type; - - - // We do this because it "seem" impossible to link all dependencies in the first walk. - // Because we are dealing with package only one time it may happen sometimes. - for (const [packageName, descriptor] of payload.dependencies) { - for (const verStr of descriptor.versions) { - const fullName = `${packageName}@${verStr}`; - const usedDeps = exclude.get(fullName) || new Set(); - if (usedDeps.size === 0) { - continue; - } - - const usedBy = Object.create(null); - for (const [name, version] of [...usedDeps].map((name) => name.split(" "))) { - usedBy[name] = version; - } - Object.assign(descriptor[verStr].usedBy, usedBy); - } - } - - // Apply warnings! - payload.warnings = applyWarnings(payload.dependencies); - if (payload.warnings.length > 0 && verbose) { - console.log(`\n ${yellow().underline().bold("Global Warning:")}\n`); - for (const warning of payload.warnings) { - console.log(red().bold(warning)); - } - } - - // Cleanup tmpLocation dir - try { - await new Promise((resolve) => setImmediate(resolve)); - await recursiveRmdir(tmpLocation); - } - catch (err) { - /* istanbul ignore next */ - console.log(red().bold(i18n.getToken("depWalker.failed_rmdir", yellow().bold(tmpLocation)))); - } - if (verbose) { - console.log(""); - } - - payload.dependencies = Object.fromEntries(payload.dependencies); - - return payload; -} - -module.exports = { depWalker }; diff --git a/src/dependency.class.js b/src/dependency.class.js deleted file mode 100644 index 164a0419..00000000 --- a/src/dependency.class.js +++ /dev/null @@ -1,104 +0,0 @@ -/* eslint-disable lines-between-class-members */ -"use strict"; - -class Dependency { - gitUrl = null; - dependencyCount = 0; - warnings = []; - - #flags = new Set(); - #parent = null; - - constructor(name, version, parent = null) { - this.name = name; - this.version = version; - - if (parent !== null) { - parent.dependencyCount++; - } - this.#parent = parent; - } - - get fullName() { - return `${this.name} ${this.version}`; - } - - get flags() { - return [...this.#flags]; - } - - get parent() { - return this.#parent === null ? {} : { [this.#parent.name]: this.#parent.version }; - } - - addFlag(flagName, predicate = true) { - if (typeof flagName !== "string") { - throw new TypeError("flagName argument must be typeof string"); - } - - if (predicate) { - if (flagName === "hasDependencies" && this.#parent !== null) { - this.#parent.addFlag("hasIndirectDependencies"); - } - - this.#flags.add(flagName); - } - } - - isGit(url) { - this.#flags.add("isGit"); - if (typeof url === "string") { - this.gitUrl = url; - } - - return this; - } - - exportAsPlainObject(customId) { - if (this.warnings.length > 0) { - this.addFlag("hasWarnings"); - } - - return { - [this.version]: { - id: typeof customId === "number" ? customId : Dependency.currentId++, - usedBy: this.parent, - flags: this.flags, - description: "", - size: 0, - author: "N/A", - warnings: this.warnings, - composition: { - extensions: [], - files: [], - minified: [], - unused: [], - missing: [], - required_files: [], - required_nodejs: [], - required_thirdparty: [] - }, - license: "unkown license", - gitUrl: this.gitUrl - }, - versions: [this.version], - vulnerabilities: [], - metadata: { - dependencyCount: this.dependencyCount, - publishedCount: 0, - lastUpdateAt: null, - lastVersion: null, - hasManyPublishers: false, - hasReceivedUpdateInOneYear: true, - homepage: null, - author: null, - publishers: [], - maintainers: [] - } - }; - } -} - -Dependency.currentId = 1; - -module.exports = Dependency; diff --git a/src/httpServer.js b/src/httpServer.js index 08753586..f35baee6 100644 --- a/src/httpServer.js +++ b/src/httpServer.js @@ -1,91 +1,83 @@ -"use strict"; +/* eslint-disable no-sync */ -// Require Node.js Dependencies -const { - createReadStream, accessSync, promises: { readFile }, constants: { R_OK, W_OK } -} = require("fs"); -const { join } = require("path"); -const { pipeline } = require("stream"); +// Import Node.js Dependencies +import fs from "fs"; +import { readFile } from "fs/promises"; +import { join } from "path"; +import { pipeline } from "stream"; -// Require Third-party Dependencies -const send = require("@polka/send-type"); -const kleur = require("kleur"); -const polka = require("polka"); -const sirv = require("sirv"); -const open = require("open"); -const zup = require("zup"); - -// Require Internal Dependencies -const i18n = require("./i18n"); +// Import Third-party Dependencies +import send from "@polka/send-type"; +import kleur from "kleur"; +import polka from "polka"; +import sirv from "sirv"; +import open from "open"; +import zup from "zup"; +import i18n from "@nodesecure/i18n"; +import { getFlags, getFlagFile, getManifest } from "@nodesecure/flags"; // CONSTANTS -const VIEWS = join(__dirname, "..", "views"); -const PUBLIC = join(__dirname, "..", "dist"); -const FLAGS = require("../flags/manifest.json"); -const flagsTitle = new Set(Object.values(FLAGS).map((flagDescriptor) => flagDescriptor.title)); +const kNodeSecureFlags = getFlags(); +const kProjectRootDir = join(__dirname, ".."); -async function startHTTPServer(dataFilePath, configPort) { - accessSync(dataFilePath, R_OK | W_OK); - // Create HTTP Server and apply required middlewares! - const httpServer = polka(); - httpServer.use(sirv(PUBLIC, { dev: true })); +export async function startHTTPServer(dataFilePath, configPort) { + fs.accessSync(dataFilePath, fs.constants.R_OK | fs.constants.W_OK); - httpServer.get("/", async(req, res) => { - try { - res.writeHead(200, { - "Content-Type": "text/html" - }); - const HTMLStr = await readFile(join(VIEWS, "index.html"), "utf-8"); - const templateStr = zup(HTMLStr)({ - lang: i18n.getToken("lang"), - token: (tokenName) => i18n.getToken(`ui.${tokenName}`) - }); - res.end(templateStr); - } - catch (err) { - /* istanbul ignore next */ - send(res, 500, { error: err.message }); - } - }); + const httpServer = polka(); + httpServer.use(sirv(join(kProjectRootDir, "dist"), { dev: true })); - httpServer.get("/data", (req, res) => { - res.writeHead(200, { "Content-Type": "application/json" }); - pipeline(createReadStream(dataFilePath), res, (err) => { - /* istanbul ignore next */ - if (err) { - console.error(err); - } - }); - }); + httpServer.get("/", async(req, res) => { + try { + res.writeHead(200, { + "Content-Type": "text/html" + }); - httpServer.get("/flags", (req, res) => send(res, 200, FLAGS)); - httpServer.get("/flags/description/:title", (req, res) => { - if (req.params.title !== "isDuplicate" && !flagsTitle.has(req.params.title)) { - return send(res, 404, { error: "Not Found" }); - } + const HTMLStr = await readFile(join(kProjectRootDir, "views", "index.html"), "utf-8"); + const templateStr = zup(HTMLStr)({ + lang: i18n.getToken("lang"), + token: (tokenName) => i18n.getToken(`ui.${tokenName}`) + }); - res.writeHead(200, { "Content-Type": "text/html" }); - const flagDescription = join(__dirname, `../flags/${req.params.title}.html`); + res.end(templateStr); + } + catch (err) { + send(res, 500, { error: err.message }); + } + }); - return pipeline(createReadStream(flagDescription), res, (err) => { - /* istanbul ignore next */ - if (err) { - console.error(err); - } - }); + httpServer.get("/data", (req, res) => { + res.writeHead(200, { "Content-Type": "application/json" }); + pipeline(fs.createReadStream(dataFilePath), res, (err) => { + if (err) { + console.error(err); + } }); + }); + + httpServer.get("/flags", (req, res) => send(res, 200, getManifest())); + httpServer.get("/flags/description/:title", (req, res) => { + if (req.params.title !== "isDuplicate" && !kNodeSecureFlags.has(req.params.title)) { + return send(res, 404, { error: "Not Found" }); + } - /* istanbul ignore next */ - httpServer.listen(typeof configPort === "number" ? configPort : 0, () => { - const link = `http://localhost:${httpServer.server.address().port}`; - console.log(kleur.magenta().bold(i18n.getToken("cli.http_server_started")), kleur.cyan().bold(link)); - /* istanbul ignore next */ - if (typeof configPort === "undefined") { - open(link); - } + res.writeHead(200, { "Content-Type": "text/html" }); + + return pipeline(getFlagFile(req.params.title), res, (err) => { + if (err) { + console.error(err); + } }); + }); - return httpServer; -} + /* istanbul ignore next */ + httpServer.listen(typeof configPort === "number" ? configPort : 0, () => { + const link = `http://localhost:${httpServer.server.address().port}`; + console.log(kleur.magenta().bold(i18n.getToken("cli.http_server_started")), kleur.cyan().bold(link)); -module.exports = startHTTPServer; + if (typeof configPort === "undefined") { + open(link); + } + }); + + return httpServer; +} diff --git a/src/i18n.js b/src/i18n.js deleted file mode 100644 index 8fc5ae8b..00000000 --- a/src/i18n.js +++ /dev/null @@ -1,70 +0,0 @@ -/* eslint-disable global-require */ -"use strict"; - -// Require Node.js Dependencies -const os = require("os"); -const { join } = require("path"); - -// Require Third-party Depedencies -const cacache = require("cacache"); -const get = require("lodash.get"); - -// CONSTANTS -const kCachePath = join(os.tmpdir(), "nsecure-cli"); -const kDefaultLanguage = "english"; - -// VARS -const TOKENS = { - english: require("../i18n/english.js"), - french: require("../i18n/french.js") -}; -const CONSTANTS = Object.seal({ - CACHE_PATH: kCachePath, - LANG_UPDATED: true, - CURRENT_LANG: kDefaultLanguage -}); - -function getLocalLang() { - if (CONSTANTS.LANG_UPDATED) { - try { - const { data } = cacache.get.sync(kCachePath, "cli-lang"); - CONSTANTS.CURRENT_LANG = data.toString(); - } - catch (error) { - cacache.put(kCachePath, "cli-lang", kDefaultLanguage); - CONSTANTS.CURRENT_LANG = kDefaultLanguage; - } - CONSTANTS.LANG_UPDATED = false; - } - - return CONSTANTS.CURRENT_LANG; -} - -async function setLocalLang(selectedLang) { - await cacache.put(kCachePath, "cli-lang", selectedLang); -} - -function getToken(token, ...params) { - if (typeof token !== "string") { - throw new TypeError("token must be a string"); - } - - const lang = getLocalLang(); - if (!Reflect.has(TOKENS, lang)) { - throw new Error(`Invalid i18n lang -> ${lang}`); - } - - const langToken = get(TOKENS[lang], token); - if (typeof langToken === "undefined" || langToken === null) { - throw new Error(`Invalid i18n token -> ${token} for lang -> ${lang}`); - } - - return params.length === 0 ? langToken : langToken(...params); -} - -module.exports = { - getToken, - getLocalLang, - setLocalLang, - CONSTANTS -}; diff --git a/src/tarball.js b/src/tarball.js deleted file mode 100644 index 14fb6225..00000000 --- a/src/tarball.js +++ /dev/null @@ -1,218 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const { join, extname, dirname } = require("path"); -const fs = require("fs").promises; -const os = require("os"); -const { promisify } = require("util"); - -// Require Third-party Dependencies -const difference = require("lodash.difference"); -const isMinified = require("is-minified-code"); -const pacote = require("pacote"); -const ntlp = require("ntlp"); -const builtins = require("builtins"); -const { runASTAnalysis } = require("js-x-ray"); - -// Require Internal Dependencies -const { - getTarballComposition, isSensitiveFile, getPackageName, constants -} = require("./utils"); - -// VARS -const nextTick = promisify(setImmediate); - -// CONSTANTS -const DIRECT_PATH = new Set([".", "..", "./", "../"]); -const NATIVE_CODE_EXTENSIONS = new Set([".gyp", ".c", ".cpp", ".node", ".so", ".h"]); -const NATIVE_NPM_PACKAGES = new Set(["node-gyp", "node-pre-gyp", "node-gyp-build", "node-addon-api"]); -const NODE_CORE_LIBS = new Set(builtins()); - -async function readTarballManifest(dest, ref) { - try { - const packageStr = await fs.readFile(join(dest, "package.json"), "utf-8"); - const { - description = "", author = {}, scripts = {}, dependencies = {}, devDependencies = {}, gypfile = false - } = JSON.parse(packageStr); - - ref.description = description; - ref.author = author; - ref.flags.hasScript = [...Object.keys(scripts)] - .some((value) => constants.NPM_SCRIPTS.has(value.toLowerCase())); - - return { - packageDeps: [...Object.keys(dependencies)], - packageDevDeps: Object.keys(devDependencies), - packageGyp: gypfile - }; - } - catch { - ref.flags.hasManifest = false; - - return { packageDeps: null, packageDevDeps: [], packageGyp: false }; - } -} - -async function executeJSXRayAnalysisOnFile(dest, file, options) { - const { name, ref } = options; - - try { - const str = await fs.readFile(join(dest, file), "utf-8"); - const isMin = file.includes(".min") || isMinified(str); - - const ASTAnalysis = runASTAnalysis(str, { isMinified: isMin }); - ASTAnalysis.dependencies.removeByName(name); - - const dependencies = []; - const filesDependencies = []; - for (const depName of ASTAnalysis.dependencies) { - if (depName.startsWith(".")) { - const indexName = DIRECT_PATH.has(depName) ? join(depName, "index.js") : join(dirname(file), depName); - filesDependencies.push(indexName); - } - else { - dependencies.push(depName); - } - } - const inTryDeps = [...ASTAnalysis.dependencies.getDependenciesInTryStatement()]; - - if (!ASTAnalysis.isOneLineRequire && isMin) { - ref.composition.minified.push(file); - } - ref.warnings.push(...ASTAnalysis.warnings.map((curr) => Object.assign({}, curr, { file }))); - - return { inTryDeps, dependencies, filesDependencies }; - } - catch (error) { - if (!("code" in error)) { - ref.warnings.push({ file, kind: "parsing-error", value: error.message, location: [[0, 0], [0, 0]] }); - } - - return null; - } -} - -async function analyzeDirOrArchiveOnDisk(name, version, options) { - const { ref, tmpLocation, tarballLocker } = options; - - const isNpmTarball = !(tmpLocation === null); - const dest = isNpmTarball ? join(tmpLocation, `${name}@${version}`) : process.cwd(); - const free = await tarballLocker.acquireOne(); - - try { - // If this is an NPM tarball then we extract it on the disk with pacote. - if (isNpmTarball) { - await pacote.extract(ref.flags.includes("isGit") ? ref.gitUrl : `${name}@${version}`, dest, { - ...constants.NPM_TOKEN, registry: constants.DEFAULT_REGISTRY_ADDR, cache: `${os.homedir()}/.npm` - }); - await nextTick(); - } - - // Read the package.json at the root of the directory or archive. - const { packageDeps, packageDevDeps, packageGyp } = await readTarballManifest(dest, ref); - - // Get the composition of the (extracted) directory - const { ext, files, size } = await getTarballComposition(dest); - ref.size = size; - ref.composition.extensions.push(...ext); - ref.composition.files.push(...files); - if (files.some((path) => isSensitiveFile(path))) { - ref.flags.push("hasBannedFile"); - } - - // Search for minified and runtime dependencies - // Run a JS-X-Ray analysis on each JavaScript files of the project! - const [dependencies, filesDependencies, inTryDeps] = [new Set(), new Set(), new Set()]; - const fileAnalysisResults = await Promise.all( - files - .filter((name) => constants.EXT_JS.has(extname(name))) - .map((file) => executeJSXRayAnalysisOnFile(dest, file, { name, ref })) - ); - - for (const result of fileAnalysisResults.filter((row) => row !== null)) { - result.inTryDeps.forEach((dep) => inTryDeps.add(dep)); - result.dependencies.forEach((dep) => dependencies.add(dep)); - result.filesDependencies.forEach((dep) => filesDependencies.add(dep)); - } - - // Search for native code - { - const hasNativeFile = files.some((file) => NATIVE_CODE_EXTENSIONS.has(extname(file))); - const hasNativePackage = hasNativeFile ? null : [ - ...new Set([...packageDevDeps, ...(packageDeps || [])]) - ].some((pkg) => NATIVE_NPM_PACKAGES.has(pkg)); - - if (hasNativeFile || hasNativePackage || packageGyp) { - ref.flags.push("hasNativeCode"); - } - } - - if (ref.warnings.length > 0 && !ref.flags.includes("hasWarnings")) { - ref.flags.push("hasWarnings"); - } - const required = [...dependencies]; - - if (packageDeps !== null) { - const thirdPartyDependencies = required - .map((name) => (packageDeps.includes(name) ? name : getPackageName(name))) - .filter((name) => !name.startsWith(".")) - .filter((name) => !NODE_CORE_LIBS.has(name)) - .filter((name) => !packageDevDeps.includes(name)) - .filter((name) => !inTryDeps.has(name)); - ref.composition.required_thirdparty = thirdPartyDependencies; - - const unusedDeps = difference( - packageDeps.filter((name) => !name.startsWith("@types")), thirdPartyDependencies); - const missingDeps = new Set(difference(thirdPartyDependencies, packageDeps)); - - if (unusedDeps.length > 0 || missingDeps.length > 0) { - ref.flags.push("hasMissingOrUnusedDependency"); - } - ref.composition.unused.push(...unusedDeps); - ref.composition.missing.push(...missingDeps); - } - - ref.composition.required_files = [...filesDependencies] - .filter((depName) => depName.trim() !== "") - // .map((depName) => { - // return files.includes(depName) ? depName : join(depName, "index.js"); - // }) - .map((depName) => (extname(depName) === "" ? `${depName}.js` : depName)); - ref.composition.required_nodejs = required.filter((name) => NODE_CORE_LIBS.has(name)); - - if (ref.composition.minified.length > 0) { - ref.flags.push("hasMinifiedCode"); - } - - const hasExternalCapacity = ref.composition.required_nodejs - .some((depName) => constants.EXT_DEPS.has(depName)); - if (hasExternalCapacity) { - ref.flags.push("hasExternalCapacity"); - } - - // License - await nextTick(); - const licenses = await ntlp(dest); - - const uniqueLicenseIds = Array.isArray(licenses.uniqueLicenseIds) ? licenses.uniqueLicenseIds : []; - if (uniqueLicenseIds.length === 0) { - ref.flags.push("hasNoLicense"); - } - if (licenses.hasMultipleLicenses) { - ref.flags.push("hasMultipleLicenses"); - } - - ref.license = licenses; - ref.license.uniqueLicenseIds = uniqueLicenseIds; - } - catch (err) { - // Ignore - } - finally { - free(); - } -} - -module.exports = { - analyzeDirOrArchiveOnDisk -}; diff --git a/src/utils.js b/src/utils.js index 1c214b65..0023745b 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,252 +1,11 @@ -/** - * @namespace Utils - */ -"use strict"; +export function formatBytes(bytes, decimals) { + if (bytes === 0) { + return "0 B"; + } + const dm = decimals <= 0 ? 0 : decimals || 2; + const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + const id = Math.floor(Math.log(bytes) / Math.log(1024)); -// Require Node.js Dependencies -const os = require("os"); -const { extname, join, relative, basename } = require("path"); -const { spawnSync } = require("child_process"); -const { - existsSync, readFileSync, writeFileSync, - promises: { stat, opendir, readFile, rmdir, rm } -} = require("fs"); - -// SYMBOLS -const SYM_FILE = Symbol("symTypeFile"); -const SYM_DIR = Symbol("symTypeDir"); - -// CONSTANTS -const EXCLUDE_DIRS = new Set(["node_modules", ".vscode", ".git"]); -const SENSITIVE_FILES = new Set([".npmrc", ".env"]); -const SENSITIVE_EXT = new Set([".key", ".pem"]); -const REGISTRY_DEFAULT_ADDR = "https://registry.npmjs.org/"; - -// VARS -let localNPMRegistry = null; - -async function* getFilesRecursive(dir) { - const dirents = await opendir(dir); - - for await (const dirent of dirents) { - if (EXCLUDE_DIRS.has(dirent.name)) { - continue; - } - - if (dirent.isFile()) { - yield [SYM_FILE, join(dir, dirent.name)]; - } - else if (dirent.isDirectory()) { - const fullPath = join(dir, dirent.name); - yield [SYM_DIR, fullPath]; - yield* getFilesRecursive(fullPath); - } - } -} - -async function getTarballComposition(tarballDir) { - const ext = new Set(); - const files = []; - const dirs = []; - let { size } = await stat(tarballDir); - - for await (const [kind, file] of getFilesRecursive(tarballDir)) { - switch (kind) { - case SYM_FILE: - ext.add(extname(file)); - files.push(file); - break; - case SYM_DIR: - dirs.push(file); - break; - } - } - - try { - const sizeAll = await Promise.all([ - ...files.map((file) => stat(file)), - ...dirs.map((file) => stat(file)) - ]); - size += sizeAll.reduce((prev, curr) => prev + curr.size, 0); - } - catch (err) { - // ignore - } - - return { - ext, - size, - files: files.map((path) => relative(tarballDir, path)).sort() - }; -} - -function mergeDependencies(manifest, types = ["dependencies"]) { - const dependencies = new Map(); - const customResolvers = new Map(); - - for (const fieldName of types) { - if (!Reflect.has(manifest, fieldName)) { - continue; - } - const dep = manifest[fieldName]; - - for (const [name, version] of Object.entries(dep)) { - // Version can be file:, github:, git+, ./... - if (/^([a-zA-Z]+:|git\+|\.\\)/.test(version)) { - customResolvers.set(name, version); - continue; - } - - dependencies.set(name, version); - } - } - - return { dependencies, customResolvers }; -} - -function cleanRange(version) { - // TODO: how do we handle complicated range like pkg-name@1 || 2 or pkg-name@2.1.2 < 3 - const firstChar = version.charAt(0); - if (firstChar === "^" || firstChar === "<" || firstChar === ">" || firstChar === "=" || firstChar === "~") { - return version.slice(version.charAt(1) === "=" ? 2 : 1); - } - - return version; -} - -function getRegistryURL(force = false) { - if (localNPMRegistry !== null && !force) { - return localNPMRegistry; - } - - try { - const stdout = spawnSync( - `npm${process.platform === "win32" ? ".cmd" : ""}`, ["config", "get", "registry"]).stdout.toString(); - localNPMRegistry = stdout.trim() === "" ? REGISTRY_DEFAULT_ADDR : stdout.trim(); - - return localNPMRegistry; - } - catch (error) { - /* istanbul ignore next */ - return REGISTRY_DEFAULT_ADDR; - } -} - -function loadNsecureCache(defaultPayload = Object.create(null)) { - const filePath = join(os.tmpdir(), "nsecure-cache.json"); - - if (existsSync(filePath)) { - const buf = readFileSync(filePath); - - return JSON.parse(buf.toString()); - } - - const payload = Object.assign({}, JSON.parse(JSON.stringify(defaultPayload)), { - lastUpdated: Date.now() - (3600000 * 48) - }); - writeFileSync(filePath, JSON.stringify(payload)); - - return payload; -} - -function writeNsecureCache() { - const filePath = join(os.tmpdir(), "nsecure-cache.json"); - - const payload = { - lastUpdated: Date.now() - }; - writeFileSync(filePath, JSON.stringify(payload)); -} - -function taggedString(chaines, ...cles) { - return function cur(...valeurs) { - const dict = valeurs[valeurs.length - 1] || {}; - const resultat = [chaines[0]]; - cles.forEach((cle, index) => { - resultat.push( - typeof cle === "number" ? valeurs[cle] : dict[cle], - chaines[index + 1] - ); - }); - - return resultat.join(""); - }; + return parseFloat((bytes / Math.pow(1024, id)).toFixed(dm)) + " " + sizes[id]; } - -function isSensitiveFile(fileName) { - if (SENSITIVE_FILES.has(basename(fileName))) { - return true; - } - - return SENSITIVE_EXT.has(extname(fileName)); -} - -function getPackageName(name) { - const parts = name.split("/"); - - return name.startsWith("@") ? `${parts[0]}/${parts[1]}` : parts[0]; -} - -function formatBytes(bytes, decimals) { - if (bytes === 0) { - return "0 B"; - } - const dm = decimals <= 0 ? 0 : decimals || 2; - const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; - const id = Math.floor(Math.log(bytes) / Math.log(1024)); - - return parseFloat((bytes / Math.pow(1024, id)).toFixed(dm)) + " " + sizes[id]; -} - -function* deepReadPackageLock(dependencies) { - for (const [depName, infos] of Object.entries(dependencies)) { - if (!infos.dev) { - yield [depName, infos]; - if (Reflect.has(infos, "dependencies")) { - yield* deepReadPackageLock(infos.dependencies); - } - } - } -} - -async function* readPackageLock(filePath = join(process.cwd(), "package-lock.json")) { - const buf = await readFile(filePath); - const { dependencies = {} } = JSON.parse(buf.toString()); - - yield* deepReadPackageLock(dependencies); -} - -function recursiveRmdir(dirPath) { - // Prefer the non-deprecated `fs.rm` where available. - if (typeof rm === "function") { - return rm(dirPath, { recursive: true, force: true }); - } - - return rmdir(dirPath, { recursive: true }); -} - -module.exports = Object.freeze({ - readPackageLock, - formatBytes, - getPackageName, - isSensitiveFile, - loadNsecureCache, - writeNsecureCache, - getFilesRecursive, - getTarballComposition, - mergeDependencies, - cleanRange, - taggedString, - getRegistryURL, - recursiveRmdir, - constants: Object.freeze({ - DEFAULT_REGISTRY_ADDR: getRegistryURL(), - NPM_TOKEN: typeof process.env.NODE_SECURE_TOKEN === "string" ? { token: process.env.NODE_SECURE_TOKEN } : {}, - FILE: SYM_FILE, - DIRECTORY: SYM_DIR, - NPM_SCRIPTS: new Set(["preinstall", "postinstall", "preuninstall", "postuninstall"]), - EXT_DEPS: new Set(["http", "https", "net", "http2", "dgram", "child_process"]), - EXT_JS: new Set([".js", ".mjs", ".cjs"]) - }) -}); diff --git a/src/vulnerabilities/strategies.js b/src/vulnerabilities/strategies.js deleted file mode 100644 index 6fa23ebe..00000000 --- a/src/vulnerabilities/strategies.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -const VULN_MODE_DB_SECURITY_WG = "node"; -const VULN_MODE_NPM_AUDIT = "npm"; - -module.exports = { - VULN_MODE_DB_SECURITY_WG, - VULN_MODE_NPM_AUDIT -}; diff --git a/src/vulnerabilities/strategies/npm-audit.js b/src/vulnerabilities/strategies/npm-audit.js deleted file mode 100644 index 3000f05a..00000000 --- a/src/vulnerabilities/strategies/npm-audit.js +++ /dev/null @@ -1,63 +0,0 @@ -/* eslint-disable class-methods-use-this */ -"use strict"; - -// Require Third-party Dependencies -const Arborist = require("@npmcli/arborist"); - -// CONSTANTS -const { constants } = require("../../utils"); -const { VULN_MODE_NPM_AUDIT } = require("../strategies"); - - -function NPMAuditStrategy() { - return { - type: VULN_MODE_NPM_AUDIT, - hydrateNodeSecurePayload - }; -} - -async function hydrateNodeSecurePayload(dependencies) { - const arborist = new Arborist({ ...constants.NPM_TOKEN, registry: constants.DEFAULT_REGISTRY_ADDR }); - - try { - const { vulnerabilities } = (await arborist.audit()).toJSON(); - - Object.keys(vulnerabilities).forEach((packageName) => { - const packageVulnerabilities = extractPackageVulnsFromSource(vulnerabilities[packageName]); - const dependenciesVulnerabilities = dependencies.get(packageName).vulnerabilities; - - dependenciesVulnerabilities.push(packageVulnerabilities); - }); - } - // eslint-disable-next-line no-empty - catch {} -} - -function extractPackageVulnsFromSource(packageVulnerabilities) { - const vulnerabilitiesFromSource = []; - const { via: vulnSources } = packageVulnerabilities; - - for (const vulnSource of vulnSources) { - const { - title, range, id, - module_name: name, - severity, version, - vulnerableVersions - } = vulnSource; - - const vulnerability = { - title, - module_name: name, - severity, version, - vulnerableVersions, - range, - id - }; - vulnerabilitiesFromSource.push(vulnerability); - } - - return vulnerabilitiesFromSource; -} - - -module.exports = { NPMAuditStrategy }; diff --git a/src/vulnerabilities/strategies/security-wg.js b/src/vulnerabilities/strategies/security-wg.js deleted file mode 100644 index bd7a26eb..00000000 --- a/src/vulnerabilities/strategies/security-wg.js +++ /dev/null @@ -1,139 +0,0 @@ -/* eslint-disable class-methods-use-this */ -"use strict"; - -// Require Node.js Dependencies -const { join, extname } = require("path"); -const { - unlinkSync, - promises: { readdir, readFile, writeFile } -} = require("fs"); - -// Require Third-party Dependencies -const download = require("@slimio/github"); -const semver = require("semver"); - -// Require Internal Dependencies -const { recursiveRmdir, loadNsecureCache, writeNsecureCache } = require("../../utils"); - -// CONSTANTS -const LOCAL_CACHE = loadNsecureCache(); -const ONE_DAY = 3600000 * 24; -const REPO = "nodejs.security-wg"; -const VULN_DIR_PATH = join("vuln", "npm"); -const VULN_FILE_PATH = join(__dirname, "..", "..", "vuln.json"); -const { VULN_MODE_DB_SECURITY_WG } = require("../strategies"); - -async function SecurityWGStrategy({ sideEffects = true }) { - if (sideEffects) { - try { - await checkHydrateDB(); - } - // eslint-disable-next-line no-empty - catch {} - } - - return { - type: VULN_MODE_DB_SECURITY_WG, - hydrateNodeSecurePayload, - hydrateDB, - deleteDB - }; -} - -async function checkHydrateDB() { - const ts = Math.abs(Date.now() - LOCAL_CACHE.lastUpdated); - - if (ts > ONE_DAY) { - deleteDB(); - await hydrateDB(); - writeNsecureCache(); - } -} - - -async function readVulnJSONFile(path) { - try { - const buf = await readFile(path); - - return JSON.parse(buf.toString()); - } - catch (err) { - /* istanbul ignore next */ - return null; - } -} - -async function hydrateNodeSecurePayload(flattenedDeps) { - try { - const buf = await readFile(VULN_FILE_PATH); - const vulnerabilities = JSON.parse(buf.toString()); - - const currThreeNames = new Set([...flattenedDeps.keys()]); - const filtered = new Set( - Object.keys(vulnerabilities).filter((name) => currThreeNames.has(name)) - ); - - for (const name of filtered) { - const dep = flattenedDeps.get(name); - const detectedVulnerabilities = []; - for (const currVuln of vulnerabilities[name]) { - // eslint-disable-next-line no-loop-func - const satisfied = dep.versions.some((version) => semver.satisfies(version, currVuln.vulnerable_versions)); - if (satisfied) { - detectedVulnerabilities.push(currVuln); - } - } - - if (detectedVulnerabilities.length > 0) { - dep.vulnerabilities = detectedVulnerabilities; - } - } - } - catch (err) { - // Ignore - } -} - -async function hydrateDB() { - const location = await download(REPO, { extract: true }); - const vulnPath = join(location, VULN_DIR_PATH); - - try { - const jsonFiles = (await readdir(vulnPath)) - .filter((name) => extname(name) === ".json") - .map((name) => join(vulnPath, name)); - - const vulnerabilities = await Promise.all( - jsonFiles.map((path) => readVulnJSONFile(path)) - ); - - const payload = new Map(); - for (const row of vulnerabilities) { - const packageName = row.module_name; - if (payload.has(packageName)) { - payload.get(packageName).push(row); - } - else { - payload.set(packageName, [row]); - } - } - - const data = JSON.stringify(Object.fromEntries(payload)); - await writeFile(VULN_FILE_PATH, data); - } - finally { - await recursiveRmdir(location); - } -} - -function deleteDB() { - try { - unlinkSync(VULN_FILE_PATH); - } - catch (err) { - // ignore - } -} - - -module.exports = { SecurityWGStrategy, checkHydrateDB }; diff --git a/src/vulnerabilities/vulnerabilitySource.js b/src/vulnerabilities/vulnerabilitySource.js deleted file mode 100644 index 76c2cb39..00000000 --- a/src/vulnerabilities/vulnerabilitySource.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; - -const { VULN_MODE_DB_SECURITY_WG, VULN_MODE_NPM_AUDIT } = require("./strategies"); -const { NPMAuditStrategy } = require("./strategies/npm-audit"); -const { SecurityWGStrategy } = require("./strategies/security-wg"); - -let strategy; - -async function setVulnerabilityStrategy(newStrategy = VULN_MODE_DB_SECURITY_WG, options = {}) { - strategy = await initVulnerabilityStrategy(newStrategy, options); - - return strategy; -} - -async function getVulnerabilityStrategy() { - if (!strategy) { - const initializedStrategy = await setVulnerabilityStrategy(VULN_MODE_DB_SECURITY_WG); - - return initializedStrategy; - } - - return strategy; -} - -async function initVulnerabilityStrategy(strategy, options) { - switch (strategy) { - case VULN_MODE_DB_SECURITY_WG: - return Object.seal(await SecurityWGStrategy(options)); - - case VULN_MODE_NPM_AUDIT: - return Object.seal(NPMAuditStrategy()); - - default: - return Object.seal(await SecurityWGStrategy(options)); - } -} - - -module.exports = { setVulnerabilityStrategy, getVulnerabilityStrategy }; diff --git a/src/warnings.js b/src/warnings.js deleted file mode 100644 index 8db26b99..00000000 --- a/src/warnings.js +++ /dev/null @@ -1,31 +0,0 @@ -/* eslint-disable max-len */ -"use strict"; - -// Require Third-party Dependencies -const { taggedString } = require("./utils"); -const i18n = require("./i18n"); - -// CONSTANTS -const kDetectedDep = taggedString`The dependency '${0}' has been detected in the dependency Tree.`; -const kWarningsMessages = Object.freeze({ - "@scarf/scarf": i18n.getToken("warnings.disable_scarf"), - iohook: i18n.getToken("warnings.keylogging") -}); -const kPackages = new Set(Object.keys(kWarningsMessages)); - -function getWarning(depName) { - return `${kDetectedDep(depName)} ${kWarningsMessages[depName]}`; -} - -function applyWarnings(dependencies) { - const warnings = []; - for (const depName of kPackages) { - if (dependencies.has(depName)) { - warnings.push(getWarning(depName)); - } - } - - return warnings; -} - -module.exports = applyWarnings; diff --git a/test/__snapshots__/depWalker.js.snap b/test/__snapshots__/depWalker.js.snap deleted file mode 100644 index 08d02013..00000000 --- a/test/__snapshots__/depWalker.js.snap +++ /dev/null @@ -1,120 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`execute depWalker on @slimio/is 1`] = ` -Object { - "@slimio/is": Object { - "1.5.1": Object { - "author": "SlimIO", - "composition": Object { - "extensions": Array [ - "", - ".js", - ".json", - ".md", - ".toml", - ".ts", - ], - "minified": Array [], - "missing": Array [], - "required_nodejs": Array [], - "required_thirdparty": Array [], - "unused": Array [], - }, - "description": "SlimIO is (JavaScript Primitives & Objects type checker)", - "flags": Array [], - "gitUrl": null, - "id": 0, - "license": Object { - "hasMultipleLicenses": false, - "licenses": Array [ - Object { - "from": "package.json", - "spdx": Object { - "fsf": true, - "fsfAndOsi": true, - "includesDeprecated": false, - "osi": true, - }, - "spdxLicenseLinks": Array [ - "https://spdx.org/licenses/MIT.html#licenseText", - ], - "uniqueLicenseIds": Array [ - "MIT", - ], - }, - Object { - "from": "LICENSE", - "spdx": Object { - "fsf": true, - "fsfAndOsi": true, - "includesDeprecated": false, - "osi": true, - }, - "spdxLicenseLinks": Array [ - "https://spdx.org/licenses/MIT.html#licenseText", - ], - "uniqueLicenseIds": Array [ - "MIT", - ], - }, - ], - "uniqueLicenseIds": Array [ - "MIT", - ], - }, - "usedBy": Object {}, - "warnings": Array [], - }, - "metadata": Object { - "author": "SlimIO", - "dependencyCount": 0, - "hasManyPublishers": true, - "hasReceivedUpdateInOneYear": false, - "homepage": "https://github.com/SlimIO/is#readme", - "lastUpdateAt": "2019-06-11T06:41:41.590Z", - "lastVersion": "1.5.1", - "maintainers": Array [ - Object { - "email": "mickael.croquet@laposte.net", - "name": "mcroquet", - }, - Object { - "email": "sebastien48criquet@gmail.com", - "name": "ahkrin", - }, - Object { - "email": "gentilhomme.thomas@gmail.com", - "name": "fraxken", - }, - Object { - "email": "alexandre.malaj@gmail.com", - "name": "alexandre.malaj", - }, - ], - "publishedCount": 7, - "publishers": Array [ - Object { - "at": "2018-09-22T20:36:27.523Z", - "name": "fraxken", - "version": "1.0.0", - }, - ], - }, - "versions": Array [ - "1.5.1", - ], - "vulnerabilities": Array [], - }, -} -`; - -exports[`fetch payload of pacote on the npm registry 1`] = ` -Array [ - "id", - "rootDepencyName", - "warnings", - "dependencies", - "version", - "vulnerabilityStrategy", -] -`; diff --git a/test/__snapshots__/httpServer.js.snap b/test/__snapshots__/httpServer.js.snap deleted file mode 100644 index 6e24edc4..00000000 --- a/test/__snapshots__/httpServer.js.snap +++ /dev/null @@ -1,80 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`'/data' should return the fixture payload we expect 1`] = ` -Object { - "foo": "bar", -} -`; - -exports[`'/flags' should return the flags list as JSON 1`] = ` -Object { - "⌚️": Object { - "title": "isOutdated", - "tooltipDescription": "The current package version is not equal to the package latest version!", - }, - "☁️": Object { - "title": "isGit", - "tooltipDescription": "The package (project) is a git repository", - }, - "⚔️": Object { - "title": "hasBannedFile", - "tooltipDescription": "The project has at least one sensitive file.", - }, - "⚠": Object { - "title": "hasWarnings", - "tooltipDescription": "The AST analysis has detected warnings (suspect import, unsafe regex ..)", - }, - "⛔️": Object { - "title": "isDeprecated", - "tooltipDescription": "The package is deprecated.", - }, - "🌍": Object { - "title": "hasExternalCapacity", - "tooltipDescription": "The package use at least one Node.js dependency capable to communicate outside or to establish a listening server.", - }, - "🌲": Object { - "title": "hasIndirectDependencies", - "tooltipDescription": "The package have indirect dependencies.", - }, - "🐲": Object { - "title": "hasNativeCode", - "tooltipDescription": "The package use native components (package, file, configuration).", - }, - "👀": Object { - "title": "hasMissingOrUnusedDependency", - "tooltipDescription": "A dependency is missing in package.json or a dependency is installed but never used!", - }, - "👥": Object { - "title": "hasManyPublishers", - "tooltipDescription": "The package has several publishers.", - }, - "💀": Object { - "title": "isDead", - "tooltipDescription": "The dependency has not received update from at least one year!", - }, - "💎": Object { - "title": "hasCustomResolver", - "tooltipDescription": "The package has dependencies that are not packages.", - }, - "📚": Object { - "title": "hasMultipleLicenses", - "tooltipDescription": "The package has multiple licenses in multiple files", - }, - "📜": Object { - "title": "hasNoLicense", - "tooltipDescription": "The package does not seem to have a license.", - }, - "📦": Object { - "title": "hasScript", - "tooltipDescription": "has \`post\` and/or \`pre\` (un)install npm script", - }, - "🔬": Object { - "title": "hasMinifiedCode", - "tooltipDescription": "The package seems to have files that are minified/uglified.", - }, - "🚨": Object { - "title": "vulnerabilities", - "tooltipDescription": "The package have one or many vulnerabilities.", - }, -} -`; diff --git a/test/depWalker.js b/test/depWalker.js deleted file mode 100644 index d8f8ff28..00000000 --- a/test/depWalker.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const { join } = require("path"); - -// Require Internal Dependencies -const { depWalker } = require("../src/depWalker"); -const { from } = require("../"); - -// CONSTANTS -const FIXTURE_PATH = join(__dirname, "fixtures/depWalker"); - -// JSON PAYLOADS -const is = require(join(FIXTURE_PATH, "slimio.is.json")); -const config = require(join(FIXTURE_PATH, "slimio.config.json")); - -function cleanupPayload(payload) { - for (const pkg of Object.values(payload)) { - for (const versionName of pkg.versions) { - pkg[versionName].composition.extensions.sort(); - delete pkg[versionName].size; - delete pkg[versionName].composition.files; - delete pkg[versionName].composition.required_files; - } - } -} - -test("execute depWalker on @slimio/is", async() => { - const result = await depWalker(is, { verbose: false }); - const resultAsJSON = JSON.parse(JSON.stringify(result.dependencies, null, 2)); - cleanupPayload(resultAsJSON); - - expect(resultAsJSON).toMatchSnapshot(); -}); - -test("execute depWalker on @slimio/config", async() => { - const result = await depWalker(config, { verbose: false }); - const resultAsJSON = JSON.parse(JSON.stringify(result.dependencies, null, 2)); - - const packages = Object.keys(resultAsJSON).sort(); - expect(packages).toEqual([ - "lodash.clonedeep", - "zen-observable", - "lodash.set", - "lodash.get", - "node-watch", - "fast-deep-equal", - "fast-json-stable-stringify", - "json-schema-traverse", - "punycode", - "uri-js", - "ajv", - "@slimio/is", - "@iarna/toml", - "@slimio/config" - ].sort()); -}); - -test("fetch payload of pacote on the npm registry", async() => { - const result = await from("pacote", { verbose: false, maxDepth: 10 }); - expect(Object.keys(result)).toMatchSnapshot(); -}); diff --git a/test/dependency.js b/test/dependency.js deleted file mode 100644 index 421cb296..00000000 --- a/test/dependency.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; - -// Require Third-party Dependencies -const is = require("@slimio/is"); - -// Require Internal Dependencies -const Dependency = require("../src/dependency.class"); - -test("Dependency class should act as expected by assertions", () => { - expect(is.classObject(Dependency)).toStrictEqual(true); - - const dep = new Dependency("semver", "1.0.0"); - expect(dep.parent).toMatchObject({}); - expect(dep.name).toStrictEqual("semver"); - expect(dep.version).toStrictEqual("1.0.0"); - expect(dep.fullName).toStrictEqual("semver 1.0.0"); - expect(Reflect.ownKeys(dep)).toHaveLength(5); - - const flagOne = dep.flags; - const flagTwo = dep.flags; - expect(flagOne).toMatchObject(flagTwo); - expect(flagOne === flagTwo).toStrictEqual(false); -}); - -test("Dependency children should write his parent as usedBy when exported", () => { - const semverDep = new Dependency("semver", "1.0.0"); - - const testDep = new Dependency("test", "1.0.0", semverDep); - - expect(testDep.parent).toMatchObject({ - [semverDep.name]: semverDep.version - }); - - const flatDep = testDep.exportAsPlainObject(void 0); - expect(flatDep["1.0.0"].usedBy).toMatchObject({ - [semverDep.name]: semverDep.version - }); -}); - -test("Create a GIT Dependency (flags.isGit must be set to true)", () => { - const semverDep = new Dependency("semver", "1.0.0").isGit(); - expect(semverDep.gitUrl).toStrictEqual(null); - const flatSemver = semverDep.exportAsPlainObject(void 0); - expect(flatSemver["1.0.0"].flags.includes("isGit")).toStrictEqual(true); - - const mochaDep = new Dependency("mocha", "1.0.0").isGit("https://github.com/mochajs/mocha"); - expect(mochaDep.gitUrl).toStrictEqual("https://github.com/mochajs/mocha"); - const flatMocha = mochaDep.exportAsPlainObject(void 0); - expect(flatMocha["1.0.0"].flags.includes("isGit")).toStrictEqual(true); -}); diff --git a/test/fixtures/depWalker/slimio.config.json b/test/fixtures/depWalker/slimio.config.json deleted file mode 100644 index 43571c21..00000000 --- a/test/fixtures/depWalker/slimio.config.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@slimio/config", - "version": "0.16.0", - "description": "SlimIO Reactive JSON Config loaded", - "main": "index.js", - "homepage": "https://github.com/SlimIO/Config#readme", - "devDependencies": { - "@commitlint/cli": "^8.3.5", - "@commitlint/config-conventional": "^8.3.4", - "@escommunity/minami": "^1.0.0", - "@slimio/eslint-config": "^4.0.0", - "@slimio/psp": "^0.11.0", - "@types/lodash.clonedeep": "^4.5.6", - "@types/lodash.get": "^4.4.6", - "@types/lodash.set": "^4.3.6", - "@types/zen-observable": "^0.8.0", - "ava": "^3.2.0", - "conventional-changelog-cli": "^2.0.31", - "cross-env": "^7.0.0", - "eslint": "^6.8.0", - "husky": "^4.2.1", - "jsdoc": "^3.6.3", - "nyc": "^15.0.0", - "pkg-ok": "^2.3.1" - }, - "dependencies": { - "@iarna/toml": "^2.2.3", - "@slimio/is": "^1.5.1", - "ajv": "^6.11.0", - "lodash.clonedeep": "^4.5.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "node-watch": "^0.6.3", - "zen-observable": "^0.8.15" - } - } diff --git a/test/fixtures/depWalker/slimio.is.json b/test/fixtures/depWalker/slimio.is.json deleted file mode 100644 index b0901ee4..00000000 --- a/test/fixtures/depWalker/slimio.is.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@slimio/is", - "version": "1.5.1", - "description": "SlimIO is (JavaScript Primitives & Objects type checker)", - "main": "index.js", - "engines": { - "node": ">=10" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/SlimIO/is.git" - }, - "author": "SlimIO", - "license": "MIT", - "bugs": { - "url": "https://github.com/SlimIO/is/issues" - }, - "homepage": "https://github.com/SlimIO/is#readme", - "devDependencies": { - "@commitlint/cli": "^8.0.0", - "@commitlint/config-conventional": "^8.0.0", - "@escommunity/minami": "^1.0.0", - "@slimio/eslint-config": "^2.0.4", - "@slimio/psp": "^0.4.0", - "ava": "^2.1.0", - "cross-env": "^5.2.0", - "eslint": "^5.13.0", - "husky": "^2.4.0", - "jsdoc": "^3.6.2", - "nyc": "^14.1.1", - "pkg-ok": "^2.3.1" - }, - "dependencies": {} - } diff --git a/test/fixtures/getTarballComposition/one/README b/test/fixtures/getTarballComposition/one/README deleted file mode 100644 index e427984d..00000000 --- a/test/fixtures/getTarballComposition/one/README +++ /dev/null @@ -1 +0,0 @@ -HELLO diff --git a/test/fixtures/getTarballComposition/two/empty.txt b/test/fixtures/getTarballComposition/two/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/test/fixtures/getTarballComposition/two/package.json b/test/fixtures/getTarballComposition/two/package.json deleted file mode 100644 index 0967ef42..00000000 --- a/test/fixtures/getTarballComposition/two/package.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/test/fixtures/getTarballComposition/two/two-deep/test.js b/test/fixtures/getTarballComposition/two/two-deep/test.js deleted file mode 100644 index 59b9cbd9..00000000 --- a/test/fixtures/getTarballComposition/two/two-deep/test.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -console.log("hello world"); diff --git a/test/fixtures/httpServer/payload.json b/test/fixtures/httpServer/payload.json deleted file mode 100644 index e63d37b6..00000000 --- a/test/fixtures/httpServer/payload.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "foo": "bar" -} diff --git a/test/fixtures/mergeDependencies/one.json b/test/fixtures/mergeDependencies/one.json deleted file mode 100644 index d298a782..00000000 --- a/test/fixtures/mergeDependencies/one.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "dependencies": { - "semver": "^0.1.0", - "test": "~0.5.0" - }, - "devDependencies": { - "ava": "^1.0.0" - } -} diff --git a/test/fixtures/mergeDependencies/three.json b/test/fixtures/mergeDependencies/three.json deleted file mode 100644 index 0967ef42..00000000 --- a/test/fixtures/mergeDependencies/three.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/test/fixtures/mergeDependencies/two.json b/test/fixtures/mergeDependencies/two.json deleted file mode 100644 index 8cc03258..00000000 --- a/test/fixtures/mergeDependencies/two.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "dependencies": { - "@slimio/is": "^1.4.0", - "custom": "file:\\file.js" - }, - "devDependencies": { - "japa": "~0.1.0" - } -} diff --git a/test/getFilesRecursive.js b/test/getFilesRecursive.js deleted file mode 100644 index f922c76e..00000000 --- a/test/getFilesRecursive.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const { join, relative, normalize } = require("path"); - -// Require Internal Dependencies -const { getFilesRecursive, constants } = require("../src/utils"); - -test("should return all files contained in the project", async() => { - const projectRoot = join(__dirname, ".."); - const files = []; - - for await (const [type, filePath] of getFilesRecursive(projectRoot)) { - if (type !== constants.FILE) { - continue; - } - files.push(relative(projectRoot, filePath)); - } - - const expected = [ - "bin/index.js", - "src/depWalker.js", - "src/httpServer.js", - "src/utils.js" - ].map((path) => normalize(path)); - expect(files).toEqual(expect.arrayContaining(expected)); -}); diff --git a/test/getTarballComposition.js b/test/getTarballComposition.js deleted file mode 100644 index 4f0778fc..00000000 --- a/test/getTarballComposition.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const { join } = require("path"); -const { promisify } = require("util"); - -// Require Third-party Dependencies -const getSize = require("get-folder-size"); - -// Require Internal Dependencies -const { getTarballComposition } = require("../src/utils"); - -// CONSTANTS -const FIXTURE_PATH = join(__dirname, "fixtures/getTarballComposition"); - -// Vars -const directorySize = promisify(getSize); - -test("should return the composition of a directory", async() => { - const composition = await getTarballComposition(FIXTURE_PATH); - const size = await directorySize(FIXTURE_PATH); - - expect(composition).toMatchObject({ - ext: new Set(["", ".js", ".json", ".txt"]), - size - }); - expect(composition.files).toHaveLength(4); - expect(composition.files[0]).toMatch(/one(\/|\\)README/); -}); diff --git a/test/httpServer.js b/test/httpServer.js index fe451208..0806f0c4 100644 --- a/test/httpServer.js +++ b/test/httpServer.js @@ -1,5 +1,3 @@ -"use strict"; - // Require Node.js Dependencies const { readFileSync } = require("fs"); const { join } = require("path"); @@ -24,58 +22,58 @@ const IS_GIT_HTML = readFileSync(join(__dirname, "..", "flags", "isGit.html"), " let httpServer; beforeAll(async() => { - httpServer = await startHTTPServer(JSON_PATH, HTTP_PORT); + httpServer = await startHTTPServer(JSON_PATH, HTTP_PORT); }); afterAll(() => { - httpServer.server.close(); + httpServer.server.close(); }); test("'/' should return index.html HTML content", async() => { - const result = await get(HTTP_URL); + const result = await get(HTTP_URL); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("text/html"); + expect(result.statusCode).toStrictEqual(200); + expect(result.headers["content-type"]).toStrictEqual("text/html"); - const templateStr = zup(INDEX_HTML)({ - lang: i18n.getToken("lang"), - token: (tokenName) => i18n.getToken(`ui.${tokenName}`) - }); - expect(result.data).toStrictEqual(templateStr); + const templateStr = zup(INDEX_HTML)({ + lang: i18n.getToken("lang"), + token: (tokenName) => i18n.getToken(`ui.${tokenName}`) + }); + expect(result.data).toStrictEqual(templateStr); }); test("'/flags' should return the flags list as JSON", async() => { - const result = await get(new URL("/flags", HTTP_URL)); + const result = await get(new URL("/flags", HTTP_URL)); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("application/json;charset=utf-8"); - expect(result.data).toMatchSnapshot(); + expect(result.statusCode).toStrictEqual(200); + expect(result.headers["content-type"]).toStrictEqual("application/json;charset=utf-8"); + expect(result.data).toMatchSnapshot(); }); test("'/flags/description/isGit' should return the isGit HTML description", async() => { - const result = await get(new URL("/flags/description/isGit", HTTP_URL)); + const result = await get(new URL("/flags/description/isGit", HTTP_URL)); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("text/html"); + expect(result.statusCode).toStrictEqual(200); + expect(result.headers["content-type"]).toStrictEqual("text/html"); - expect(result.data).toStrictEqual(IS_GIT_HTML); + expect(result.data).toStrictEqual(IS_GIT_HTML); }); test("'/flags/description/foobar' should return a 404 error", async() => { - expect.assertions(2); - try { - await get(new URL("/flags/description/foobar", HTTP_URL)); - } - catch (error) { - expect(error.statusCode).toStrictEqual(404); - expect(error.data.error).toStrictEqual("Not Found"); - } + expect.assertions(2); + try { + await get(new URL("/flags/description/foobar", HTTP_URL)); + } + catch (error) { + expect(error.statusCode).toStrictEqual(404); + expect(error.data.error).toStrictEqual("Not Found"); + } }); test("'/data' should return the fixture payload we expect", async() => { - const result = await get(new URL("/data", HTTP_URL)); + const result = await get(new URL("/data", HTTP_URL)); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("application/json"); - expect(result.data).toMatchSnapshot(); + expect(result.statusCode).toStrictEqual(200); + expect(result.headers["content-type"]).toStrictEqual("application/json"); + expect(result.data).toMatchSnapshot(); }); diff --git a/test/i18n.js b/test/i18n.js deleted file mode 100644 index 715428eb..00000000 --- a/test/i18n.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const os = require("os"); -const { join } = require("path"); - -// Require Third-party Depedencies -const cacache = require("cacache"); - -// Require Internal Dependencies -const i18n = require("../src/i18n"); - -// CONSTANTS -const kCachePath = join(os.tmpdir(), "nsecure-cli"); - -test("getToken: token must be a string", () => { - expect.assertions(2); - try { - i18n.getToken(10); - } - catch (error) { - expect(error.name).toStrictEqual("TypeError"); - expect(error.message).toStrictEqual("token must be a string"); - } -}); - -test("getToken: invalid token", () => { - expect.assertions(1); - try { - i18n.getToken("boo.foo"); - } - catch (error) { - expect(error.name).toStrictEqual("Error"); - } -}); - -test("getLocalLang: force update on the local lang!", async() => { - await cacache.rm.entry(kCachePath, "cli-lang"); - - i18n.CONSTANTS.LANG_UPDATED = true; - i18n.getLocalLang(); - - expect(i18n.CONSTANTS.LANG_UPDATED).toStrictEqual(false); -}); - - -test("setLocalLang to english", async() => { - await i18n.setLocalLang("english"); -}); diff --git a/test/mergeDependencies.js b/test/mergeDependencies.js deleted file mode 100644 index 67b590c6..00000000 --- a/test/mergeDependencies.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const { join } = require("path"); -const { readFileSync } = require("fs"); - -// Require Third-party Dependencies -const is = require("@slimio/is"); - -// Require Internal Dependencies -const { mergeDependencies } = require("../src/utils"); - -// CONSTANTS -const FIXTURE_PATH = join(__dirname, "fixtures/mergeDependencies"); - -// JSON PAYLOADS -const one = JSON.parse(readFileSync(join(FIXTURE_PATH, "one.json"), "utf-8")); -const two = JSON.parse(readFileSync(join(FIXTURE_PATH, "two.json"), "utf-8")); -const three = JSON.parse(readFileSync(join(FIXTURE_PATH, "three.json"), "utf-8")); - -test("should return the one.json field 'dependencies' merged", () => { - const result = mergeDependencies(one); - - expect(is.plainObject(result)).toStrictEqual(true); - expect(result.dependencies).toMatchObject(new Map([ - ["semver", "^0.1.0"], - ["test", "~0.5.0"] - ])); - expect(result.customResolvers).toMatchObject(new Map()); -}); - -test("should return the one.json field 'dependencies' & 'devDependencies' merged", () => { - const result = mergeDependencies(one, ["dependencies", "devDependencies"]); - - expect(is.plainObject(result)).toStrictEqual(true); - expect(result.dependencies).toMatchObject(new Map([ - ["semver", "^0.1.0"], - ["test", "~0.5.0"], - ["ava", "^1.0.0"] - ])); - expect(result.customResolvers).toMatchObject(new Map()); -}); - -test("should return two.json 'dependencies' & 'devDependencies' merged (with a custom Resolvers)", () => { - const result = mergeDependencies(two, ["dependencies", "devDependencies"]); - const resolvers = new Map([ - ["custom", "file:\\file.js"] - ]); - - expect(is.plainObject(result)).toStrictEqual(true); - expect(result.dependencies).toMatchObject(new Map([ - ["@slimio/is", "^1.4.0"], - ["japa", "~0.1.0"] - ])); - expect(result.customResolvers).toMatchObject(resolvers); -}); - -test("should return no dependencies/customResolvers for three.json", () => { - const result = mergeDependencies(three, ["dependencies", "devDependencies"]); - - expect(is.plainObject(result)).toStrictEqual(true); - expect(result.dependencies.size).toStrictEqual(0); - expect(result.customResolvers.size).toStrictEqual(0); -}); diff --git a/test/utils.js b/test/utils.js deleted file mode 100644 index 204d1490..00000000 --- a/test/utils.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; - -// Require Node.js Dependencies -const { rmdirSync } = require("fs"); -const os = require("os"); -const { join } = require("path"); - -// Require Internal Dependencies -const { - cleanRange, taggedString, writeNsecureCache, loadNsecureCache, getRegistryURL, isSensitiveFile -} = require("../src/utils"); - -test("should return cleaned SemVer range", () => { - const r1 = cleanRange("0.1.0"); - const r2 = cleanRange("^1.0.0"); - const r3 = cleanRange(">=2.0.0"); - - expect(r1).toStrictEqual("0.1.0"); - expect(r2).toStrictEqual("1.0.0"); - expect(r3).toStrictEqual("2.0.0"); -}); - -test("taggedString", () => { - const clojureHello = taggedString`Hello ${0}`; - expect(clojureHello()).toStrictEqual("Hello "); - expect(clojureHello("world")).toStrictEqual("Hello world"); - - const clojureFoo = taggedString`Hello ${"word"}`; - expect(clojureFoo({ word: "bar" })).toStrictEqual("Hello bar"); -}); - -test("node-secure cache", () => { - const filePath = join(os.tmpdir(), "nsecure-cache.json"); - rmdirSync(filePath, { recursive: true }); - - const result = loadNsecureCache(); - expect(Reflect.has(result, "lastUpdated")).toBe(true); - - writeNsecureCache(); - - const result2 = loadNsecureCache(); - expect(Reflect.has(result2, "lastUpdated")).toBe(true); -}); - -test("getRegistryURL should return the npm registry URL", async() => { - const result = getRegistryURL(); - expect(result).toStrictEqual("https://registry.npmjs.org/"); - expect(getRegistryURL()).toStrictEqual("https://registry.npmjs.org/"); -}); - -test("isSensitiveFile", () => { - expect(isSensitiveFile(".npmrc")).toBe(true); - expect(isSensitiveFile("lol.key")).toBe(true); -}); diff --git a/test/vulnerabilities/npm-audit.js b/test/vulnerabilities/npm-audit.js deleted file mode 100644 index 70905942..00000000 --- a/test/vulnerabilities/npm-audit.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -const { VULN_MODE_NPM_AUDIT } = require("../../src/vulnerabilities/strategies"); -// Require Internal Dependencies -const { NPMAuditStrategy } = require("../../src/vulnerabilities/strategies/npm-audit"); - -test("Run NPM Audit and get vulnerabilities", async() => { - const vulnStrategy = await NPMAuditStrategy(); - expect(vulnStrategy.type).toStrictEqual(VULN_MODE_NPM_AUDIT); - await vulnStrategy.hydrateNodeSecurePayload({}); -}); diff --git a/test/vulnerabilities/security-wg.js b/test/vulnerabilities/security-wg.js deleted file mode 100644 index a43a0387..00000000 --- a/test/vulnerabilities/security-wg.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -// Require Internal Dependencies -const SecurityWGStrategyModule = require("../../src/vulnerabilities/strategies/security-wg"); - - -describe("Security Working Group inner methods", () => { - let spy; - - beforeAll(() => { - spy = jest.spyOn(SecurityWGStrategyModule, "checkHydrateDB"); - }); - - it("should delete and hydrate vulnerabilities DB without side effects", async() => { - const vulnStrategy = await SecurityWGStrategyModule.SecurityWGStrategy({ sideEffects: false }); - vulnStrategy.deleteDB(); - await vulnStrategy.hydrateDB(); - }); - it("should delete and hydrate vulnerabilities DB with side effects", async() => { - await SecurityWGStrategyModule.SecurityWGStrategy({ sideEffects: true }); - await (() => expect(spy).toHaveBeenCalledTimes(1)); - }); -}); - - diff --git a/test/vulnerabilities/vulnerabilitySource.js b/test/vulnerabilities/vulnerabilitySource.js deleted file mode 100644 index cb4a9459..00000000 --- a/test/vulnerabilities/vulnerabilitySource.js +++ /dev/null @@ -1,81 +0,0 @@ -/* eslint-disable max-nested-callbacks */ -"use strict"; - -const { setVulnerabilityStrategy, getVulnerabilityStrategy } = require("../../src/vulnerabilities/vulnerabilitySource"); - -const { VULN_MODE_DB_SECURITY_WG, VULN_MODE_NPM_AUDIT } = require("../../src/vulnerabilities/strategies"); -const NPMAuditStrategyModule = require("../../src/vulnerabilities/strategies/npm-audit"); -const SecurityWGStrategyModule = require("../../src/vulnerabilities/strategies/security-wg"); - - -describe("Vulnerability source strategies", () => { - afterEach(() => { - jest.clearAllMocks(); - }); - - describe("Strategies initializations", () => { - it("should get the default strategy without explicitly setting it", async() => { - const defaultStrategy = await getVulnerabilityStrategy(); - expect(defaultStrategy.type).toStrictEqual(VULN_MODE_DB_SECURITY_WG); - }); - - it("should get the default strategy by setting and getting it", async() => { - await setVulnerabilityStrategy(VULN_MODE_NPM_AUDIT); - const npmStrategy = await getVulnerabilityStrategy(); - expect(npmStrategy.type).toStrictEqual(VULN_MODE_NPM_AUDIT); - }); - - it("should set the default strategy whenever no param or incorrect param is supplied", async() => { - const UNIMPLEMENTED_VULN_MODE_DB = "db_snyk"; - await setVulnerabilityStrategy(UNIMPLEMENTED_VULN_MODE_DB); - const defaultStrategy = await getVulnerabilityStrategy(); - expect(defaultStrategy.type).toStrictEqual(VULN_MODE_DB_SECURITY_WG); - - await setVulnerabilityStrategy(); - const alsoDefaultStrategy = await getVulnerabilityStrategy(); - expect(alsoDefaultStrategy.type).toStrictEqual(VULN_MODE_DB_SECURITY_WG); - }); - }); - - describe("Security Working Group Strategy", () => { - it("should instantiate default Security Working Group Strategy", async() => { - const vulnSource = await setVulnerabilityStrategy(VULN_MODE_DB_SECURITY_WG); - - expect(vulnSource.type).toStrictEqual(VULN_MODE_DB_SECURITY_WG); - }); - - it("should call one of the SWG's strategy methods", async() => { - const vulnSource = await setVulnerabilityStrategy(VULN_MODE_DB_SECURITY_WG); - - SecurityWGStrategyModule.SecurityWGStrategy.hydrateNodeSecurePayload = jest.fn().mockResolvedValue(); - - const hydrateNodeSecurePayloadSpy = jest - .spyOn(vulnSource, "hydrateNodeSecurePayload"); - - await vulnSource.hydrateNodeSecurePayload({}); - expect(hydrateNodeSecurePayloadSpy).toHaveBeenCalledTimes(1); - expect(hydrateNodeSecurePayloadSpy).toHaveBeenCalledWith({}); - }); - }); - describe("switch to NPM Audit Strategy", () => { - it("should instantiate NPM Audit Strategy", async() => { - const vulnSource = await setVulnerabilityStrategy(VULN_MODE_NPM_AUDIT); - expect(vulnSource.type).toStrictEqual(VULN_MODE_NPM_AUDIT); - }); - - it("should call one of the NPM Audit's strategy methods", async() => { - const vulnSource = await setVulnerabilityStrategy(VULN_MODE_NPM_AUDIT); - - NPMAuditStrategyModule.NPMAuditStrategy.hydrateNodeSecurePayload = jest.fn().mockResolvedValue(); - - const hydrateNodeSecurePayloadSpy = jest.spyOn( - vulnSource, "hydrateNodeSecurePayload" - ).mockResolvedValue(); - - await vulnSource.hydrateNodeSecurePayload({}); - expect(hydrateNodeSecurePayloadSpy).toHaveBeenCalledTimes(1); - expect(hydrateNodeSecurePayloadSpy).toHaveBeenCalledWith({}); - }); - }); -}); - diff --git a/test/warnings.js b/test/warnings.js deleted file mode 100644 index fe8d1339..00000000 --- a/test/warnings.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -// Require Third-party Dependencies -const is = require("@slimio/is"); - -// Require Internal Dependencies -const applyWarnings = require("../src/warnings"); - -test("applyWarnings for '@scarf/scarf'", () => { - const deps = new Map([ - ["@scarf/scarf", true] - ]); - - const warnsArray = applyWarnings(deps); - expect(is.array(warnsArray)).toBe(true); - expect(warnsArray.length).toStrictEqual(1); - // eslint-disable-next-line max-len - expect(warnsArray[0]).toStrictEqual("The dependency '@scarf/scarf' has been detected in the dependency Tree. This dependency could collect data against your will so think to disable it with the env var: SCARF_ANALYTICS"); -}); From 183645ce645d0b47cc5ac52611eb0b8937ce7255 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 4 Sep 2021 18:46:38 +0200 Subject: [PATCH 02/32] refactor: complete revamp of CLI commands --- README.md | 2 +- bin/index.js | 451 +++------------------------------- esbuild.config.js | 93 +++---- package-lock.json | 328 ++++--------------------- package.json | 10 +- src/commands/http.js | 17 ++ src/commands/index.js | 6 + src/commands/lang.js | 24 ++ src/commands/scanner.js | 77 ++++++ src/commands/summary.js | 141 +++++++++++ src/commands/verify.js | 115 +++++++++ src/commands/vulnerability.js | 29 +++ src/httpServer.js | 6 +- src/utils.js | 7 + 14 files changed, 550 insertions(+), 756 deletions(-) create mode 100644 src/commands/http.js create mode 100644 src/commands/index.js create mode 100644 src/commands/lang.js create mode 100644 src/commands/scanner.js create mode 100644 src/commands/summary.js create mode 100644 src/commands/verify.js create mode 100644 src/commands/vulnerability.js diff --git a/README.md b/README.md index 4042af4d..ac065374 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ The CLI allow to load the JSON into a Webpage with the **open** command. The pag ## Requirements -- [Node.js](https://nodejs.org/en/) version 16.0.0 or higher +- [Node.js](https://nodejs.org/en/) version 16.8.0 or higher ## Getting Started diff --git a/bin/index.js b/bin/index.js index 1f39c8c2..da96848b 100644 --- a/bin/index.js +++ b/bin/index.js @@ -1,474 +1,93 @@ #!/usr/bin/env node -import "make-promises-safe"; import dotenv from "dotenv"; dotenv.config(); // Import Node.js Dependencies -import { writeFileSync } from "fs"; -import { unlink, readdir, readFile } from "fs/promises"; -import { join, extname, basename } from "path"; -import { once } from "events"; +import { createRequire } from "module"; // Import Third-party Dependencies import kleur from "kleur"; import sade from "sade"; -import pacote from "pacote"; -import Spinner from "@slimio/async-cli-spinner"; -import filenamify from "filenamify"; import semver from "semver"; -import ms from "ms"; -import qoa from "qoa"; -import cliui from "cliui"; -import i18n from "@nodesecure/i18n"; -import { cwd, verify, depWalker } from "@nodesecure/scanner"; -import { getLocalRegistryURL } from "@nodesecure/npm-registry-sdk"; -import vuln from "@nodesecure/vuln"; +import * as i18n from "@nodesecure/i18n"; +import * as vuln from "@nodesecure/vuln"; +import { loadRegistryURLFromLocalSystem } from "@nodesecure/npm-registry-sdk"; // Import Internal Dependencies -import { startHTTPServer } from "../src/httpServer.js"; -import { formatBytes } from "../src/utils.js"; +import * as commands from "../src/commands/index.js"; -const { yellow, grey, white, green, cyan, red, magenta } = kleur; -const ui = cliui(); +// TODO: replace with await import() when available +const require = createRequire(import.meta.url); +const manifest = require("../package.json"); -// CONSTANTS -const REGISTRY_DEFAULT_ADDR = getLocalRegistryURL(); -const token = typeof process.env.NODE_SECURE_TOKEN === "string" ? { token: process.env.NODE_SECURE_TOKEN } : {}; -const httpPort = process.env.PORT; +console.log(kleur.grey().bold(`\n > ${i18n.getToken("cli.executing_at")}: ${kleur.yellow().bold(process.cwd())}\n`)); -// Process script arguments -const prog = sade("nsecure").version("0.9.0"); -console.log(grey().bold(`\n > ${i18n.getToken("cli.executing_at")}: ${yellow().bold(process.cwd())}\n`)); - -const currNodeSemVer = process.versions.node; -if (semver.lt(currNodeSemVer, "16.1.0")) { - console.log(red().bold(` [!] ${i18n.getToken("cli.min_nodejs_version", "16.1.0")}\n`)); +const minVersion = semver.minVersion(manifest.engines.node); +if (semver.lt(process.versions.node, minVersion)) { + console.log(kleur.red().bold(` [!] ${i18n.getToken("cli.min_nodejs_version", minVersion)}\n`)); process.exit(0); } -function logAndWrite(payload, output = "nsecure-result") { - if (payload === null) { - console.log(i18n.getToken("cli.no_dep_to_proceed")); - - return null; - } - - const ret = JSON.stringify(payload, null, 2); - const filePath = join(process.cwd(), extname(output) === ".json" ? filenamify(output) : `${filenamify(output)}.json`); - writeFileSync(filePath, ret); - console.log(white().bold(i18n.getToken("cli.successfully_written_json", green().bold(filePath)))); +loadRegistryURLFromLocalSystem(); - return filePath; -} +const prog = sade(manifest.name).version(manifest.version); prog .command("hydrate-db") .describe(i18n.getToken("cli.commands.hydrate_db.desc")) - .action(hydrateCmd); + .action(commands.vulnerability.hydrate); -prog - .command("cwd") +defaultScannerCommand("cwd", { strategy: vuln.strategies.NPM_AUDIT }) .describe(i18n.getToken("cli.commands.cwd.desc")) - .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) - .option("-o, --output", i18n.getToken("cli.commands.option_output"), "nsecure-result") .option("-n, --nolock", i18n.getToken("cli.commands.cwd.option_nolock"), false) .option("-f, --full", i18n.getToken("cli.commands.cwd.option_full"), false) - .option("-s, --vulnerabilityStrategy", i18n.getToken("cli.commands.strategy"), vuln.strategies.NPM_AUDIT) - .action(cwdCmd); + .action(commands.scanner.cwd); -prog - .command("from ") +defaultScannerCommand("from ") .describe(i18n.getToken("cli.commands.from.desc")) - .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) - .option("-o, --output", i18n.getToken("cli.commands.option_output"), "nsecure-result") - .action(fromCmd); + .action(commands.scanner.from); -prog - .command("auto [package]") +defaultScannerCommand("auto [package]", { includeOutput: false, strategy: vuln.strategies.SECURITY_WG }) .describe(i18n.getToken("cli.commands.auto.desc")) - .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4) .option("-k, --keep", i18n.getToken("cli.commands.auto.option_keep"), false) - .option("-s, --vulnerabilityStrategy", i18n.getToken("cli.commands.strategy"), vuln.strategies.SECURITY_WG) - .action(autoCmd); + .action(commands.scanner.auto); prog .command("open [json]") .describe(i18n.getToken("cli.commands.open.desc")) - .option("-p, --port", i18n.getToken("cli.commands.open.option_port"), httpPort) - .action(httpCmd); + .option("-p, --port", i18n.getToken("cli.commands.open.option_port"), process.env.PORT) + .action(commands.http.start); prog .command("verify [package]") .describe(i18n.getToken("cli.commands.verify.desc")) .option("-j, --json", i18n.getToken("cli.commands.verify.option_json"), false) - .action(verifyCmd); + .action(commands.verify.main); prog .command("summary [json]") .describe(i18n.getToken("cli.commands.summary.desc")) - .action(summaryCmd); + .action(commands.summary.main); prog .command("lang") .describe(i18n.getToken("cli.commands.lang.desc")) - .action(async() => { - const currentLang = i18n.getLocalLang(); - const dirents = await readdir(join(__dirname, "../i18n"), { withFileTypes: true }); - const langs = dirents - .filter((dirent) => dirent.isFile() && extname(dirent.name) === ".js") - .map((dirent) => basename(dirent.name, ".js")); - - langs.splice(langs.indexOf(currentLang), 1); - langs.unshift(currentLang); - - console.log(""); - const { selectedLang } = await qoa.interactive({ - query: green().bold(` ${i18n.getToken("cli.commands.lang.question_text")}`), - handle: "selectedLang", - menu: langs - }); - - await i18n.setLocalLang(selectedLang); - console.log(white().bold(`\n ${i18n.getToken("cli.commands.lang.new_selection", yellow().bold(selectedLang))}`)); - }); + .action(commands.lang.set); prog.parse(process.argv); -function locationToString(location) { - const start = `${location[0][0]}:${location[0][1]}`; - const end = `${location[1][0]}:${location[1][1]}`; - - return `[${start}] - [${end}]`; -} - -async function summaryCmd(json = "nsecure-result.json") { - const dataFilePath = join(process.cwd(), json); - const rawAnalysis = await readFile(dataFilePath, { encoding: "utf-8" }); - const { rootDepencyName, dependencies } = JSON.parse(rawAnalysis); - - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.title")}: ${rootDepencyName}`), width: 50 } - ); - ui.div({ text: yellow("-------------------------------------------------------------------"), width: 70 }); - - if (dependencies) { - const { - packagesCount, - packageWithIndirectDeps, - totalSize, - extensionMap, - licenceMap - } = extractAnalysisData(dependencies); - - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.total_packages")}:`), width: 40 }, - { text: yellow().bold(`${packagesCount}`), width: 20 } - ); - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.total_size")}`), width: 40 }, - { text: yellow().bold(`${totalSize}`), width: 20 } - ); - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.indirect_deps")}:`), width: 40 }, - { text: yellow().bold(`${packageWithIndirectDeps}`), width: 20 } - ); - - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.extensions")} :`), width: 40 } - ); - const extensionEntries = Object.entries(extensionMap); - ui.div( - { - text: `${extensionEntries.reduce(buildStringFromEntries, "")}`, width: 70 - } - ); - - ui.div( - { text: cyan().bold(`${i18n.getToken("ui.stats.licenses")} :`), width: 40 } - ); - const licenceEntries = Object.entries(licenceMap); - ui.div( - { - text: yellow().bold(`${licenceEntries.reduce(buildStringFromEntries, "")}`), width: 70 - } - ); - } - else { - ui.div( - { text: cyan().bold("Error:"), width: 20 }, - { text: yellow().bold("No dependencies"), width: 30 } - ); - } - ui.div({ text: yellow("-------------------------------------------------------------------"), width: 70 }); - console.log(`${ui.toString()}`); - ui.resetOutput(); - - return void 0; -} - -// eslint-disable-next-line max-params -function buildStringFromEntries(accumulator, [extension, count], index, sourceArray) { - // eslint-disable-next-line no-param-reassign - accumulator += `(${yellow(count)}) ${white().bold(extension)} `; - if (index !== sourceArray.length - 1) { - // eslint-disable-next-line no-param-reassign - accumulator += cyan("- "); - } - - return accumulator; -} - -function extractAnalysisData(dependencies) { - const analysisAggregator = { - packagesCount: 0, - totalSize: 0, - packageWithIndirectDeps: 0, - extensionMap: {}, - licenceMap: {} - }; - - for (const dependencyData of Object.values(dependencies)) { - const { versions, metadata } = dependencyData; - - for (const version of versions) { - const versionData = dependencyData[version]; - extractVersionData(versionData, analysisAggregator); - } - - analysisAggregator.packagesCount += metadata.dependencyCount; - } - - return analysisAggregator; -} - -function extractVersionData(version, analysisAggregator) { - for (const extension of version.composition.extensions) { - addOccurrences(analysisAggregator.extensionMap, extension); - } - - if (version.license.uniqueLicenseIds) { - for (const licence of version.license.uniqueLicenseIds) { - addOccurrences(analysisAggregator.licenceMap, licence); - } - } - - if (version.flags && version.flags.includes("hasIndirectDependencies")) { - analysisAggregator.packageWithIndirectDeps++; - } - - analysisAggregator.totalSize += version.size; -} - -function addOccurrences(aggregator, key) { - if (aggregator[key]) { - aggregator[key]++; - } - else { - aggregator[key] = 1; - } -} - -async function verifyCmd(packageName = null, options) { - const payload = await verify(packageName); - if (options.json) { - return console.log(JSON.stringify(payload, null, 2)); - } - const { files, directorySize, uniqueLicenseIds, ast } = payload; - - ui.div( - { text: cyan().bold("directory size:"), width: 20 }, - { text: yellow().bold(formatBytes(directorySize)), width: 10 } - ); - ui.div( - { text: cyan().bold("unique licenses:"), width: 20 }, - { text: white().bold(uniqueLicenseIds.join(", ")), width: 10 } - ); - console.log(`${ui.toString()}\n`); - ui.resetOutput(); - - { - ui.div( - { text: white().bold("ext"), width: 15, align: "center" }, - { text: white().bold("files"), width: 45 }, - { text: white().bold("minified files"), width: 30 } - ); +function defaultScannerCommand(name, options = {}) { + const { includeOutput = true, strategy = null } = options; - const maxLen = files.list.length > files.extensions.length ? files.list.length : files.extensions.length; - const divArray = Array.from(Array(maxLen), () => ["", "", ""]); - files.extensions.forEach((value, index) => (divArray[index][0] = value)); - files.list.forEach((value, index) => (divArray[index][1] = value)); - files.minified.forEach((value, index) => (divArray[index][2] = value)); + const cmd = prog.command(name) + .option("-d, --depth", i18n.getToken("cli.commands.option_depth"), 4); - for (const [ext, file, min] of divArray) { - ui.div( - { text: cyan().bold(ext), width: 15, align: "center" }, - { text: file, width: 45 }, - { text: red().bold(min), width: 30 } - ); - } + if (includeOutput) { + cmd.option("-o, --output", i18n.getToken("cli.commands.option_output"), "nsecure-result"); } - console.log(`${ui.toString()}\n`); - ui.resetOutput(); - - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: cyan().bold("Required dependency and files"), width: 70, align: "center" }); - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: "\n", width: 70, align: "center" }); - - for (const [fileName, deps] of Object.entries(ast.dependencies)) { - ui.div({ text: magenta().bold(fileName), width: 70, align: "center" }); - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div( - { text: white().bold("required stmt"), width: 32, align: "left" }, - { text: white().bold("try/catch"), width: 12, align: "center" }, - { text: white().bold("source location"), width: 26, align: "center" } - ); - for (const [depName, infos] of Object.entries(deps)) { - const { start, end } = infos.location; - const position = `[${start.line}:${start.column}] - [${end.line}:${end.column}]`; - - ui.div( - { text: depName, width: 32 }, - { text: (infos.inTry ? green : red)().bold(infos.inTry), width: 12, align: "center" }, - { text: grey().bold(position), width: 26, align: "center" } - ); - } - ui.div({ text: "", width: 70, align: "center" }); - console.log(`${ui.toString()}`); - ui.resetOutput(); + if (strategy !== null) { + cmd.option("-s, --vulnerabilityStrategy", i18n.getToken("cli.commands.strategy"), strategy); } - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: cyan().bold("AST Warnings"), width: 70, align: "center" }); - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - ui.div({ text: "", width: 70, align: "center" }); - - ui.div( - { text: white().bold("file"), width: 30 }, - { text: white().bold("kind"), width: 15, align: "center" }, - { text: white().bold("source location"), width: 25, align: "center" } - ); - - for (const warning of ast.warnings) { - const position = warning.kind === "encoded-literal" ? - warning.location.map((loc) => locationToString(loc)).join(" // ") : - locationToString(warning.location); - - ui.div( - { text: warning.file || grey().bold("NONE"), width: 30 }, - { text: magenta().bold(warning.kind), width: 15, align: "center" }, - { text: grey().bold(position), width: 25, align: "center" } - ); - if (warning.value) { - ui.div({ text: "", width: 70, align: "center" }); - ui.div({ text: yellow().bold(warning.value), width: 70, align: "center" }); - } - ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); - } - - console.log(`${ui.toString()}`); - ui.resetOutput(); - - return void 0; -} - -async function hydrateCmd() { - const strategy = await vuln.setStrategy(vuln.strategies.SECURITY_WG, { - hydrateDatabase: false - }); - - await strategy.deleteDatabase(); - - const spinner = new Spinner({ - text: white().bold(i18n.getToken("cli.commands.hydrate_db.running", yellow().bold("nodejs security-wg"))) - }).start(); - try { - await strategy.hydrateDatabase(); - - const elapsedTime = cyan(ms(Number(spinner.elapsedTime.toFixed(2)))); - spinner.succeed(white().bold(i18n.getToken("cli.commands.hydrate_db.success", elapsedTime))); - } - catch (err) { - spinner.failed(err.message); - } -} - -async function autoCmd(packageName, opts) { - const keep = Boolean(opts.keep); - delete opts.keep; - delete opts.k; - - const payloadFile = await (typeof packageName === "string" ? fromCmd(packageName, opts) : cwdCmd(opts)); - try { - if (payloadFile !== null) { - await httpCmd(); - await once(process, "SIGINT"); - } - } - finally { - if (!keep && payloadFile !== null) { - try { - await unlink(payloadFile); - } - catch (error) { - if (error.code !== "ENOENT") { - // eslint-disable-next-line no-unsafe-finally - throw error; - } - } - } - } -} - -async function cwdCmd(opts) { - const { depth: maxDepth = 4, output, nolock, full, vulnerabilityStrategy } = opts; - - const payload = await cwd(void 0, - { verbose: true, maxDepth, usePackageLock: !nolock, fullLockMode: full, vulnerabilityStrategy } - ); - - return logAndWrite(payload, output); -} - -async function fromCmd(packageName, opts) { - const { depth: maxDepth = 4, output } = opts; - let manifest = null; - - const spinner = new Spinner({ - text: white().bold(i18n.getToken("cli.commands.from.searching", yellow().bold(packageName))) - }).start(); - try { - manifest = await pacote.manifest(packageName, { - registry: REGISTRY_DEFAULT_ADDR, - ...token - }); - - const elapsedTime = cyan().bold(ms(Number(spinner.elapsedTime.toFixed(2)))); - spinner.succeed( - white().bold(i18n.getToken("cli.commands.from.fetched", yellow().bold(packageName), elapsedTime)) - ); - } - catch (err) { - spinner.failed(err.message); - - return null; - } - - if (manifest !== null) { - const payload = await depWalker(manifest, { verbose: true, maxDepth }); - - return logAndWrite(payload, output); - } - - return null; -} - -async function httpCmd(json = "nsecure-result.json", { port }) { - const dataFilePath = join(process.cwd(), json); - const configPort = Number.isNaN(Number(port)) ? 0 : Number(port); - const httpServer = await startHTTPServer(dataFilePath, configPort); - - for (const eventName of ["SIGINT", "SIGTERM"]) { - process.on(eventName, () => httpServer.server.close()); - } + return cmd; } diff --git a/esbuild.config.js b/esbuild.config.js index 2d41ed47..66b0d2a9 100644 --- a/esbuild.config.js +++ b/esbuild.config.js @@ -1,13 +1,14 @@ -"use strict"; - // Import Node.js Dependencies -const path = require("path"); -const fs = require("fs/promises"); +import path from "path"; +import fs from "fs/promises"; +import { fileURLToPath } from "url"; // Import Third-party Dependencies -const esbuild = require("esbuild"); +import esbuild from "esbuild"; // CONSTANTS +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + const kPublicDir = path.join(__dirname, "public"); const kOutDir = path.join(__dirname, "dist"); const kImagesDir = path.join(kPublicDir, "img"); @@ -18,51 +19,51 @@ const kFontExt = new Set([".woff", ".ttf", ".woff2", ".eot"]); const imagesToCopy = ["github-mark.png", "npm-icon.svg"]; async function main() { - await fs.mkdir(path.join(kOutDir, "img"), { recursive: true }); + await fs.mkdir(path.join(kOutDir, "img"), { recursive: true }); - const buildOptions = { - entryPoints: [ - path.join(kPublicDir, "js", "master.js"), - path.join(kPublicDir, "css", "style.css") - ], - loader: { - ".jpg": "file", - ".png": "file", - ".woff": "file", - ".woff2": "file", - ".eot": "file", - ".ttf": "file", - ".svg": "file" - }, - platform: "browser", - bundle: true, - sourcemap: true, - treeShaking: true, - outdir: kOutDir - }; - await Promise.all([ - esbuild.build(buildOptions), - ...imagesToCopy.map((name) => fs.copyFile(path.join(kImagesDir, name), path.join(kOutDir, name))) - ]); + const buildOptions = { + entryPoints: [ + path.join(kPublicDir, "js", "master.js"), + path.join(kPublicDir, "css", "style.css") + ], + loader: { + ".jpg": "file", + ".png": "file", + ".woff": "file", + ".woff2": "file", + ".eot": "file", + ".ttf": "file", + ".svg": "file" + }, + platform: "browser", + bundle: true, + sourcemap: true, + treeShaking: true, + outdir: kOutDir + }; + await Promise.all([ + esbuild.build(buildOptions), + ...imagesToCopy.map((name) => fs.copyFile(path.join(kImagesDir, name), path.join(kOutDir, name))) + ]); - const toWaitPromises = [ - fs.copyFile(path.join(kPublicDir, "favicon.ico"), path.join(kOutDir, "favicon.ico")) - ]; - const dirents = await fs.readdir(kOutDir, { withFileTypes: true }); - for (const dirent of dirents) { - const ext = path.extname(dirent.name); - const fullPath = path.join(kOutDir, dirent.name); + const toWaitPromises = [ + fs.copyFile(path.join(kPublicDir, "favicon.ico"), path.join(kOutDir, "favicon.ico")) + ]; + const dirents = await fs.readdir(kOutDir, { withFileTypes: true }); + for (const dirent of dirents) { + const ext = path.extname(dirent.name); + const fullPath = path.join(kOutDir, dirent.name); - if (kImageExt.has(ext)) { - const promise = fs.rename(fullPath, path.join(kOutDir, "img", dirent.name)); - toWaitPromises.push(promise); - } - else if (kFontExt.has(ext)) { - const promise = fs.rename(fullPath, path.join(kOutDir, "css", dirent.name)); - toWaitPromises.push(promise); - } + if (kImageExt.has(ext)) { + const promise = fs.rename(fullPath, path.join(kOutDir, "img", dirent.name)); + toWaitPromises.push(promise); + } + else if (kFontExt.has(ext)) { + const promise = fs.rename(fullPath, path.join(kOutDir, "css", dirent.name)); + toWaitPromises.push(promise); } + } - await Promise.all(toWaitPromises); + await Promise.all(toWaitPromises); } main().catch(() => process.exit(1)); diff --git a/package-lock.json b/package-lock.json index b5c3a0b2..0f074ceb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nsecure", - "version": "0.8.0", + "version": "0.9.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -519,6 +519,14 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", @@ -1124,18 +1132,6 @@ "estree-walker": "^3.0.0", "meriyah": "^4.2.0", "safe-regex": "^2.1.1" - }, - "dependencies": { - "estree-walker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz", - "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==" - }, - "meriyah": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-4.2.0.tgz", - "integrity": "sha512-fCVh5GB9YT53Bq14l00HLYE3i9DywrY0JVZxbk0clXWDuMsUKKwluvC5sY0bMBqHbnIbpIjfSSIsnrzbauA8Yw==" - } } }, "@nodesecure/npm-registry-sdk": { @@ -1156,9 +1152,9 @@ } }, "@nodesecure/scanner": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.0.0.tgz", - "integrity": "sha512-GbeRkSMGTBc1oG2PsZxydGWG2+L2BaQuRwyTzzf6RPdosJ9e5R3JVNkSDdJY022N7+5bStLQjqkOrWmvl1S7Lg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.1.0.tgz", + "integrity": "sha512-zwJEWyHj3FEPGuvk4gUs+d1256H1DdsGc+rlx0PZJEbG+FsbqGlT+J4Ljvv1r16/9822z31an3HAu7nimflWlw==", "requires": { "@nodesecure/flags": "^1.0.0", "@nodesecure/fs-walk": "^1.0.0", @@ -1182,266 +1178,6 @@ "ms": "^2.1.3", "pacote": "^11.3.5", "semver": "^7.3.4" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@npmcli/arborist": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.8.3.tgz", - "integrity": "sha512-miFcxbZjmQqeFTeRSLLh+lc/gxIKDO5L4PVCp+dp+kmcwJmYsEJmF7YvHR2yi3jF+fxgvLf3CCFzboPIXAuabg==", - "requires": { - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^1.0.2", - "@npmcli/metavuln-calculator": "^1.1.0", - "@npmcli/move-file": "^1.1.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.1", - "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^1.8.2", - "bin-links": "^2.2.1", - "cacache": "^15.0.3", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^11.0.0", - "pacote": "^11.3.5", - "parse-conflict-json": "^1.1.1", - "proc-log": "^1.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "treeverse": "^1.0.4", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "builtins": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", - "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", - "requires": { - "semver": "^7.0.0" - } - }, - "filenamify": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.0.1.tgz", - "integrity": "sha512-JaWJHplckZTbg9jgZmOeXq1Sm7GiylBTSacyW45YO9QGsQSELlC9PTKkDBOo+3VHdS2a7dvgyaHe7XcVlEitxw==", - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "itertools": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/itertools/-/itertools-1.7.0.tgz", - "integrity": "sha512-HSS1CnDbL+3DDDCoVvnwaTH8UsvsBwkwN9HhiL2m1E0Cmr6pbFBxmMjn2wXfgH2TsflWDEJXdZMWuoMbnGSIfg==", - "requires": { - "@babel/runtime": "^7.14.6" - } - }, - "json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "dependencies": { - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - } - } - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", - "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.0.0.tgz", - "integrity": "sha512-FIgZbQWlnjVEQvMkylz64/rUggGtrKstPnx8OZyYFG0tAFR8CSBtpXxSwbFLHyeXFn/cunFL7MpuSOvDSOPo9g==", - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - } - } } }, "@nodesecure/sec-literal": { @@ -2438,6 +2174,14 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "builtins": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", + "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "requires": { + "semver": "^7.0.0" + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -3218,6 +2962,11 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, + "estree-walker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz", + "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==" + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3962,6 +3711,14 @@ "istanbul-lib-report": "^3.0.0" } }, + "itertools": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/itertools/-/itertools-1.7.0.tgz", + "integrity": "sha512-HSS1CnDbL+3DDDCoVvnwaTH8UsvsBwkwN9HhiL2m1E0Cmr6pbFBxmMjn2wXfgH2TsflWDEJXdZMWuoMbnGSIfg==", + "requires": { + "@babel/runtime": "^7.14.6" + } + }, "jest": { "version": "27.1.0", "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", @@ -4773,11 +4530,6 @@ "ssri": "^8.0.0" } }, - "make-promises-safe": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/make-promises-safe/-/make-promises-safe-5.1.0.tgz", - "integrity": "sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==" - }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", @@ -4807,6 +4559,11 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "meriyah": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-4.2.0.tgz", + "integrity": "sha512-fCVh5GB9YT53Bq14l00HLYE3i9DywrY0JVZxbk0clXWDuMsUKKwluvC5sY0bMBqHbnIbpIjfSSIsnrzbauA8Yw==" + }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -5398,7 +5155,8 @@ }, "hosted-git-info": { "version": "2.8.8", - "resolved": "", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "indent-string": { @@ -5767,9 +5525,9 @@ } }, "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==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regexp-tree": { "version": "0.1.23", diff --git a/package.json b/package.json index f8ac4125..0d3897b6 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { "name": "nsecure", - "version": "0.8.0", + "version": "0.9.0", "description": "Node.js security CLI", "main": "./index.js", "bin": { "node-secure": "./bin/index.js", "nsecure": "./bin/index.js" }, + "type": "module", "engines": { - "node": ">=12.12.0" + "node": ">=16.1.0" }, "scripts": { "eslint": "eslint bin src test", @@ -88,19 +89,16 @@ "@nodesecure/flags": "^1.0.0", "@nodesecure/i18n": "^1.1.1", "@nodesecure/npm-registry-sdk": "^1.2.0", - "@nodesecure/scanner": "^1.0.0", + "@nodesecure/scanner": "^1.1.0", "@nodesecure/vuln": "^1.2.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", - "cacache": "^15.3.0", "cliui": "^7.0.4", "dotenv": "^10.0.0", "filenamify": "^5.0.1", "kleur": "^4.1.4", - "make-promises-safe": "^5.1.0", "ms": "^2.1.3", "open": "^8.2.1", - "pacote": "^11.3.5", "polka": "^0.5.2", "qoa": "^0.2.0", "sade": "^1.7.4", diff --git a/src/commands/http.js b/src/commands/http.js new file mode 100644 index 00000000..6b43a89f --- /dev/null +++ b/src/commands/http.js @@ -0,0 +1,17 @@ +// Import Node.js Dependencies +import path from "path"; + +// Import Internal Dependencies +import { startHTTPServer } from "../httpServer.js"; + +export async function start(json = "nsecure-result.json", options = {}) { + const { port } = options; + + const dataFilePath = path.join(process.cwd(), json); + const configPort = Number.isNaN(Number(port)) ? 0 : Number(port); + const httpServer = await startHTTPServer(dataFilePath, configPort); + + for (const eventName of ["SIGINT", "SIGTERM"]) { + process.on(eventName, () => httpServer.server.close()); + } +} diff --git a/src/commands/index.js b/src/commands/index.js new file mode 100644 index 00000000..a796e1e6 --- /dev/null +++ b/src/commands/index.js @@ -0,0 +1,6 @@ +export * as lang from "./lang.js"; +export * as summary from "./summary.js"; +export * as verify from "./verify.js"; +export * as vulnerability from "./vulnerability.js"; +export * as http from "./http.js"; +export * as scanner from "./scanner.js"; diff --git a/src/commands/lang.js b/src/commands/lang.js new file mode 100644 index 00000000..341afced --- /dev/null +++ b/src/commands/lang.js @@ -0,0 +1,24 @@ +// Import Third-party Dependencies +import * as i18n from "@nodesecure/i18n"; +import qoa from "qoa"; +import kleur from "kleur"; + +const { white, green, yellow } = kleur; + +export async function set() { + const currentLang = i18n.getLocalLang(); + const langs = ["french", "english"]; + + langs.splice(langs.indexOf(currentLang), 1); + langs.unshift(currentLang); + + console.log(""); + const { selectedLang } = await qoa.interactive({ + query: green().bold(` ${i18n.getToken("cli.commands.lang.question_text")}`), + handle: "selectedLang", + menu: langs + }); + + await i18n.setLocalLang(selectedLang); + console.log(white().bold(`\n ${i18n.getToken("cli.commands.lang.new_selection", yellow().bold(selectedLang))}`)); +} diff --git a/src/commands/scanner.js b/src/commands/scanner.js new file mode 100644 index 00000000..cfafcf07 --- /dev/null +++ b/src/commands/scanner.js @@ -0,0 +1,77 @@ +// Import Node.js Dependencies +import fs from "fs/promises"; +import path from "path"; +import events from "events"; + +// Import Third-party Dependencies +import kleur from "kleur"; +import filenamify from "filenamify"; +import * as i18n from "@nodesecure/i18n"; +import * as scanner from "@nodesecure/scanner"; + +// Import Internal Dependencies +import * as http from "./http.js"; + +export async function auto(packageName, opts) { + const keep = Boolean(opts.keep); + delete opts.keep; + delete opts.k; + + const payloadFile = await (typeof packageName === "string" ? from(packageName, opts) : cwd(opts)); + try { + if (payloadFile !== null) { + await http.start(); + await events.once(process, "SIGINT"); + } + } + finally { + if (!keep && payloadFile !== null) { + try { + await fs.unlink(payloadFile); + } + catch (error) { + if (error.code !== "ENOENT") { + // eslint-disable-next-line no-unsafe-finally + throw error; + } + } + } + } +} + +export async function cwd(opts) { + const { depth: maxDepth = 4, output, nolock, full, vulnerabilityStrategy } = opts; + + const payload = await scanner.cwd(void 0, + { verbose: true, maxDepth, usePackageLock: !nolock, fullLockMode: full, vulnerabilityStrategy } + ); + + return await logAndWrite(payload, output); +} + +export async function from(packageName, opts) { + const { depth: maxDepth = 4, output } = opts; + + const payload = await scanner.from(packageName, { verbose: true, maxDepth }); + + return await logAndWrite(payload, output); +} + +async function logAndWrite(payload, output = "nsecure-result") { + if (payload === null) { + console.log(i18n.getToken("cli.no_dep_to_proceed")); + + return null; + } + + const ret = JSON.stringify(payload, null, 2); + + const fileName = path.extname(output) === ".json" ? filenamify(output) : `${filenamify(output)}.json`; + const filePath = path.join(process.cwd(), fileName); + await fs.writeFile(filePath, ret); + + console.log(kleur.white().bold(i18n.getToken("cli.successfully_written_json", kleur.green().bold(filePath)))); + console.log(""); + + return filePath; +} diff --git a/src/commands/summary.js b/src/commands/summary.js new file mode 100644 index 00000000..705e3b0f --- /dev/null +++ b/src/commands/summary.js @@ -0,0 +1,141 @@ +// Import Node.js Dependencies +import fs from "fs/promises"; +import path from "path"; + +// Import Third-party Dependencies +import cliui from "cliui"; +import kleur from "kleur"; +import * as i18n from "@nodesecure/i18n"; + +// VARS +const { yellow, gray, white, green, cyan, red } = kleur; +const ui = cliui(); + +export async function main(json = "nsecure-result.json") { + const dataFilePath = path.join(process.cwd(), json); + const rawAnalysis = await fs.readFile(dataFilePath, { encoding: "utf-8" }); + const { rootDepencyName, dependencies } = JSON.parse(rawAnalysis); + + ui.div( + { text: kleur.white().bold(`${i18n.getToken("ui.stats.title")}: `) + kleur.cyan().bold(rootDepencyName), width: 50 } + ); + ui.div({ text: gray("-------------------------------------------------------------------"), width: 70 }); + + if (dependencies) { + const { + packagesCount, + packageWithIndirectDeps, + totalSize, + extensionMap, + licenceMap + } = extractAnalysisData(dependencies); + + ui.div( + { text: white().bold(`${i18n.getToken("ui.stats.total_packages")}:`), width: 60 }, + { text: green().bold(`${packagesCount}`), width: 20 } + ); + ui.div( + { text: white().bold(`${i18n.getToken("ui.stats.total_size")}`), width: 60 }, + { text: green().bold(`${totalSize}`), width: 20 } + ); + ui.div( + { text: white().bold(`${i18n.getToken("ui.stats.indirect_deps")}:`), width: 60 }, + { text: green().bold(`${packageWithIndirectDeps}`), width: 20 } + ); + + ui.div(""); + ui.div( + { text: white().bold(`${i18n.getToken("ui.stats.extensions")} :`), width: 40 } + ); + const extensionEntries = Object.entries(extensionMap); + ui.div( + { + text: `${extensionEntries.reduce(buildStringFromEntries, "")}`, width: 70 + } + ); + + ui.div(""); + ui.div( + { text: white().bold(`${i18n.getToken("ui.stats.licenses")} :`), width: 40 } + ); + const licenceEntries = Object.entries(licenceMap); + ui.div( + { + text: yellow().bold(`${licenceEntries.reduce(buildStringFromEntries, "")}`), width: 70 + } + ); + } + else { + ui.div( + { text: red().bold("Error:"), width: 20 }, + { text: yellow().bold("No dependencies"), width: 30 } + ); + } + ui.div({ text: gray("-------------------------------------------------------------------"), width: 70 }); + console.log(`${ui.toString()}`); + ui.resetOutput(); + + return void 0; +} + +// eslint-disable-next-line max-params +function buildStringFromEntries(accumulator, [extension, count], index, sourceArray) { + // eslint-disable-next-line no-param-reassign + accumulator += `(${yellow(count)}) ${white().bold(extension)} `; + if (index !== sourceArray.length - 1) { + // eslint-disable-next-line no-param-reassign + accumulator += cyan("- "); + } + + return accumulator; +} + +function extractAnalysisData(dependencies) { + const analysisAggregator = { + packagesCount: 0, + totalSize: 0, + packageWithIndirectDeps: 0, + extensionMap: {}, + licenceMap: {} + }; + + for (const dependencyData of Object.values(dependencies)) { + const { versions, metadata } = dependencyData; + + for (const version of versions) { + const versionData = dependencyData[version]; + extractVersionData(versionData, analysisAggregator); + } + + analysisAggregator.packagesCount += metadata.dependencyCount; + } + + return analysisAggregator; +} + +function extractVersionData(version, analysisAggregator) { + for (const extension of version.composition.extensions) { + addOccurrences(analysisAggregator.extensionMap, extension); + } + + if (version.license.uniqueLicenseIds) { + for (const licence of version.license.uniqueLicenseIds) { + addOccurrences(analysisAggregator.licenceMap, licence); + } + } + + if (version.flags && version.flags.includes("hasIndirectDependencies")) { + analysisAggregator.packageWithIndirectDeps++; + } + + analysisAggregator.totalSize += version.size; +} + +function addOccurrences(aggregator, key) { + if (aggregator[key]) { + aggregator[key]++; + } + else { + aggregator[key] = 1; + } +} diff --git a/src/commands/verify.js b/src/commands/verify.js new file mode 100644 index 00000000..88bdd21b --- /dev/null +++ b/src/commands/verify.js @@ -0,0 +1,115 @@ +// Import Third-party Dependencies +import { verify } from "@nodesecure/scanner"; +import cliui from "cliui"; +import kleur from "kleur"; + +// Import Internal Dependencies +import { formatBytes, locationToString } from "../utils.js"; + +// VARS +const ui = cliui(); +const { yellow, grey, white, green, cyan, red, magenta } = kleur; + +export async function main(packageName = null, options) { + const payload = await verify(packageName); + if (options.json) { + return console.log(JSON.stringify(payload, null, 2)); + } + const { files, directorySize, uniqueLicenseIds, ast } = payload; + + ui.div( + { text: cyan().bold("directory size:"), width: 20 }, + { text: yellow().bold(formatBytes(directorySize)), width: 10 } + ); + ui.div( + { text: cyan().bold("unique licenses:"), width: 20 }, + { text: white().bold(uniqueLicenseIds.join(", ")), width: 10 } + ); + console.log(`${ui.toString()}\n`); + ui.resetOutput(); + + { + ui.div( + { text: white().bold("ext"), width: 15, align: "center" }, + { text: white().bold("files"), width: 45 }, + { text: white().bold("minified files"), width: 30 } + ); + + const maxLen = files.list.length > files.extensions.length ? files.list.length : files.extensions.length; + const divArray = Array.from(Array(maxLen), () => ["", "", ""]); + files.extensions.forEach((value, index) => (divArray[index][0] = value)); + files.list.forEach((value, index) => (divArray[index][1] = value)); + files.minified.forEach((value, index) => (divArray[index][2] = value)); + + for (const [ext, file, min] of divArray) { + ui.div( + { text: cyan().bold(ext), width: 15, align: "center" }, + { text: file, width: 45 }, + { text: red().bold(min), width: 30 } + ); + } + } + console.log(`${ui.toString()}\n`); + ui.resetOutput(); + + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: cyan().bold("Required dependency and files"), width: 70, align: "center" }); + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: "\n", width: 70, align: "center" }); + + for (const [fileName, deps] of Object.entries(ast.dependencies)) { + ui.div({ text: magenta().bold(fileName), width: 70, align: "center" }); + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div( + { text: white().bold("required stmt"), width: 32, align: "left" }, + { text: white().bold("try/catch"), width: 12, align: "center" }, + { text: white().bold("source location"), width: 26, align: "center" } + ); + for (const [depName, infos] of Object.entries(deps)) { + const { start, end } = infos.location; + const position = `[${start.line}:${start.column}] - [${end.line}:${end.column}]`; + + ui.div( + { text: depName, width: 32 }, + { text: (infos.inTry ? green : red)().bold(infos.inTry), width: 12, align: "center" }, + { text: grey().bold(position), width: 26, align: "center" } + ); + } + ui.div({ text: "", width: 70, align: "center" }); + console.log(`${ui.toString()}`); + ui.resetOutput(); + } + + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: cyan().bold("AST Warnings"), width: 70, align: "center" }); + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + ui.div({ text: "", width: 70, align: "center" }); + + ui.div( + { text: white().bold("file"), width: 30 }, + { text: white().bold("kind"), width: 15, align: "center" }, + { text: white().bold("source location"), width: 25, align: "center" } + ); + + for (const warning of ast.warnings) { + const position = warning.kind === "encoded-literal" ? + warning.location.map((loc) => locationToString(loc)).join(" // ") : + locationToString(warning.location); + + ui.div( + { text: warning.file || grey().bold("NONE"), width: 30 }, + { text: magenta().bold(warning.kind), width: 15, align: "center" }, + { text: grey().bold(position), width: 25, align: "center" } + ); + if (warning.value) { + ui.div({ text: "", width: 70, align: "center" }); + ui.div({ text: yellow().bold(warning.value), width: 70, align: "center" }); + } + ui.div({ text: grey("-------------------------------------------------------------------"), width: 70 }); + } + + console.log(`${ui.toString()}`); + ui.resetOutput(); + + return void 0; +} diff --git a/src/commands/vulnerability.js b/src/commands/vulnerability.js new file mode 100644 index 00000000..e00c5dd6 --- /dev/null +++ b/src/commands/vulnerability.js @@ -0,0 +1,29 @@ +// Import Third-party Dependencies +import * as vuln from "@nodesecure/vuln"; +import * as i18n from "@nodesecure/i18n"; + +import ms from "ms"; +import Spinner from "@slimio/async-cli-spinner"; +import kleur from "kleur"; + +export async function hydrate() { + const strategy = await vuln.setStrategy(vuln.strategies.SECURITY_WG, { + hydrateDatabase: false + }); + + await strategy.deleteDatabase(); + + const spinner = new Spinner({ + text: kleur.white().bold(i18n.getToken("cli.commands.hydrate_db.running", kleur.yellow().bold("nodejs security-wg"))) + }).start(); + + try { + await strategy.hydrateDatabase(); + + const elapsedTime = cyan(ms(Number(spinner.elapsedTime.toFixed(2)))); + spinner.succeed(white().bold(i18n.getToken("cli.commands.hydrate_db.success", elapsedTime))); + } + catch (err) { + spinner.failed(err.message); + } +} diff --git a/src/httpServer.js b/src/httpServer.js index f35baee6..f07b25c7 100644 --- a/src/httpServer.js +++ b/src/httpServer.js @@ -3,8 +3,9 @@ // Import Node.js Dependencies import fs from "fs"; import { readFile } from "fs/promises"; -import { join } from "path"; +import { join, dirname } from "path"; import { pipeline } from "stream"; +import { fileURLToPath } from "url"; // Import Third-party Dependencies import send from "@polka/send-type"; @@ -13,11 +14,12 @@ import polka from "polka"; import sirv from "sirv"; import open from "open"; import zup from "zup"; -import i18n from "@nodesecure/i18n"; +import * as i18n from "@nodesecure/i18n"; import { getFlags, getFlagFile, getManifest } from "@nodesecure/flags"; // CONSTANTS const kNodeSecureFlags = getFlags(); +const __dirname = dirname(fileURLToPath(import.meta.url)); const kProjectRootDir = join(__dirname, ".."); export async function startHTTPServer(dataFilePath, configPort) { diff --git a/src/utils.js b/src/utils.js index 0023745b..a00faa0d 100644 --- a/src/utils.js +++ b/src/utils.js @@ -9,3 +9,10 @@ export function formatBytes(bytes, decimals) { return parseFloat((bytes / Math.pow(1024, id)).toFixed(dm)) + " " + sizes[id]; } + +export function locationToString(location) { + const start = `${location[0][0]}:${location[0][1]}`; + const end = `${location[1][0]}:${location[1][1]}`; + + return `[${start}] - [${end}]`; +} From f0165bc8ad959e8eeacbab9eae9a64599e40c32d Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 11 Sep 2021 18:20:58 +0200 Subject: [PATCH 03/32] chore: update NodeSecure dependencies --- package-lock.json | 93 ++++++++++++++++++----------------------------- package.json | 6 +-- 2 files changed, 39 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0f074ceb..a6bd60ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1088,39 +1088,12 @@ "integrity": "sha512-3Sn8N78jWiOdatBTTLt6YbEHNhkuO13T9gQT3bhVkQdU/cQ4VKX6K76Up8HQLH5IQ168vIzAz8eWvM4dPsnK7w==" }, "@nodesecure/i18n": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@nodesecure/i18n/-/i18n-1.1.1.tgz", - "integrity": "sha512-iTkUA0isViwGG/vsSbTWsbMUQV7Ee5VWO0NXp+KYXKH4iM96R/d1dmxgkMw07O4AJmrQU/BKk2CEdZg5tX1tCQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nodesecure/i18n/-/i18n-1.2.0.tgz", + "integrity": "sha512-gHwUsOCKkVAvOEndWIKYLo91827++yJTL0C6FJTkglMzv4ZrRDi5sBWKgP8a3+NdYU20jsC50VgMQBZ9XzJ8+Q==", "requires": { - "cacache": "^15.2.0", + "cacache": "^15.3.0", "lodash.get": "^4.4.2" - }, - "dependencies": { - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - } } }, "@nodesecure/js-x-ray": { @@ -1152,21 +1125,20 @@ } }, "@nodesecure/scanner": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.1.0.tgz", - "integrity": "sha512-zwJEWyHj3FEPGuvk4gUs+d1256H1DdsGc+rlx0PZJEbG+FsbqGlT+J4Ljvv1r16/9822z31an3HAu7nimflWlw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.2.0.tgz", + "integrity": "sha512-QbfcXy7UmFHz05VT792AAIKccWeXTYEhpBPFFcQlMyL30ZqLpvwzGgqo8hqVh0VyoOhFM7r/HCw5wKXpJJI9RA==", "requires": { "@nodesecure/flags": "^1.0.0", "@nodesecure/fs-walk": "^1.0.0", "@nodesecure/i18n": "^1.1.1", "@nodesecure/js-x-ray": "^4.0.1", - "@nodesecure/npm-registry-sdk": "^1.1.2", + "@nodesecure/npm-registry-sdk": "^1.2.0", "@nodesecure/ntlp": "^1.2.1", "@nodesecure/vuln": "^1.2.0", "@npm/types": "^1.0.1", "@npmcli/arborist": "^2.8.0", - "@slimio/async-cli-spinner": "^0.5.2", - "@slimio/lock": "^0.5.0", + "@slimio/lock": "^1.0.0", "builtins": "^4.0.0", "combine-async-iterators": "^2.0.0", "filenamify": "^5.0.0", @@ -1174,8 +1146,6 @@ "itertools": "^1.7.0", "kleur": "^4.1.4", "lodash.difference": "^4.5.0", - "lodash.get": "^4.4.2", - "ms": "^2.1.3", "pacote": "^11.3.5", "semver": "^7.3.4" } @@ -1192,9 +1162,9 @@ }, "dependencies": { "ansi-regex": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz", - "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "emoji-regex": { "version": "9.2.2", @@ -1217,22 +1187,23 @@ } }, "strip-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz", - "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "requires": { - "ansi-regex": "^6.0.0" + "ansi-regex": "^6.0.1" } } } }, "@nodesecure/vuln": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.2.0.tgz", - "integrity": "sha512-DV3HbhUqF4pJkoThh2aKFYW2aU8LJX7FREX6Lf6aUgJp0Jyc3rXB+OQC15k0OT7EkZQGRaXCMQmD4m/6UraKig==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.3.0.tgz", + "integrity": "sha512-VQ/1H/Ls2PNmHDvj0ShBfufMzpM2ZdiRjPmPjpTir58nefaGQGwcxLSaltTIBgfP4/LJCge/i/warJlnCPX9Og==", "requires": { - "@nodesecure/npm-registry-sdk": "^1.1.1", - "@npmcli/arborist": "^2.8.0", + "@myunisoft/httpie": "^1.1.0", + "@nodesecure/npm-registry-sdk": "^1.2.0", + "@npmcli/arborist": "^2.8.3", "@slimio/github": "^1.0.0", "semver": "^7.3.5" } @@ -1530,9 +1501,9 @@ "integrity": "sha512-xQ0AgodIE8nHYy508AVmpxqnIr/Ytyz5Xm7I6NQU33+RvDzs94T9c0dTnUWuariByLr1geXXe6kMaTM9TcOIEA==" }, "@slimio/lock": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@slimio/lock/-/lock-0.5.0.tgz", - "integrity": "sha512-Eu4Krm0GDkW8l6+0l2LoIkcZwxJc9v31EEXkK26Ik9zcn1eYubqzF3mczN8kIGVAr651yzSG1eHgh0ngV49fFw==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slimio/lock/-/lock-1.0.0.tgz", + "integrity": "sha512-cBHtztO7tHhWBWB1nurps6vXG7jcdSTHuzI6hwW2VjGmrNN0x/3+qjHQ5JgK6OQcrGwaVMJuU+hSM6iggaJ3oA==" }, "@slimio/wcwidth": { "version": "1.0.0", @@ -3085,9 +3056,12 @@ "dev": true }, "fast-xml-parser": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", - "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.20.0.tgz", + "integrity": "sha512-cMQwDJYVDjMPU56DviszewgMKuNzuf4NQSBuDf9RgZ6FKm5QEMxW05Za8lvnuL6moxoeZVUWBlL733WmovvV6g==", + "requires": { + "strnum": "^1.0.3" + } }, "fastq": { "version": "1.12.0", @@ -5972,6 +5946,11 @@ "escape-string-regexp": "^1.0.2" } }, + "strnum": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.3.tgz", + "integrity": "sha512-GVoRjsqAYZkAH16GDzfTuafuwKxzKdaaCQyLaWf37gOP1e2PPbAKWoME1OmO+c4RCKMfNrrPRDLFCNBFU45N/A==" + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", diff --git a/package.json b/package.json index 0d3897b6..94f94c0d 100644 --- a/package.json +++ b/package.json @@ -87,10 +87,10 @@ }, "dependencies": { "@nodesecure/flags": "^1.0.0", - "@nodesecure/i18n": "^1.1.1", + "@nodesecure/i18n": "^1.2.0", "@nodesecure/npm-registry-sdk": "^1.2.0", - "@nodesecure/scanner": "^1.1.0", - "@nodesecure/vuln": "^1.2.0", + "@nodesecure/scanner": "^1.2.0", + "@nodesecure/vuln": "^1.3.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", "cliui": "^7.0.4", From bf7130500e8c7fb112ec889ec48d12d00c2b7b85 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 11 Sep 2021 18:23:51 +0200 Subject: [PATCH 04/32] refactor(lang): use new i18n.getLanguages method --- src/commands/lang.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/commands/lang.js b/src/commands/lang.js index 341afced..8ddf570c 100644 --- a/src/commands/lang.js +++ b/src/commands/lang.js @@ -3,22 +3,16 @@ import * as i18n from "@nodesecure/i18n"; import qoa from "qoa"; import kleur from "kleur"; -const { white, green, yellow } = kleur; - export async function set() { - const currentLang = i18n.getLocalLang(); - const langs = ["french", "english"]; - - langs.splice(langs.indexOf(currentLang), 1); - langs.unshift(currentLang); - console.log(""); const { selectedLang } = await qoa.interactive({ - query: green().bold(` ${i18n.getToken("cli.commands.lang.question_text")}`), + query: kleur.green().bold(` ${i18n.getToken("cli.commands.lang.question_text")}`), handle: "selectedLang", - menu: langs + menu: i18n.getLanguages() }); await i18n.setLocalLang(selectedLang); - console.log(white().bold(`\n ${i18n.getToken("cli.commands.lang.new_selection", yellow().bold(selectedLang))}`)); + console.log( + kleur.white().bold(`\n ${i18n.getToken("cli.commands.lang.new_selection", kleur.yellow().bold(selectedLang))}`) + ); } From 4ad8728b9abdee8c66f1b8d999ce6bfb2655d1fc Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 11 Sep 2021 19:28:12 +0200 Subject: [PATCH 05/32] chore: setup scanner Logger and old tree walker Spinners --- package-lock.json | 20 ++++----- package.json | 4 +- src/commands/scanner.js | 97 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 106 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6bd60ff..914ede08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1108,9 +1108,9 @@ } }, "@nodesecure/npm-registry-sdk": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@nodesecure/npm-registry-sdk/-/npm-registry-sdk-1.2.0.tgz", - "integrity": "sha512-xWW1R+UexRXAYZcmroJBf99BDfGfeyWDegk0cATBb3K+xjMN6XkQ6YJrzCYblnJYpUk74H1fDbaI5Xau3F6MFQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nodesecure/npm-registry-sdk/-/npm-registry-sdk-1.2.1.tgz", + "integrity": "sha512-1u1vhOocDyfux5V7/jxM9g5Olg/Llg5/mS4GawgISYLAX7NaVmgkldIhIScoDZXZdMaNQZYCp7nByCNqYLnsFQ==", "requires": { "@myunisoft/httpie": "^1.1.0", "@npm/types": "^1.0.1" @@ -1125,23 +1125,23 @@ } }, "@nodesecure/scanner": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.2.0.tgz", - "integrity": "sha512-QbfcXy7UmFHz05VT792AAIKccWeXTYEhpBPFFcQlMyL30ZqLpvwzGgqo8hqVh0VyoOhFM7r/HCw5wKXpJJI9RA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.3.0.tgz", + "integrity": "sha512-XZqsGaJRbFFC4f9kRf1EziEqJl+e95rZQpS5rWhVFqbe06coQB/2jeV/c3/tX7UsEYn1rGRITbmQp/XTHTfVIw==", "requires": { "@nodesecure/flags": "^1.0.0", "@nodesecure/fs-walk": "^1.0.0", - "@nodesecure/i18n": "^1.1.1", + "@nodesecure/i18n": "^1.2.0", "@nodesecure/js-x-ray": "^4.0.1", "@nodesecure/npm-registry-sdk": "^1.2.0", "@nodesecure/ntlp": "^1.2.1", - "@nodesecure/vuln": "^1.2.0", + "@nodesecure/vuln": "^1.3.0", "@npm/types": "^1.0.1", - "@npmcli/arborist": "^2.8.0", + "@npmcli/arborist": "^2.8.3", "@slimio/lock": "^1.0.0", "builtins": "^4.0.0", "combine-async-iterators": "^2.0.0", - "filenamify": "^5.0.0", + "filenamify": "^5.0.1", "is-minified-code": "^2.0.0", "itertools": "^1.7.0", "kleur": "^4.1.4", diff --git a/package.json b/package.json index 94f94c0d..0282f466 100644 --- a/package.json +++ b/package.json @@ -88,8 +88,8 @@ "dependencies": { "@nodesecure/flags": "^1.0.0", "@nodesecure/i18n": "^1.2.0", - "@nodesecure/npm-registry-sdk": "^1.2.0", - "@nodesecure/scanner": "^1.2.0", + "@nodesecure/npm-registry-sdk": "^1.2.1", + "@nodesecure/scanner": "^1.3.0", "@nodesecure/vuln": "^1.3.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", diff --git a/src/commands/scanner.js b/src/commands/scanner.js index cfafcf07..18ae18b9 100644 --- a/src/commands/scanner.js +++ b/src/commands/scanner.js @@ -6,12 +6,16 @@ import events from "events"; // Import Third-party Dependencies import kleur from "kleur"; import filenamify from "filenamify"; +import Spinner from "@slimio/async-cli-spinner"; +import ms from "ms"; import * as i18n from "@nodesecure/i18n"; import * as scanner from "@nodesecure/scanner"; // Import Internal Dependencies import * as http from "./http.js"; +Spinner.DEFAULT_SPINNER = "dots"; + export async function auto(packageName, opts) { const keep = Boolean(opts.keep); delete opts.keep; @@ -42,8 +46,10 @@ export async function auto(packageName, opts) { export async function cwd(opts) { const { depth: maxDepth = 4, output, nolock, full, vulnerabilityStrategy } = opts; - const payload = await scanner.cwd(void 0, - { verbose: true, maxDepth, usePackageLock: !nolock, fullLockMode: full, vulnerabilityStrategy } + const payload = await scanner.cwd( + process.cwd(), + { maxDepth, usePackageLock: !nolock, fullLockMode: full, vulnerabilityStrategy }, + initLogger() ); return await logAndWrite(payload, output); @@ -52,11 +58,88 @@ export async function cwd(opts) { export async function from(packageName, opts) { const { depth: maxDepth = 4, output } = opts; - const payload = await scanner.from(packageName, { verbose: true, maxDepth }); + const payload = await scanner.from(packageName, { maxDepth }, initLogger(packageName)); return await logAndWrite(payload, output); } +function initLogger(packageName) { + const spinner = { + walkTree: new Spinner(), + tarball: new Spinner(), + registry: new Spinner(), + fetchManifest: new Spinner(), + i18n: { + start: { + fetchManifest: "cli.commands.from.searching", + walkTree: "depWalker.fetch_and_walk_deps", + tarball: "depWalker.waiting_tarball", + registry: "depWalker.fetch_on_registry" + }, + tick: { + tarball: "depWalker.fetch_metadata", + registry: "depWalker.fetch_on_registry" + }, + end: { + fetchManifest: "cli.commands.from.fetched", + walkTree: "depWalker.success_fetch_deptree", + tarball: "depWalker.success_tarball", + registry: "depWalker.success_registry_metadata" + } + } + }; + + const logger = new scanner.Logger(); + logger.on("start", (eventName) => { + if (!(eventName in spinner)) { + return; + } + + if (eventName === "fetchManifest") { + spinner[eventName] + .start(kleur.white().bold(i18n.getToken(spinner.i18n.start[eventName], kleur.green().bold(packageName)))); + } + else { + spinner[eventName] + .start(kleur.white().bold(i18n.getToken(spinner.i18n.start[eventName]))); + } + }); + logger.on("tick", (eventName) => { + if (!(eventName in spinner) || eventName === "walkTree") { + return; + } + + const stats = kleur.gray().bold(`[${kleur.yellow().bold(logger.count(eventName))}/${logger.count("walkTree")}]`); + spinner[eventName].text = kleur.white().bold(`${i18n.getToken(spinner.i18n.tick[eventName])} ${stats}`); + }); + logger.on("end", (eventName) => { + if (!(eventName in spinner)) { + return; + } + + const spin = spinner[eventName]; + const tokenName = spinner.i18n.end[eventName]; + const execTime = kleur.cyan().bold(ms(Number(spin.elapsedTime.toFixed(2)))); + + if (eventName === "walkTree") { + spin.succeed(kleur.white().bold( + i18n.getToken(tokenName, kleur.yellow().bold(i18n.getToken("depWalker.dep_tree")), execTime))); + } + else if (eventName === "registry") { + spin.succeed(kleur.white().bold(i18n.getToken(tokenName))); + } + else if (eventName === "tarball") { + spin.succeed(kleur.white().bold(i18n.getToken(tokenName, kleur.green().bold(logger.count("walkTree")), execTime))); + } + else if (eventName === "fetchManifest") { + spin.succeed(kleur.white().bold(i18n.getToken(tokenName, kleur.green().bold(packageName), execTime))); + console.log(""); + } + }); + + return logger; +} + async function logAndWrite(payload, output = "nsecure-result") { if (payload === null) { console.log(i18n.getToken("cli.no_dep_to_proceed")); @@ -64,12 +147,20 @@ async function logAndWrite(payload, output = "nsecure-result") { return null; } + if (payload.warnings.length > 0) { + console.log(`\n ${kleur.yellow().underline().bold("Global Warning:")}\n`); + for (const warning of payload.warnings) { + console.log(kleur.red().bold(warning)); + } + } + const ret = JSON.stringify(payload, null, 2); const fileName = path.extname(output) === ".json" ? filenamify(output) : `${filenamify(output)}.json`; const filePath = path.join(process.cwd(), fileName); await fs.writeFile(filePath, ret); + console.log(""); console.log(kleur.white().bold(i18n.getToken("cli.successfully_written_json", kleur.green().bold(filePath)))); console.log(""); From d528d08d0161afe1f1e7bd1a571af82fcd6b6a80 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 11 Sep 2021 19:31:14 +0200 Subject: [PATCH 06/32] chore: update @nodesecure/scanner (1.3.0 to 1.4.0) --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 914ede08..a898d18e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1125,15 +1125,15 @@ } }, "@nodesecure/scanner": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.3.0.tgz", - "integrity": "sha512-XZqsGaJRbFFC4f9kRf1EziEqJl+e95rZQpS5rWhVFqbe06coQB/2jeV/c3/tX7UsEYn1rGRITbmQp/XTHTfVIw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.4.0.tgz", + "integrity": "sha512-Bnaw3VnhxU18dW9IgDjvmM0zpkrW+Lpl5goM2DBg0FSRXvW0na5An8Kx85yGGL7OjdpgOyLLurua4qSsq/HbIg==", "requires": { "@nodesecure/flags": "^1.0.0", "@nodesecure/fs-walk": "^1.0.0", "@nodesecure/i18n": "^1.2.0", "@nodesecure/js-x-ray": "^4.0.1", - "@nodesecure/npm-registry-sdk": "^1.2.0", + "@nodesecure/npm-registry-sdk": "^1.2.1", "@nodesecure/ntlp": "^1.2.1", "@nodesecure/vuln": "^1.3.0", "@npm/types": "^1.0.1", diff --git a/package.json b/package.json index 0282f466..2e4ddc23 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "@nodesecure/flags": "^1.0.0", "@nodesecure/i18n": "^1.2.0", "@nodesecure/npm-registry-sdk": "^1.2.1", - "@nodesecure/scanner": "^1.3.0", + "@nodesecure/scanner": "^1.4.0", "@nodesecure/vuln": "^1.3.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", From 4a5f87e39b918d303567bef57b63100dcc061e5a Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 9 Oct 2021 17:45:48 +0200 Subject: [PATCH 07/32] chore: update @nodesecure/flags (1.0.0 to 1.1.0) --- package-lock.json | 75 ++++++++++++++++++++++++++++------------------- package.json | 7 +++-- 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index a898d18e..4e4d84c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -700,9 +700,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "strip-ansi": { @@ -1078,9 +1078,9 @@ } }, "@nodesecure/flags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nodesecure/flags/-/flags-1.0.0.tgz", - "integrity": "sha512-qm8t0gHmcOcBmcHKXVo4Xw7D6CFTqfh91c7Wqt2ZIBo5QSgV1WSTwUldtWv7zpmHmZvbPflYi5XlQKjPkCaFpw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nodesecure/flags/-/flags-1.1.0.tgz", + "integrity": "sha512-jsdH1IUmAUoYGQpYphY3OeZZmrqAe5f8C9ru42ur8t7SQ7nrTrulnBfUjLhNe+4m/WEQ53g/QJvyQFbEdMpFJw==" }, "@nodesecure/fs-walk": { "version": "1.0.0", @@ -1466,9 +1466,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "kleur": { "version": "3.0.3", @@ -2269,9 +2269,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -2397,6 +2397,15 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2814,9 +2823,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "escape-string-regexp": { @@ -3381,6 +3390,12 @@ "sshpk": "^1.7.0" } }, + "httpie": { + "version": "2.0.0-next.13", + "resolved": "https://registry.npmjs.org/httpie/-/httpie-2.0.0-next.13.tgz", + "integrity": "sha512-KbKOnq8wt0hVEfteYCSnEsPgzaWxcVc4qZ4OaDU9mVOYLRo3XChjWs3MiuRgFu5y+4JDo7sDKdKzkAn1ljQYFA==", + "dev": true + }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -5342,9 +5357,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -5872,9 +5887,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "strip-ansi": { @@ -6003,9 +6018,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "is-fullwidth-code-point": { @@ -6131,9 +6146,9 @@ "dev": true }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-fast-properties": { @@ -6471,9 +6486,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", diff --git a/package.json b/package.json index 2e4ddc23..8c2fbed9 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "prepublishOnly": "npm run build && pkg-ok", "build": "node ./esbuild.config.js", "test": "npm run test-only && npm run eslint", - "test-only": "jest --coverage" + "test-only": "cross-env NODE_OPTIONS=--experimental-vm-modules jest" }, "files": [ "bin", @@ -60,6 +60,7 @@ "setupFilesAfterEnv": [ "./jest.setup.js" ], + "collectCoverage": true, "collectCoverageFrom": [ "**/src/**/*.js" ], @@ -76,8 +77,10 @@ "devDependencies": { "@nodesecure/eslint-config": "^1.2.0", "@types/node": "^16.7.10", + "cross-env": "^7.0.3", "esbuild": "^0.12.25", "eslint": "^7.32.0", + "httpie": "^2.0.0-next.13", "jest": "^27.1.0", "list.js": "^2.3.1", "pkg-ok": "^2.3.1", @@ -86,7 +89,7 @@ "vis-network": "^9.1.0" }, "dependencies": { - "@nodesecure/flags": "^1.0.0", + "@nodesecure/flags": "^1.1.0", "@nodesecure/i18n": "^1.2.0", "@nodesecure/npm-registry-sdk": "^1.2.1", "@nodesecure/scanner": "^1.4.0", From d36bb6a36ed6477a246bf10aee1738dffd03ee30 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 9 Oct 2021 17:51:18 +0200 Subject: [PATCH 08/32] test: make it work with ESM --- jest.setup.js | 3 +- src/httpServer.js | 4 +- test/__snapshots__/httpServer.js.snap | 102 ++++++++++++++++++++++++++ test/fixtures/httpServer.json | 3 + test/httpServer.js | 22 +++--- 5 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 test/__snapshots__/httpServer.js.snap create mode 100644 test/fixtures/httpServer.json diff --git a/jest.setup.js b/jest.setup.js index 47ed524c..2cc5f635 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,2 +1,3 @@ -"use strict"; +import { jest } from "@jest/globals"; + jest.setTimeout(30000); diff --git a/src/httpServer.js b/src/httpServer.js index f07b25c7..485bd6ba 100644 --- a/src/httpServer.js +++ b/src/httpServer.js @@ -15,7 +15,7 @@ import sirv from "sirv"; import open from "open"; import zup from "zup"; import * as i18n from "@nodesecure/i18n"; -import { getFlags, getFlagFile, getManifest } from "@nodesecure/flags"; +import { getFlags, lazyFetchFlagFile, getManifest } from "@nodesecure/flags"; // CONSTANTS const kNodeSecureFlags = getFlags(); @@ -64,7 +64,7 @@ export async function startHTTPServer(dataFilePath, configPort) { res.writeHead(200, { "Content-Type": "text/html" }); - return pipeline(getFlagFile(req.params.title), res, (err) => { + return pipeline(lazyFetchFlagFile(req.params.title), res, (err) => { if (err) { console.error(err); } diff --git a/test/__snapshots__/httpServer.js.snap b/test/__snapshots__/httpServer.js.snap new file mode 100644 index 00000000..4c13028b --- /dev/null +++ b/test/__snapshots__/httpServer.js.snap @@ -0,0 +1,102 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`'/data' should return the fixture payload we expect 1`] = ` +Object { + "foo": "bar", +} +`; + +exports[`'/flags' should return the flags list as JSON 1`] = ` +Object { + "bannedFile": Object { + "emoji": "⚔️", + "title": "hasBannedFile", + "tooltipDescription": "The project has at least one sensitive file.", + }, + "customResolver": Object { + "emoji": "💎", + "title": "hasCustomResolver", + "tooltipDescription": "The package has dependencies that are not packages.", + }, + "duplicated": Object { + "emoji": "🎭", + "title": "isDuplicated", + "tooltipDescription": "The package is also used somewhere else in the dependency tree but with a different version", + }, + "externalCapacity": Object { + "emoji": "🌍", + "title": "hasExternalCapacity", + "tooltipDescription": "The package use at least one Node.js dependency capable to communicate outside or to establish a listening server.", + }, + "hasScript": Object { + "emoji": "📦", + "title": "hasScript", + "tooltipDescription": "has \`post\` and/or \`pre\` (un)install npm script", + }, + "indirectDependencies": Object { + "emoji": "🌲", + "title": "hasIndirectDependencies", + "tooltipDescription": "The package have indirect dependencies.", + }, + "isDead": Object { + "emoji": "💀", + "title": "isDead", + "tooltipDescription": "The dependency has not received update from at least one year!", + }, + "isDeprecated": Object { + "emoji": "⛔️", + "title": "isDeprecated", + "tooltipDescription": "The package is deprecated.", + }, + "isGit": Object { + "emoji": "☁️", + "title": "isGit", + "tooltipDescription": "The package (project) is a git repository", + }, + "manyPublishers": Object { + "emoji": "👥", + "title": "hasManyPublishers", + "tooltipDescription": "The package has several publishers.", + }, + "minifiedCode": Object { + "emoji": "🔬", + "title": "hasMinifiedCode", + "tooltipDescription": "The package seems to have files that are minified/uglified.", + }, + "missingOrUnusedDependency": Object { + "emoji": "👀", + "title": "hasMissingOrUnusedDependency", + "tooltipDescription": "A dependency is missing in package.json or a dependency is installed but never used!", + }, + "multipleLicense": Object { + "emoji": "📚", + "title": "hasMultipleLicenses", + "tooltipDescription": "The package has multiple licenses in multiple files", + }, + "nativeCode": Object { + "emoji": "🐲", + "title": "hasNativeCode", + "tooltipDescription": "The package use native components (package, file, configuration).", + }, + "noLicense": Object { + "emoji": "📜", + "title": "hasNoLicense", + "tooltipDescription": "The package does not seem to have a license.", + }, + "outdated": Object { + "emoji": "⌚️", + "title": "isOutdated", + "tooltipDescription": "The current package version is not equal to the package latest version!", + }, + "vulnerabilities": Object { + "emoji": "🚨", + "title": "vulnerabilities", + "tooltipDescription": "The package have one or many vulnerabilities.", + }, + "warnings": Object { + "emoji": "⚠", + "title": "hasWarnings", + "tooltipDescription": "The AST analysis has detected warnings (suspect import, unsafe regex ..)", + }, +} +`; diff --git a/test/fixtures/httpServer.json b/test/fixtures/httpServer.json new file mode 100644 index 00000000..c8c4105e --- /dev/null +++ b/test/fixtures/httpServer.json @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} diff --git a/test/httpServer.js b/test/httpServer.js index 0806f0c4..d69b8d6a 100644 --- a/test/httpServer.js +++ b/test/httpServer.js @@ -1,22 +1,24 @@ // Require Node.js Dependencies -const { readFileSync } = require("fs"); -const { join } = require("path"); +import { readFileSync } from "fs"; +import { fileURLToPath } from "url"; +import path from "path"; // Require Third-party Dependencies -const { get } = require("httpie"); -const zup = require("zup"); +import { get } from "httpie"; +import zup from "zup"; +import * as i18n from "@nodesecure/i18n"; +import * as flags from "@nodesecure/flags"; // Require Internal Dependencies -const startHTTPServer = require("../src/httpServer"); -const i18n = require("../src/i18n"); +import { startHTTPServer } from "../src/httpServer.js"; // CONSTANTS const HTTP_PORT = 1337; const HTTP_URL = new URL(`http://localhost:${HTTP_PORT}`); -const JSON_PATH = join(__dirname, "fixtures", "httpServer", "payload.json"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const INDEX_HTML = readFileSync(join(__dirname, "..", "views", "index.html"), "utf-8"); -const IS_GIT_HTML = readFileSync(join(__dirname, "..", "flags", "isGit.html"), "utf-8"); +const JSON_PATH = path.join(__dirname, "fixtures", "httpServer.json"); +const INDEX_HTML = readFileSync(path.join(__dirname, "..", "views", "index.html"), "utf-8"); // VARS let httpServer; @@ -56,7 +58,7 @@ test("'/flags/description/isGit' should return the isGit HTML description", asyn expect(result.statusCode).toStrictEqual(200); expect(result.headers["content-type"]).toStrictEqual("text/html"); - expect(result.data).toStrictEqual(IS_GIT_HTML); + expect(result.data).toStrictEqual(await flags.eagerFetchFlagFile("isGit")); }); test("'/flags/description/foobar' should return a 404 error", async() => { From 716dbf1b0c16e7ec982d2f5bf6da22cb1e98bed8 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 9 Oct 2021 18:18:28 +0200 Subject: [PATCH 09/32] fix: front-end build --- esbuild.config.js | 80 +++++++++++++++------------------------------- package.json | 6 +--- public/js/utils.js | 5 +-- views/index.html | 4 +-- 4 files changed, 32 insertions(+), 63 deletions(-) diff --git a/esbuild.config.js b/esbuild.config.js index 66b0d2a9..f688d400 100644 --- a/esbuild.config.js +++ b/esbuild.config.js @@ -12,58 +12,30 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const kPublicDir = path.join(__dirname, "public"); const kOutDir = path.join(__dirname, "dist"); const kImagesDir = path.join(kPublicDir, "img"); -const kImageExt = new Set([".png", ".svg"]); -const kFontExt = new Set([".woff", ".ttf", ".woff2", ".eot"]); -// Items to import -const imagesToCopy = ["github-mark.png", "npm-icon.svg"]; - -async function main() { - await fs.mkdir(path.join(kOutDir, "img"), { recursive: true }); - - const buildOptions = { - entryPoints: [ - path.join(kPublicDir, "js", "master.js"), - path.join(kPublicDir, "css", "style.css") - ], - loader: { - ".jpg": "file", - ".png": "file", - ".woff": "file", - ".woff2": "file", - ".eot": "file", - ".ttf": "file", - ".svg": "file" - }, - platform: "browser", - bundle: true, - sourcemap: true, - treeShaking: true, - outdir: kOutDir - }; - await Promise.all([ - esbuild.build(buildOptions), - ...imagesToCopy.map((name) => fs.copyFile(path.join(kImagesDir, name), path.join(kOutDir, name))) - ]); - - const toWaitPromises = [ - fs.copyFile(path.join(kPublicDir, "favicon.ico"), path.join(kOutDir, "favicon.ico")) - ]; - const dirents = await fs.readdir(kOutDir, { withFileTypes: true }); - for (const dirent of dirents) { - const ext = path.extname(dirent.name); - const fullPath = path.join(kOutDir, dirent.name); - - if (kImageExt.has(ext)) { - const promise = fs.rename(fullPath, path.join(kOutDir, "img", dirent.name)); - toWaitPromises.push(promise); - } - else if (kFontExt.has(ext)) { - const promise = fs.rename(fullPath, path.join(kOutDir, "css", dirent.name)); - toWaitPromises.push(promise); - } - } - - await Promise.all(toWaitPromises); -} -main().catch(() => process.exit(1)); +await esbuild.build({ + entryPoints: [ + path.join(kPublicDir, "js", "master.js"), + path.join(kPublicDir, "css", "style.css") + ], + loader: { + ".jpg": "file", + ".png": "file", + ".woff": "file", + ".woff2": "file", + ".eot": "file", + ".ttf": "file", + ".svg": "file" + }, + platform: "browser", + bundle: true, + sourcemap: true, + treeShaking: true, + outdir: kOutDir +}); + +await Promise.all([ + ...["github-mark.png", "npm-icon.svg"] + .map((name) => fs.copyFile(path.join(kImagesDir, name), path.join(kOutDir, name))), + fs.copyFile(path.join(kPublicDir, "favicon.ico"), path.join(kOutDir, "favicon.ico")) +]); diff --git a/package.json b/package.json index 8c2fbed9..26c46a84 100644 --- a/package.json +++ b/package.json @@ -23,11 +23,7 @@ "bin", "dist", "src", - "views", - "flags", - "i18n", - "index.js", - "index.d.ts" + "views" ], "repository": { "type": "git", diff --git a/public/js/utils.js b/public/js/utils.js index 7edb46eb..f34d767f 100644 --- a/public/js/utils.js +++ b/public/js/utils.js @@ -46,13 +46,14 @@ export function createAvatar(name, desc) { }); const imgEl = document.createElement("img"); + console.log(avatarURL); if (!("email" in desc) || typeof desc.email === "undefined" || desc.email === null || desc.email === "") { - imgEl.src = `img/${avatarURL}`; + imgEl.src = `${avatarURL}`; } else { imgEl.src = `https://unavatar.now.sh/${desc.email}`; imgEl.onerror = () => { - imgEl.src = `img/${avatarURL}`; + imgEl.src = `${avatarURL}`; }; } imgEl.alt = name; diff --git a/views/index.html b/views/index.html index 227d4c07..c5941070 100644 --- a/views/index.html +++ b/views/index.html @@ -12,7 +12,7 @@
- github + github

NODE-SECURE

@@ -216,7 +216,7 @@

[[=z.token('popups.warnings.title')]]

- +
From f269692ff9aeba58d0c8c2a973bd1a1ee7fb7a8b Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 9 Oct 2021 18:23:39 +0200 Subject: [PATCH 10/32] fix(httpServer): always open link when the server is listening --- src/httpServer.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/httpServer.js b/src/httpServer.js index 485bd6ba..6c14147f 100644 --- a/src/httpServer.js +++ b/src/httpServer.js @@ -76,9 +76,7 @@ export async function startHTTPServer(dataFilePath, configPort) { const link = `http://localhost:${httpServer.server.address().port}`; console.log(kleur.magenta().bold(i18n.getToken("cli.http_server_started")), kleur.cyan().bold(link)); - if (typeof configPort === "undefined") { - open(link); - } + open(link); }); return httpServer; From 296fbbc79abeee5479401f954eac8334c6faeb8c Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 9 Oct 2021 18:27:46 +0200 Subject: [PATCH 11/32] fix: Emojis legend menu --- public/js/master.js | 4 ++-- public/js/utils.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/public/js/master.js b/public/js/master.js index c0424cbc..cdda387e 100644 --- a/public/js/master.js +++ b/public/js/master.js @@ -129,8 +129,8 @@ document.addEventListener("DOMContentLoaded", async() => { document.getElementById("legend_popup_btn").addEventListener("click", () => { toggleModal("popup-legends"); const legendsFlagsFragment = document.createDocumentFragment(); - for (const [flagName, { title }] of Object.entries(FLAGS)) { - legendsFlagsFragment.appendChild(utils.createLegend(flagName, title)); + for (const { title, emoji } of Object.values(FLAGS)) { + legendsFlagsFragment.appendChild(utils.createLegend(emoji, title)); } legendsFlagsFragment.appendChild(utils.createLegend("🎭", "isDuplicate")); document.getElementById("flag-legends").appendChild(legendsFlagsFragment); diff --git a/public/js/utils.js b/public/js/utils.js index f34d767f..338a04fd 100644 --- a/public/js/utils.js +++ b/public/js/utils.js @@ -46,7 +46,6 @@ export function createAvatar(name, desc) { }); const imgEl = document.createElement("img"); - console.log(avatarURL); if (!("email" in desc) || typeof desc.email === "undefined" || desc.email === null || desc.email === "") { imgEl.src = `${avatarURL}`; } From 3d4dd22aafceab735f15aa46df7361b0cffa5a09 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 23 Oct 2021 12:36:07 +0200 Subject: [PATCH 12/32] chore: update dependencies --- package-lock.json | 1698 ++++++++++++++++++++++++--------------------- package.json | 20 +- 2 files changed, 910 insertions(+), 808 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e4d84c1..6571ab22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,81 +10,12 @@ "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==" }, "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "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" - } - } } }, "@babel/compat-data": { @@ -94,20 +25,20 @@ "dev": true }, "@babel/core": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.4.tgz", - "integrity": "sha512-Lkcv9I4a8bgUI8LJOLM6IKv6hnz1KOju6KM1lceqVMKlKKqNRopYd2Pc9MgIurqvMJ6BooemrnJz8jlIiQIpsA==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.4", + "@babel/parser": "^7.15.8", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -131,9 +62,9 @@ } }, "@babel/eslint-parser": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.4.tgz", - "integrity": "sha512-hPMIAmGNbmQzXJIo2P43Zj9UhRmGev5f9nqdBFOWNGDGh6XKmjby79woBvg6y0Jur6yRfQBneDbUQ8ZVc1krFw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.8.tgz", + "integrity": "sha512-fYP7QFngCvgxjUuw8O057SVH5jCXsbFFOoE77CFDcvzwBVgTOkMD/L4mIC5Ud1xf8chK/no2fRbSSn1wvNmKuQ==", "dev": true, "requires": { "eslint-scope": "^5.1.1", @@ -156,12 +87,12 @@ } }, "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "dev": true, "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -242,27 +173,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", - "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", "@babel/helper-simple-access": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - } + "@babel/types": "^7.15.6" } }, "@babel/helper-optimise-call-expression": { @@ -311,9 +234,9 @@ } }, "@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.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { @@ -334,12 +257,12 @@ } }, "@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -397,9 +320,9 @@ } }, "@babel/parser": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.4.tgz", - "integrity": "sha512-xmzz+7fRpjrvDUj+GV7zfz/R3gSK2cOxGlazaXooxspCr539cbTXJKvBJzSVI2pPhcRGquoOtaIkKCsHQUiO3w==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -556,21 +479,13 @@ } }, "@babel/types": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", - "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - } } }, "@bcoe/v8-coverage": { @@ -580,14 +495,14 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.0.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -596,6 +511,15 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "globals": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", @@ -604,6 +528,12 @@ "requires": { "type-fest": "^0.20.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 } } }, @@ -613,9 +543,9 @@ "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==" }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", @@ -649,51 +579,50 @@ "dev": true }, "@jest/console": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", - "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", + "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.1.0", - "jest-util": "^27.1.0", + "jest-message-util": "^27.3.1", + "jest-util": "^27.3.1", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.0.tgz", - "integrity": "sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", + "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/reporters": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.3.1", + "@jest/reporters": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.1.0", - "jest-config": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-changed-files": "^27.3.0", + "jest-config": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-message-util": "^27.3.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-resolve-dependencies": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", - "jest-watcher": "^27.1.0", + "jest-resolve": "^27.3.1", + "jest-resolve-dependencies": "^27.3.1", + "jest-runner": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "jest-watcher": "^27.3.1", "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" @@ -706,64 +635,65 @@ "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==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } }, "@jest/environment": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", - "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", + "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", "dev": true, "requires": { - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", - "jest-mock": "^27.1.0" + "jest-mock": "^27.3.0" } }, "@jest/fake-timers": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", - "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", + "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", - "@sinonjs/fake-timers": "^7.0.2", + "@jest/types": "^27.2.5", + "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-message-util": "^27.3.1", + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1" } }, "@jest/globals": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", - "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", + "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/types": "^27.1.0", - "expect": "^27.1.0" + "@jest/environment": "^27.3.1", + "@jest/types": "^27.2.5", + "expect": "^27.3.1" } }, "@jest/reporters": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.0.tgz", - "integrity": "sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", + "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -774,15 +704,15 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-haste-map": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.0.0" + "v8-to-istanbul": "^8.1.0" } }, "@jest/source-map": { @@ -797,45 +727,45 @@ } }, "@jest/test-result": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", - "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", + "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.3.1", + "@jest/types": "^27.2.5", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz", - "integrity": "sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", + "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", "dev": true, "requires": { - "@jest/test-result": "^27.1.0", + "@jest/test-result": "^27.3.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-runtime": "^27.1.0" + "jest-haste-map": "^27.3.1", + "jest-runtime": "^27.3.1" } }, "@jest/transform": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", - "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", + "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.3.1", "jest-regex-util": "^27.0.6", - "jest-util": "^27.1.0", + "jest-util": "^27.3.1", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -844,9 +774,9 @@ } }, "@jest/types": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", - "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -894,14 +824,14 @@ } }, "@nodesecure/eslint-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@nodesecure/eslint-config/-/eslint-config-1.2.0.tgz", - "integrity": "sha512-/EpN0YibAgUocS4olMod8RjArpmniGJLuJugigRTPm05EOxJAbd8KQEpbTG4HMVACMNGIGKP9gfRL3Hccgmi/w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nodesecure/eslint-config/-/eslint-config-1.2.1.tgz", + "integrity": "sha512-gIM8VOFHDiljRNO9EtPrslbl8XEIpnpWWOfVRrm4qRxHtnAfU7hUehFl7MbpLoMIIHsNGbJ2VL53EbC0KRwrCA==", "dev": true, "requires": { - "@babel/eslint-parser": "^7.15.0", - "@typescript-eslint/eslint-plugin": "^4.29.0", - "@typescript-eslint/parser": "^4.29.0", + "@babel/eslint-parser": "^7.15.8", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", "eslint": "^7.32.0" }, "dependencies": { @@ -931,10 +861,21 @@ "strip-json-comments": "^3.1.1" } }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "escape-string-regexp": { @@ -991,19 +932,46 @@ "v8-compile-cache": "^2.0.3" } }, + "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, + "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==", + "dev": true + } + } + }, "eslint-visitor-keys": { "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 }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "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": { - "is-glob": "^4.0.1" + "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 + } } }, "globals": { @@ -1015,72 +983,21 @@ "type-fest": "^0.20.2" } }, - "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 - }, - "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 - }, - "string-width": { - "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" - } - }, "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.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "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" - } - } + "ansi-regex": "^5.0.1" } } } }, "@nodesecure/flags": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nodesecure/flags/-/flags-1.1.0.tgz", - "integrity": "sha512-jsdH1IUmAUoYGQpYphY3OeZZmrqAe5f8C9ru42ur8t7SQ7nrTrulnBfUjLhNe+4m/WEQ53g/QJvyQFbEdMpFJw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nodesecure/flags/-/flags-1.2.0.tgz", + "integrity": "sha512-RoxnFj88CcQvagBC5ULtqPdEDheTGtRwMtUSxbfZ7c7T6KwNrMZmIw9WNW68krPt84SCbovfRtDmYk/7auko7Q==" }, "@nodesecure/fs-walk": { "version": "1.0.0", @@ -1443,9 +1360,9 @@ } }, "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", + "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -1516,9 +1433,9 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, "@types/babel__core": { - "version": "7.1.15", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", - "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -1596,15 +1513,15 @@ "dev": true }, "@types/node": { - "version": "16.7.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", - "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==", + "version": "16.11.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz", + "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==", "dev": true }, "@types/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, "@types/stack-utils": { @@ -1629,41 +1546,39 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", - "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.30.0", - "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "dependencies": { - "semver": { - "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" - } + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true } } }, "@typescript-eslint/experimental-utils": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", - "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1686,66 +1601,55 @@ } }, "@typescript-eslint/parser": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.30.0.tgz", - "integrity": "sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" } }, "@typescript-eslint/scope-manager": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", - "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" } }, "@typescript-eslint/types": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", - "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "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" - } - } } }, "@typescript-eslint/visitor-keys": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", - "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" }, "dependencies": { @@ -1785,9 +1689,9 @@ } }, "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==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "acorn-walk": { @@ -1961,38 +1865,59 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "babel-jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.0.tgz", - "integrity": "sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", + "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", "dev": true, "requires": { - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.6", + "babel-preset-jest": "^27.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" } }, "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz", + "integrity": "sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.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 + } } }, "babel-plugin-jest-hoist": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", - "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", + "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -2022,12 +1947,12 @@ } }, "babel-preset-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", - "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", + "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.0.6", + "babel-plugin-jest-hoist": "^27.2.0", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -2109,16 +2034,16 @@ "dev": true }, "browserslist": { - "version": "4.16.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", - "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", - "node-releases": "^1.1.75" + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" } }, "bser": { @@ -2197,9 +2122,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001252", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz", - "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==", + "version": "1.0.30001271", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", + "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", "dev": true }, "caseless": { @@ -2336,12 +2261,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", - "dev": true - }, "combine-async-iterators": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/combine-async-iterators/-/combine-async-iterators-2.0.0.tgz", @@ -2627,9 +2546,9 @@ } }, "electron-to-chromium": { - "version": "1.3.830", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz", - "integrity": "sha512-gBN7wNAxV5vl1430dG+XRcQhD4pIeYeak6p6rjdCtlz5wWNwDad8jwvphe5oi1chL5MV6RNRikfffBBiFuj+rQ==", + "version": "1.3.878", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", + "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==", "dev": true }, "emittery": { @@ -2689,10 +2608,148 @@ } }, "esbuild": { - "version": "0.12.25", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.25.tgz", - "integrity": "sha512-woie0PosbRSoN8gQytrdCzUbS2ByKgO8nD1xCZkEup3D9q92miCze4PqEI9TZDYAuwn6CruEnQpJxgTRWdooAg==", - "dev": true + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", + "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.13.8", + "esbuild-darwin-64": "0.13.8", + "esbuild-darwin-arm64": "0.13.8", + "esbuild-freebsd-64": "0.13.8", + "esbuild-freebsd-arm64": "0.13.8", + "esbuild-linux-32": "0.13.8", + "esbuild-linux-64": "0.13.8", + "esbuild-linux-arm": "0.13.8", + "esbuild-linux-arm64": "0.13.8", + "esbuild-linux-mips64le": "0.13.8", + "esbuild-linux-ppc64le": "0.13.8", + "esbuild-netbsd-64": "0.13.8", + "esbuild-openbsd-64": "0.13.8", + "esbuild-sunos-64": "0.13.8", + "esbuild-windows-32": "0.13.8", + "esbuild-windows-64": "0.13.8", + "esbuild-windows-arm64": "0.13.8" + } + }, + "esbuild-android-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", + "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", + "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", + "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", + "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", + "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", + "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", + "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", + "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", + "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", + "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", + "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", + "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", + "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", + "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", + "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", + "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", + "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", + "dev": true, + "optional": true }, "escalade": { "version": "3.1.1", @@ -2703,7 +2760,8 @@ "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 }, "escodegen": { "version": "2.0.0", @@ -2766,37 +2824,36 @@ } }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", + "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "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", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", "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.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -2804,42 +2861,77 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "@babel/code-frame": { - "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" - } - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "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-visitor-keys": { - "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==", + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, "globals": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", @@ -2849,13 +2941,34 @@ "type-fest": "^0.20.2" } }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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 + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "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==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } @@ -2871,29 +2984,45 @@ } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "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": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "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 + } } }, "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.5.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "eslint-visitor-keys": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + } } }, "esprima": { @@ -2977,16 +3106,16 @@ "dev": true }, "expect": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", - "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", + "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-get-type": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", "jest-regex-util": "^27.0.6" }, "dependencies": { @@ -3024,33 +3153,6 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "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" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - } } }, "fast-json-stable-stringify": { @@ -3073,9 +3175,9 @@ } }, "fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -3100,18 +3202,18 @@ } }, "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=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", + "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==" }, "filenamify": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.0.1.tgz", - "integrity": "sha512-JaWJHplckZTbg9jgZmOeXq1Sm7GiylBTSacyW45YO9QGsQSELlC9PTKkDBOo+3VHdS2a7dvgyaHe7XcVlEitxw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.0.2.tgz", + "integrity": "sha512-DHxiQ+51yy2l5+Y7KQSLxgIr78p1XNq00WM+LqZzfoTBJuXx04vYVqp/Aa1ZEnFSZmgj3kxrm5o9B3NtBOsXpw==", "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" + "filename-reserved-regex": "^3.0.0", + "strip-outer": "^2.0.0", + "trim-repeated": "^2.0.0" } }, "fill-range": { @@ -3144,9 +3246,9 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "forever-agent": { @@ -3391,9 +3493,9 @@ } }, "httpie": { - "version": "2.0.0-next.13", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-2.0.0-next.13.tgz", - "integrity": "sha512-KbKOnq8wt0hVEfteYCSnEsPgzaWxcVc4qZ4OaDU9mVOYLRo3XChjWs3MiuRgFu5y+4JDo7sDKdKzkAn1ljQYFA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", + "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", "dev": true }, "https-proxy-agent": { @@ -3466,9 +3568,9 @@ } }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -3520,15 +3622,6 @@ "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-1.1.0.tgz", "integrity": "sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g==" }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - }, "is-core-module": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", @@ -3643,9 +3736,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { @@ -3680,9 +3773,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -3691,9 +3784,9 @@ } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -3709,115 +3802,115 @@ } }, "jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", + "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", "dev": true, "requires": { - "@jest/core": "^27.1.0", + "@jest/core": "^27.3.1", "import-local": "^3.0.2", - "jest-cli": "^27.1.0" + "jest-cli": "^27.3.1" }, "dependencies": { "jest-cli": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.0.tgz", - "integrity": "sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", + "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", "dev": true, "requires": { - "@jest/core": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/core": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-config": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", "prompts": "^2.0.1", - "yargs": "^16.0.3" + "yargs": "^16.2.0" } } } }, "jest-changed-files": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.0.tgz", - "integrity": "sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg==", + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", + "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.0.tgz", - "integrity": "sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", + "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.1.0", + "expect": "^27.3.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-config": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.0.tgz", - "integrity": "sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", + "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.1.0", - "@jest/types": "^27.1.0", - "babel-jest": "^27.1.0", + "@jest/test-sequencer": "^27.3.1", + "@jest/types": "^27.2.5", + "babel-jest": "^27.3.1", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.1.0", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", - "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.1.0", + "jest-circus": "^27.3.1", + "jest-environment-jsdom": "^27.3.1", + "jest-environment-node": "^27.3.1", + "jest-get-type": "^27.3.1", + "jest-jasmine2": "^27.3.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.3.1", + "jest-runner": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0" + "pretty-format": "^27.3.1" } }, "jest-diff": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", - "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-docblock": { @@ -3830,60 +3923,60 @@ } }, "jest-each": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", - "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", + "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0" + "jest-get-type": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-environment-jsdom": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz", - "integrity": "sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", + "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.3.1", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0", + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.0.tgz", - "integrity": "sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", + "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.3.1", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1" } }, "jest-get-type": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", - "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", "dev": true }, "jest-haste-map": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", - "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", + "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -3892,84 +3985,84 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz", - "integrity": "sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", + "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.1.0", + "@jest/environment": "^27.3.1", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.1.0", + "expect": "^27.3.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz", - "integrity": "sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", + "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", "dev": true, "requires": { - "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-matcher-utils": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", - "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", + "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.1.0", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-message-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", - "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", + "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0", + "pretty-format": "^27.3.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", - "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", + "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "@types/node": "*" } }, @@ -3986,78 +4079,77 @@ "dev": true }, "jest-resolve": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", - "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", + "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "chalk": "^4.0.0", - "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.3.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz", - "integrity": "sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", + "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.1.0" + "jest-snapshot": "^27.3.1" } }, "jest-runner": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.0.tgz", - "integrity": "sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", + "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.3.1", + "@jest/environment": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-leak-detector": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-environment-jsdom": "^27.3.1", + "jest-environment-node": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-leak-detector": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", - "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", + "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/globals": "^27.1.0", + "@jest/console": "^27.3.1", + "@jest/environment": "^27.3.1", + "@jest/globals": "^27.3.1", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -4066,17 +4158,17 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", + "jest-haste-map": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-mock": "^27.3.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", "slash": "^3.0.0", "strip-bom": "^4.0.0", - "yargs": "^16.0.3" + "yargs": "^16.2.0" } }, "jest-serializer": { @@ -4090,9 +4182,9 @@ } }, "jest-snapshot": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", - "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", + "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -4101,52 +4193,52 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.1.0", + "expect": "^27.3.1", "graceful-fs": "^4.2.4", - "jest-diff": "^27.1.0", - "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-util": "^27.3.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.1.0", + "pretty-format": "^27.3.1", "semver": "^7.3.2" } }, "jest-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", - "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", + "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", "picomatch": "^2.2.3" } }, "jest-validate": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", - "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", + "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.2.5", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", + "jest-get-type": "^27.3.1", "leven": "^3.1.0", - "pretty-format": "^27.1.0" + "pretty-format": "^27.3.1" }, "dependencies": { "camelcase": { @@ -4158,24 +4250,24 @@ } }, "jest-watcher": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.0.tgz", - "integrity": "sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", + "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", "dev": true, "requires": { - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.1.0", + "jest-util": "^27.3.1", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", - "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "dev": true, "requires": { "@types/node": "*", @@ -4251,9 +4343,9 @@ }, "dependencies": { "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, "form-data": { @@ -4740,9 +4832,9 @@ "dev": true }, "node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "nopt": { @@ -4888,9 +4980,9 @@ } }, "open": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", - "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", + "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -4911,12 +5003,6 @@ "word-wrap": "^1.2.3" } }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5034,6 +5120,12 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -5345,13 +5437,13 @@ "dev": true }, "pretty-format": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", - "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", - "ansi-regex": "^5.0.0", + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, @@ -5411,9 +5503,9 @@ } }, "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -5593,6 +5685,12 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -5699,9 +5797,9 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "sirv": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz", - "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.18.tgz", + "integrity": "sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA==", "requires": { "@polka/url": "^1.0.0-next.20", "mime": "^2.3.1", @@ -5709,9 +5807,9 @@ }, "dependencies": { "@polka/url": { - "version": "1.0.0-next.20", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.20.tgz", - "integrity": "sha512-88p7+M0QGxKpmnkfXjS4V26AnoC/eiqZutE8GLdaI5X12NY75bXSdTY9NkmYb2Xyk1O+MmkuO6Frmsj84V6I8Q==" + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" } } }, @@ -5786,9 +5884,9 @@ "dev": true }, "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==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -5855,9 +5953,9 @@ } }, "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -5893,12 +5991,12 @@ "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==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } @@ -5954,12 +6052,9 @@ "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==", - "requires": { - "escape-string-regexp": "^1.0.2" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", + "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==" }, "strnum": { "version": "1.0.3", @@ -5992,23 +6087,23 @@ "dev": true }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", "dev": true, "requires": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -6036,23 +6131,23 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } @@ -6195,11 +6290,18 @@ "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==" }, "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", + "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", "requires": { - "escape-string-regexp": "^1.0.2" + "escape-string-regexp": "^5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + } } }, "trouter": { @@ -6313,15 +6415,15 @@ "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==", + "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 }, "v8-to-istanbul": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", - "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -6532,9 +6634,9 @@ } }, "ws": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", - "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "dev": true }, "xml-name-validator": { @@ -6576,9 +6678,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "is-fullwidth-code-point": { @@ -6588,23 +6690,23 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } diff --git a/package.json b/package.json index 26c46a84..c53008b6 100644 --- a/package.json +++ b/package.json @@ -71,13 +71,13 @@ }, "homepage": "https://github.com/ES-Community/nsecure#readme", "devDependencies": { - "@nodesecure/eslint-config": "^1.2.0", - "@types/node": "^16.7.10", + "@nodesecure/eslint-config": "^1.2.1", + "@types/node": "^16.11.4", "cross-env": "^7.0.3", - "esbuild": "^0.12.25", - "eslint": "^7.32.0", - "httpie": "^2.0.0-next.13", - "jest": "^27.1.0", + "esbuild": "^0.13.8", + "eslint": "^8.1.0", + "httpie": "^1.1.2", + "jest": "^27.3.1", "list.js": "^2.3.1", "pkg-ok": "^2.3.1", "pretty-bytes": "^5.6.0", @@ -85,7 +85,7 @@ "vis-network": "^9.1.0" }, "dependencies": { - "@nodesecure/flags": "^1.1.0", + "@nodesecure/flags": "^1.2.0", "@nodesecure/i18n": "^1.2.0", "@nodesecure/npm-registry-sdk": "^1.2.1", "@nodesecure/scanner": "^1.4.0", @@ -94,15 +94,15 @@ "@slimio/async-cli-spinner": "^0.5.2", "cliui": "^7.0.4", "dotenv": "^10.0.0", - "filenamify": "^5.0.1", + "filenamify": "^5.0.2", "kleur": "^4.1.4", "ms": "^2.1.3", - "open": "^8.2.1", + "open": "^8.3.0", "polka": "^0.5.2", "qoa": "^0.2.0", "sade": "^1.7.4", "semver": "^7.3.5", - "sirv": "^1.0.17", + "sirv": "^1.0.18", "zup": "0.0.1" } } From 86912e5bd3dc9df492161a533e2fa4be2f1542e7 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 13:29:07 +0200 Subject: [PATCH 13/32] chore: debug on CLIUI --- src/commands/summary.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/commands/summary.js b/src/commands/summary.js index 705e3b0f..e6319183 100644 --- a/src/commands/summary.js +++ b/src/commands/summary.js @@ -9,15 +9,16 @@ import * as i18n from "@nodesecure/i18n"; // VARS const { yellow, gray, white, green, cyan, red } = kleur; -const ui = cliui(); export async function main(json = "nsecure-result.json") { const dataFilePath = path.join(process.cwd(), json); const rawAnalysis = await fs.readFile(dataFilePath, { encoding: "utf-8" }); const { rootDepencyName, dependencies } = JSON.parse(rawAnalysis); + const ui = cliui(); + const title = `${white().bold(`${i18n.getToken("ui.stats.title")}:`)} ${cyan().bold(rootDepencyName)}`; ui.div( - { text: kleur.white().bold(`${i18n.getToken("ui.stats.title")}: `) + kleur.cyan().bold(rootDepencyName), width: 50 } + { text: title, width: 50 } ); ui.div({ text: gray("-------------------------------------------------------------------"), width: 70 }); @@ -72,8 +73,7 @@ export async function main(json = "nsecure-result.json") { ); } ui.div({ text: gray("-------------------------------------------------------------------"), width: 70 }); - console.log(`${ui.toString()}`); - ui.resetOutput(); + console.log(ui.toString()); return void 0; } From b097d2fa7fbbbfa5125c7a68d9da54564ce1f428 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 13:30:22 +0200 Subject: [PATCH 14/32] ci: remove Node.js v12 and v15 --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 7148ee4a..f5dc9117 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [12.x, 14.x, 15.x] + node-version: [14.x, 16.x] fail-fast: false steps: - uses: actions/checkout@v2 From 24517c91ce6197c274565c671903a460aef3c81e Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 13:40:27 +0200 Subject: [PATCH 15/32] docs: update README --- README.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ac065374..b7858d5c 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ license github ci workflow codecov - dependencies Responsible Disclosure Policy downloads

@@ -21,7 +20,7 @@

-## About +## 📢 About [Node.js](https://nodejs.org/en/) security Command Line Interface. The goal of the project is to a design a CLI/API that will fetch and deeply analyze the dependency tree of a given **npm** package (Or a local project with a **package.json**) and output a **.json file** that will contains all metadata and flags about each packages. All this data will allow to quickly identify different issues across projects and packages (related to security and quality). @@ -29,7 +28,7 @@ The CLI allow to load the JSON into a Webpage with the **open** command. The pag - [NodeSecure G.Drive Design document](https://docs.google.com/document/d/1853Uwup9mityAYqAOnen1KSqSA6hlBgpKU0u0ygGY4Y/edit?usp=sharing) -## Features +## 📜 Features - Run an AST analysis on each .js/.mjs file in the packages tarball and sort out warnings (unsafe-regex, unsafe-import etc) and the complete list of required expr and statements (files, node.js module, etc.). - Return complete composition for each packages (extensions, files, tarball size, etc). @@ -39,11 +38,11 @@ The CLI allow to load the JSON into a Webpage with the **open** command. The pag - Add flags to each packages versions to identify well known patterns and potential security threats easily. - Analyze npm packages and local Node.js projects. -## Requirements +## 🚧 Requirements -- [Node.js](https://nodejs.org/en/) version 16.8.0 or higher +- [Node.js](https://nodejs.org/en/) LTS 16.x or higher -## Getting Started +## 💃 Getting Started ```bash $ npm install nsecure -g @@ -66,7 +65,7 @@ $ nsecure auto express > ⚠️ Setup an [npm token](https://github.com/ES-Community/nsecure#private-packages--registry) to avoid hiting the maximum request limit of the npm registry API. -## Usage example +## 👀 Usage example To show the complete list of commands ```bash @@ -196,9 +195,5 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! -## Roadmap - -We have created [a trello](https://trello.com/b/IY6lQ1A1/node-secure) so that we can plan long-term tasks. Do not hesitate to come participate and exchange your ideas! - ## License MIT From fe6af2e9e402f5faeb775bd4d7bac9bceac829d5 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 13:45:50 +0200 Subject: [PATCH 16/32] refactor(startHTTPServer): add options object & add openLink option --- src/commands/http.js | 4 +++- src/httpServer.js | 11 ++++++++--- test/httpServer.js | 5 ++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/commands/http.js b/src/commands/http.js index 6b43a89f..8dcb9e0d 100644 --- a/src/commands/http.js +++ b/src/commands/http.js @@ -9,7 +9,9 @@ export async function start(json = "nsecure-result.json", options = {}) { const dataFilePath = path.join(process.cwd(), json); const configPort = Number.isNaN(Number(port)) ? 0 : Number(port); - const httpServer = await startHTTPServer(dataFilePath, configPort); + const httpServer = await startHTTPServer(dataFilePath, { + configPort + }); for (const eventName of ["SIGINT", "SIGTERM"]) { process.on(eventName, () => httpServer.server.close()); diff --git a/src/httpServer.js b/src/httpServer.js index 6c14147f..a251de33 100644 --- a/src/httpServer.js +++ b/src/httpServer.js @@ -22,7 +22,10 @@ const kNodeSecureFlags = getFlags(); const __dirname = dirname(fileURLToPath(import.meta.url)); const kProjectRootDir = join(__dirname, ".."); -export async function startHTTPServer(dataFilePath, configPort) { +export async function startHTTPServer(dataFilePath, options = {}) { + const httpConfigPort = typeof options.configPort === "number" ? options.configPort : 0; + const openLink = typeof options.openLink === "boolean" ? options.openLink : true; + fs.accessSync(dataFilePath, fs.constants.R_OK | fs.constants.W_OK); const httpServer = polka(); @@ -72,11 +75,13 @@ export async function startHTTPServer(dataFilePath, configPort) { }); /* istanbul ignore next */ - httpServer.listen(typeof configPort === "number" ? configPort : 0, () => { + httpServer.listen(httpConfigPort, () => { const link = `http://localhost:${httpServer.server.address().port}`; console.log(kleur.magenta().bold(i18n.getToken("cli.http_server_started")), kleur.cyan().bold(link)); - open(link); + if (openLink) { + open(link); + } }); return httpServer; diff --git a/test/httpServer.js b/test/httpServer.js index d69b8d6a..f6cf9e7d 100644 --- a/test/httpServer.js +++ b/test/httpServer.js @@ -24,7 +24,10 @@ const INDEX_HTML = readFileSync(path.join(__dirname, "..", "views", "index.html" let httpServer; beforeAll(async() => { - httpServer = await startHTTPServer(JSON_PATH, HTTP_PORT); + httpServer = await startHTTPServer(JSON_PATH, { + configPort: HTTP_PORT, + openLink: false + }); }); afterAll(() => { From 9127570fe6597360398f2aa4c699abfc4aaccd5c Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 14:12:10 +0200 Subject: [PATCH 17/32] test: utils.js --- package-lock.json | 10 ++++++++++ package.json | 1 + src/commands/verify.js | 2 +- src/utils.js | 9 +++++---- test/utils.js | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 test/utils.js diff --git a/package-lock.json b/package-lock.json index 6571ab22..e90913dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1506,6 +1506,16 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", diff --git a/package.json b/package.json index c53008b6..a50d0d0f 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "homepage": "https://github.com/ES-Community/nsecure#readme", "devDependencies": { "@nodesecure/eslint-config": "^1.2.1", + "@types/jest": "^27.0.2", "@types/node": "^16.11.4", "cross-env": "^7.0.3", "esbuild": "^0.13.8", diff --git a/src/commands/verify.js b/src/commands/verify.js index 88bdd21b..242ee6df 100644 --- a/src/commands/verify.js +++ b/src/commands/verify.js @@ -7,7 +7,6 @@ import kleur from "kleur"; import { formatBytes, locationToString } from "../utils.js"; // VARS -const ui = cliui(); const { yellow, grey, white, green, cyan, red, magenta } = kleur; export async function main(packageName = null, options) { @@ -17,6 +16,7 @@ export async function main(packageName = null, options) { } const { files, directorySize, uniqueLicenseIds, ast } = payload; + const ui = cliui(); ui.div( { text: cyan().bold("directory size:"), width: 20 }, { text: yellow().bold(formatBytes(directorySize)), width: 10 } diff --git a/src/utils.js b/src/utils.js index a00faa0d..5a037a0b 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,13 +1,14 @@ +// CONSTANTS +const kBytesSize = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; -export function formatBytes(bytes, decimals) { +export function formatBytes(bytes) { if (bytes === 0) { return "0 B"; } - const dm = decimals <= 0 ? 0 : decimals || 2; - const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; const id = Math.floor(Math.log(bytes) / Math.log(1024)); + const size = parseFloat((bytes / Math.pow(1024, id)).toFixed(2)); - return parseFloat((bytes / Math.pow(1024, id)).toFixed(dm)) + " " + sizes[id]; + return `${size} ${kBytesSize[id]}`; } export function locationToString(location) { diff --git a/test/utils.js b/test/utils.js new file mode 100644 index 00000000..f94402fa --- /dev/null +++ b/test/utils.js @@ -0,0 +1,32 @@ +// Import Internal Dependencies +import * as utils from "../src/utils"; + +describe("formatBytes", () => { + it("should return '0 B' if bytes argument is equal zero", () => { + expect(utils.formatBytes(0)).toStrictEqual("0 B"); + }); + + it("should format 10 bytes", () => { + expect(utils.formatBytes(10)).toStrictEqual("10 B"); + }); + + it("should format 3000 bytes in KB with two fixed number", () => { + expect(utils.formatBytes(3000)).toStrictEqual("2.93 KB"); + }); + + it("should format 822_223_900 bytes in MB", () => { + expect(utils.formatBytes(822_223_900)).toStrictEqual("784.13 MB"); + }); +}); + +describe("locationToString", () => { + it("should return the location array in string syntax", () => { + const str = utils.locationToString([[1, 2], [2, 4]]); + expect(str).toStrictEqual("[1:2] - [2:4]"); + }); + + it("should ignore elements after length 1", () => { + const str = utils.locationToString([[1, 2, 3], [2, 4, 10], [50]]); + expect(str).toStrictEqual("[1:2] - [2:4]"); + }); +}); From bbe1c8b74de8199f76c62470532a95bca511ab23 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 14:45:34 +0200 Subject: [PATCH 18/32] test(commands): add summary test --- package-lock.json | 6 + package.json | 3 +- src/commands/summary.js | 11 +- ...Server.js.snap => httpServer.spec.js.snap} | 0 test/commands/summary.spec.js | 50 + test/fixtures/result-test1.json | 6531 +++++++++++++++++ test/{httpServer.js => httpServer.spec.js} | 0 test/process/summary.js | 4 + test/{utils.js => utils.spec.js} | 0 9 files changed, 6600 insertions(+), 5 deletions(-) rename test/__snapshots__/{httpServer.js.snap => httpServer.spec.js.snap} (100%) create mode 100644 test/commands/summary.spec.js create mode 100644 test/fixtures/result-test1.json rename test/{httpServer.js => httpServer.spec.js} (100%) create mode 100644 test/process/summary.js rename test/{utils.js => utils.spec.js} (100%) diff --git a/package-lock.json b/package-lock.json index e90913dd..0bfce7c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5932,6 +5932,12 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", diff --git a/package.json b/package.json index a50d0d0f..c743737b 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ ], "testEnvironment": "node", "testMatch": [ - "**/test/**/*.js" + "**/test/**/*.spec.js" ], "testPathIgnorePatterns": [ "/node_modules/", @@ -83,6 +83,7 @@ "pkg-ok": "^2.3.1", "pretty-bytes": "^5.6.0", "size-satisfies": "^1.0.0", + "split2": "^4.1.0", "vis-network": "^9.1.0" }, "dependencies": { diff --git a/src/commands/summary.js b/src/commands/summary.js index e6319183..8bf355fc 100644 --- a/src/commands/summary.js +++ b/src/commands/summary.js @@ -7,6 +7,9 @@ import cliui from "cliui"; import kleur from "kleur"; import * as i18n from "@nodesecure/i18n"; +// Import Internal Dependencies +import { formatBytes } from "../utils.js"; + // VARS const { yellow, gray, white, green, cyan, red } = kleur; @@ -36,8 +39,8 @@ export async function main(json = "nsecure-result.json") { { text: green().bold(`${packagesCount}`), width: 20 } ); ui.div( - { text: white().bold(`${i18n.getToken("ui.stats.total_size")}`), width: 60 }, - { text: green().bold(`${totalSize}`), width: 20 } + { text: white().bold(`${i18n.getToken("ui.stats.total_size")}:`), width: 60 }, + { text: green().bold(`${formatBytes(totalSize)}`), width: 20 } ); ui.div( { text: white().bold(`${i18n.getToken("ui.stats.indirect_deps")}:`), width: 60 }, @@ -46,7 +49,7 @@ export async function main(json = "nsecure-result.json") { ui.div(""); ui.div( - { text: white().bold(`${i18n.getToken("ui.stats.extensions")} :`), width: 40 } + { text: white().bold(`${i18n.getToken("ui.stats.extensions")}:`), width: 40 } ); const extensionEntries = Object.entries(extensionMap); ui.div( @@ -57,7 +60,7 @@ export async function main(json = "nsecure-result.json") { ui.div(""); ui.div( - { text: white().bold(`${i18n.getToken("ui.stats.licenses")} :`), width: 40 } + { text: white().bold(`${i18n.getToken("ui.stats.licenses")}:`), width: 40 } ); const licenceEntries = Object.entries(licenceMap); ui.div( diff --git a/test/__snapshots__/httpServer.js.snap b/test/__snapshots__/httpServer.spec.js.snap similarity index 100% rename from test/__snapshots__/httpServer.js.snap rename to test/__snapshots__/httpServer.spec.js.snap diff --git a/test/commands/summary.spec.js b/test/commands/summary.spec.js new file mode 100644 index 00000000..a62cac19 --- /dev/null +++ b/test/commands/summary.spec.js @@ -0,0 +1,50 @@ +// Import Node.js Dependencies +import { spawn } from "child_process"; +import { fileURLToPath } from "url"; +import path from "path"; + +// Import Third-party Dependencies +import split from "split2"; + +// CONSTANTS +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const kProcessDir = path.join(__dirname, "..", "process"); + +describe("summary", () => { + it("should execute summary command on fixtures 'result-test1.json'", async() => { + const lines = [ + /Global Stats: express.*$/, + /.*/, + /Total of packages:.*60.*$/, + /Total size:.*1.59 MB.*$/, + /Packages with indirect dependencies:.*6.*$/, + /.*/, + /Extensions:.*$/, + /\(52\) \.md - \(52\) \.js - \(50\) {2}- \(52\) \.json - \(5\) \.ts - \(1\) \.yml.*$/, + /.*/, + /Licenses:.*$/, + /\(48\) MIT - \(1\) BSD-3-Clause - \(3\) ISC.*$/, + /.*/ + ]; + + const child = spawn(process.execPath, [path.join(kProcessDir, "summary.js")], { + cwd: path.join(__dirname, "..", "fixtures"), + env: process.env, + stdio: ["ignore", "pipe", "pipe"], + detached: false + }); + + try { + const rStream = child.stdout.pipe(split()); + for await (const line of rStream) { + const regexp = lines.shift(); + + expect(regexp).toBeDefined(); + expect(regexp.test(line)).toStrictEqual(true); + } + } + finally { + child.kill(); + } + }); +}); diff --git a/test/fixtures/result-test1.json b/test/fixtures/result-test1.json new file mode 100644 index 00000000..62859cd5 --- /dev/null +++ b/test/fixtures/result-test1.json @@ -0,0 +1,6531 @@ +{ + "id": "GsjluO", + "rootDepencyName": "express", + "warnings": [], + "dependencies": { + "etag": { + "1.8.1": { + "id": 1, + "usedBy": { + "express": "4.17.1", + "send": "0.17.1" + }, + "flags": [], + "description": "Create simple HTTP ETags", + "size": 10809, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "crypto", + "fs" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.8.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 14, + "lastUpdateAt": "2017-09-13T02:43:44.422Z", + "lastVersion": "1.8.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/etag#readme", + "author": "kesla", + "publishers": [ + { + "name": "kesla", + "version": "1.0.0", + "at": "2014-05-18T11:14:58.281Z" + }, + { + "name": "dougwilson", + "version": "1.0.1", + "at": "2014-08-24T23:28:33.196Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "content-type": { + "1.0.4": { + "id": 2, + "usedBy": { + "express": "4.17.1", + "body-parser": "1.19.0" + }, + "flags": [], + "description": "Create and parse HTTP Content-Type header", + "size": 10200, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.4" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 6, + "lastUpdateAt": "2017-09-11T21:42:36.476Z", + "lastVersion": "1.0.4", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/content-type#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "deoxxa", + "version": "0.0.1", + "at": "2013-10-08T07:37:54.398Z" + }, + { + "name": "dougwilson", + "version": "1.0.0", + "at": "2015-02-02T07:31:29.037Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "cookie-signature": { + "1.0.6": { + "id": 3, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "isOutdated" + ], + "description": "Sign and unsign cookies", + "size": 3936, + "author": "TJ Holowaychuk ", + "warnings": [], + "composition": { + "extensions": [ + "", + ".md", + ".js", + ".json" + ], + "files": [ + ".npmignore", + "History.md", + "Readme.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "crypto" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.6" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 9, + "lastUpdateAt": "2018-01-19T04:32:35.808Z", + "lastVersion": "1.1.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/visionmedia/node-cookie-signature#readme", + "author": "TJ Holowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "1.0.0", + "at": "2013-04-12T19:07:28.737Z" + }, + { + "name": "natevw", + "version": "1.0.4", + "at": "2014-06-25T22:14:18.119Z" + } + ], + "maintainers": [ + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "natevw", + "email": "natevw@yahoo.com" + } + ] + } + }, + "escape-html": { + "1.0.3": { + "id": 4, + "usedBy": { + "express": "4.17.1", + "serve-static": "1.14.1", + "finalhandler": "1.1.2", + "send": "0.17.1" + }, + "flags": [], + "description": "Escape string for use in HTML", + "size": 3660, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "Readme.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.3" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 5, + "lastUpdateAt": "2015-09-01T04:47:22.713Z", + "lastVersion": "1.0.3", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/component/escape-html", + "author": "tjholowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "1.0.0", + "at": "2013-05-30T15:28:48.920Z" + }, + { + "name": "dougwilson", + "version": "1.0.2", + "at": "2015-06-06T20:25:02.222Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + } + ] + } + }, + "cookie": { + "0.4.0": { + "id": 5, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "isOutdated" + ], + "description": "HTTP server cookie parsing and serialization", + "size": 17858, + "author": "Roman Shtylman ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.4.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 22, + "lastUpdateAt": "2020-04-22T03:23:57.297Z", + "lastVersion": "0.4.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/cookie#readme", + "author": "Roman Shtylman", + "publishers": [ + { + "name": "shtylman", + "version": "0.0.0", + "at": "2012-05-28T23:56:12.299Z" + }, + { + "name": "dougwilson", + "version": "0.1.3", + "at": "2015-05-20T01:22:20.719Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "encodeurl": { + "1.0.2": { + "id": 6, + "usedBy": { + "express": "4.17.1", + "serve-static": "1.14.1", + "finalhandler": "1.1.2", + "send": "0.17.1" + }, + "flags": [], + "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences", + "size": 7859, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 3, + "lastUpdateAt": "2018-01-22T03:19:29.733Z", + "lastVersion": "1.0.2", + "hasManyPublishers": false, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/pillarjs/encodeurl#readme", + "author": "dougwilson", + "publishers": [ + { + "name": "dougwilson", + "version": "1.0.0", + "at": "2016-06-08T18:58:44.662Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "fresh": { + "0.5.2": { + "id": 7, + "usedBy": { + "express": "4.17.1", + "send": "0.17.1" + }, + "flags": [], + "description": "HTTP response freshness testing", + "size": 10116, + "author": "TJ Holowaychuk (http://tjholowaychuk.com)", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.5.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 12, + "lastUpdateAt": "2017-09-14T05:03:12.205Z", + "lastVersion": "0.5.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/fresh#readme", + "author": "TJ Holowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.0.1", + "at": "2012-06-10T19:09:36.227Z" + }, + { + "name": "jongleberry", + "version": "0.2.3", + "at": "2014-09-08T01:09:11.214Z" + }, + { + "name": "dougwilson", + "version": "0.2.4", + "at": "2014-09-08T02:50:40.194Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "array-flatten": { + "1.1.1": { + "id": 8, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "isOutdated" + ], + "description": "Flatten an array of nested arrays into a single flat array", + "size": 4422, + "author": { + "name": "Blake Embrey", + "email": "hello@blakeembrey.com", + "url": "http://blakeembrey.me" + }, + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "array-flatten.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.1.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 12, + "lastUpdateAt": "2019-11-21T05:14:39.925Z", + "lastVersion": "3.0.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/blakeembrey/array-flatten", + "author": "Blake Embrey", + "publishers": [ + { + "name": "blakeembrey", + "version": "0.0.2", + "at": "2014-03-16T04:13:40.954Z" + } + ], + "maintainers": [ + { + "name": "blakeembrey", + "email": "hello@blakeembrey.com" + } + ] + } + }, + "depd": { + "1.1.2": { + "id": 9, + "usedBy": { + "express": "4.17.1", + "send": "0.17.1", + "body-parser": "1.19.0", + "http-errors": "1.7.3" + }, + "flags": [ + "isOutdated", + "hasWarnings" + ], + "description": "Deprecate all the things", + "size": 30483, + "author": "Douglas Christopher Wilson ", + "warnings": [ + { + "kind": "unsafe-stmt", + "location": [ + [ + 410, + 21 + ], + [ + 414, + 9 + ] + ], + "value": "eval", + "file": "index.js" + } + ], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js", + "lib\\browser\\index.js", + "lib\\compat\\callsite-tostring.js", + "lib\\compat\\event-listener-count.js", + "lib\\compat\\index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "lib\\compat.js", + "lib\\compat\\callsite-tostring.js", + "lib\\compat\\event-listener-count.js" + ], + "required_nodejs": [ + "path", + "events" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.1.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 17, + "lastUpdateAt": "2018-10-26T17:52:55.936Z", + "lastVersion": "2.0.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/dougwilson/nodejs-depd#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "0.0.0", + "at": "2014-06-15T05:36:40.048Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "merge-descriptors": { + "1.0.1": { + "id": 10, + "usedBy": { + "express": "4.17.1" + }, + "flags": [], + "description": "Merge objects using descriptors", + "size": 4889, + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com", + "twitter": "https://twitter.com/jongleberry" + }, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 4, + "lastUpdateAt": "2016-01-17T23:50:26.636Z", + "lastVersion": "1.0.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/component/merge-descriptors", + "author": "Jonathan Ong", + "publishers": [ + { + "name": "jongleberry", + "version": "0.0.1", + "at": "2013-10-29T20:29:06.954Z" + }, + { + "name": "dougwilson", + "version": "1.0.0", + "at": "2015-03-01T21:30:01.609Z" + } + ], + "maintainers": [ + { + "email": "julian@juliangruber.com", + "name": "juliangruber" + }, + { + "email": "tj@vision-media.ca", + "name": "tjholowaychuk" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jonathanong" + }, + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + } + ] + } + }, + "qs": { + "6.7.0": { + "id": 11, + "usedBy": { + "express": "4.17.1", + "body-parser": "1.19.0" + }, + "flags": [ + "isOutdated" + ], + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "size": 142918, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + "", + ".md", + ".js", + ".json" + ], + "files": [ + ".editorconfig", + ".eslintignore", + ".eslintrc", + "CHANGELOG.md", + "LICENSE", + "README.md", + "dist\\qs.js", + "lib\\formats.js", + "lib\\index.js", + "lib\\parse.js", + "lib\\stringify.js", + "lib\\utils.js", + "package.json", + "test\\.eslintrc", + "test\\index.js", + "test\\parse.js", + "test\\stringify.js", + "test\\utils.js" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "dist\\stringify.js", + "dist\\parse.js", + "dist\\formats.js", + "dist\\utils.js", + "lib\\stringify.js", + "lib\\parse.js", + "lib\\formats.js", + "lib\\utils.js", + "test\\parse.js", + "test\\stringify.js", + "test\\utils.js", + "..\\index.js" + ], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "BSD-3-Clause" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "BSD-3-Clause" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/BSD-3-Clause.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "6.7.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 93, + "lastUpdateAt": "2021-03-22T03:53:52.823Z", + "lastVersion": "6.10.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/ljharb/qs", + "author": "tjholowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.3.1", + "at": "2011-11-04T16:33:52.613Z" + }, + { + "name": "nlf", + "version": "1.0.0", + "at": "2014-08-04T22:27:58.076Z" + }, + { + "name": "hueniverse", + "version": "1.2.2", + "at": "2014-08-14T20:14:29.160Z" + }, + { + "name": "ljharb", + "version": "6.0.2", + "at": "2016-01-17T22:58:43.204Z" + } + ], + "maintainers": [ + { + "name": "nlf", + "email": "quitlahok@gmail.com" + }, + { + "name": "ljharb", + "email": "ljharb@gmail.com" + } + ] + } + }, + "range-parser": { + "1.2.1": { + "id": 12, + "usedBy": { + "express": "4.17.1", + "send": "0.17.1" + }, + "flags": [], + "description": "Range header field string parser", + "size": 8457, + "author": "TJ Holowaychuk (http://tjholowaychuk.com)", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.2.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 11, + "lastUpdateAt": "2019-05-11T00:27:37.805Z", + "lastVersion": "1.2.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/range-parser#readme", + "author": "TJ Holowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.0.1", + "at": "2012-06-11T16:08:22.373Z" + }, + { + "name": "jongleberry", + "version": "1.0.1", + "at": "2014-09-08T01:00:41.796Z" + }, + { + "name": "dougwilson", + "version": "1.0.2", + "at": "2014-09-09T02:45:20.606Z" + } + ], + "maintainers": [ + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jonathanong" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + }, + { + "email": "tj@vision-media.ca", + "name": "tjholowaychuk" + } + ] + } + }, + "path-to-regexp": { + "0.1.7": { + "id": 13, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasWarnings", + "isOutdated" + ], + "description": "Express style path to RegExp utility", + "size": 6781, + "author": {}, + "warnings": [ + { + "kind": "unsafe-regex", + "location": [ + [ + 66, + 13 + ], + [ + 66, + 56 + ] + ], + "value": "(\\\\\\/)?(\\\\\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?", + "file": "index.js" + } + ], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.1.7" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 52, + "lastUpdateAt": "2020-09-29T17:23:35.481Z", + "lastVersion": "6.2.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/pillarjs/path-to-regexp#readme", + "author": "tjholowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.0.2", + "at": "2013-02-10T17:41:48.985Z" + }, + { + "name": "jongleberry", + "version": "0.1.0", + "at": "2014-03-06T06:35:14.721Z" + }, + { + "name": "blakeembrey", + "version": "0.1.1", + "at": "2014-03-10T14:41:25.104Z" + } + ], + "maintainers": [ + { + "name": "blakeembrey", + "email": "hello@blakeembrey.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "jonathanong", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "defunctzombie", + "email": "shtylman@gmail.com" + } + ] + } + }, + "statuses": { + "1.5.0": { + "id": 14, + "usedBy": { + "express": "4.17.1", + "finalhandler": "1.1.2", + "http-errors": "1.7.3", + "send": "0.17.1" + }, + "flags": [ + "isOutdated" + ], + "description": "HTTP status utility", + "size": 11034, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".json", + ".md", + ".js", + "" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "codes.json", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "codes.json" + ], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.5.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 14, + "lastUpdateAt": "2021-01-03T06:37:47.488Z", + "lastVersion": "2.0.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/jshttp/statuses#readme", + "author": "jongleberry", + "publishers": [ + { + "name": "jongleberry", + "version": "1.0.1", + "at": "2014-03-13T01:21:33.978Z" + }, + { + "name": "dougwilson", + "version": "1.2.1", + "at": "2015-02-01T23:52:50.008Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + } + ] + } + }, + "parseurl": { + "1.3.3": { + "id": 15, + "usedBy": { + "express": "4.17.1", + "serve-static": "1.14.1", + "finalhandler": "1.1.2" + }, + "flags": [], + "description": "parse a url with memoization", + "size": 10299, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "url" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.3.3" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 11, + "lastUpdateAt": "2019-04-16T04:16:26.547Z", + "lastVersion": "1.3.3", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/pillarjs/parseurl#readme", + "author": "jongleberry", + "publishers": [ + { + "name": "jongleberry", + "version": "1.0.0", + "at": "2014-03-08T02:08:58.819Z" + }, + { + "name": "dougwilson", + "version": "1.1.0", + "at": "2014-07-09T02:22:48.887Z" + } + ], + "maintainers": [ + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + } + ] + } + }, + "methods": { + "1.1.2": { + "id": 16, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasExternalCapacity" + ], + "description": "HTTP methods that node supports", + "size": 5288, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "http" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.1.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 7, + "lastUpdateAt": "2016-01-18T02:53:56.364Z", + "lastVersion": "1.1.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/methods", + "author": "tjholowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.1.0", + "at": "2013-10-28T19:02:02.097Z" + }, + { + "name": "jongleberry", + "version": "1.1.0", + "at": "2014-07-06T02:45:33.027Z" + }, + { + "name": "dougwilson", + "version": "1.1.1", + "at": "2014-12-30T23:51:21.181Z" + } + ], + "maintainers": [ + { + "email": "tj@vision-media.ca", + "name": "tjholowaychuk" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jonathanong" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + }, + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + } + ] + } + }, + "safe-buffer": { + "5.1.2": { + "id": 17, + "usedBy": { + "express": "4.17.1", + "content-disposition": "0.5.3" + }, + "flags": [ + "isOutdated" + ], + "description": "Safer Node.js Buffer API", + "size": 31686, + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org" + }, + "warnings": [], + "composition": { + "extensions": [ + ".ts", + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "index.d.ts", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "buffer" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "5.1.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 11, + "lastUpdateAt": "2020-05-10T16:37:30.776Z", + "lastVersion": "5.2.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/feross/safe-buffer", + "author": "Feross Aboukhadijeh", + "publishers": [ + { + "name": "feross", + "version": "1.0.0", + "at": "2016-01-13T04:36:59.750Z" + } + ], + "maintainers": [ + { + "name": "feross", + "email": "feross@feross.org" + }, + { + "name": "mafintosh", + "email": "mathiasbuus@gmail.com" + } + ] + } + }, + "utils-merge": { + "1.0.1": { + "id": 18, + "usedBy": { + "express": "4.17.1" + }, + "flags": [], + "description": "merge() utility function", + "size": 3720, + "author": { + "name": "Jared Hanson", + "email": "jaredhanson@gmail.com", + "url": "http://www.jaredhanson.net/" + }, + "warnings": [], + "composition": { + "extensions": [ + "", + ".js", + ".json", + ".md" + ], + "files": [ + ".npmignore", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 2, + "lastUpdateAt": "2017-09-20T00:18:39.692Z", + "lastVersion": "1.0.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jaredhanson/utils-merge#readme", + "author": "Jared Hanson", + "publishers": [ + { + "name": "jaredhanson", + "version": "1.0.0", + "at": "2013-07-11T19:00:17.317Z" + } + ], + "maintainers": [ + { + "name": "jaredhanson", + "email": "jaredhanson@gmail.com" + } + ] + } + }, + "setprototypeof": { + "1.1.1": { + "id": 19, + "usedBy": { + "express": "4.17.1", + "http-errors": "1.7.3" + }, + "flags": [ + "isOutdated" + ], + "description": "A small polyfill for Object.setprototypeof", + "size": 3913, + "author": "Wes Todd", + "warnings": [], + "composition": { + "extensions": [ + ".ts", + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "index.d.ts", + "index.js", + "package.json", + "test\\index.js" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "..\\index.js" + ], + "required_nodejs": [ + "assert" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "ISC" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "ISC" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/ISC.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.1.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 7, + "lastUpdateAt": "2019-07-18T04:49:56.614Z", + "lastVersion": "1.2.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/wesleytodd/setprototypeof", + "author": "Wes Todd", + "publishers": [ + { + "name": "wesleytodd", + "version": "1.0.0", + "at": "2015-02-04T13:56:57.705Z" + } + ], + "maintainers": [ + { + "name": "wesleytodd", + "email": "wes@wesleytodd.com" + } + ] + } + }, + "vary": { + "1.1.2": { + "id": 20, + "usedBy": { + "express": "4.17.1" + }, + "flags": [], + "description": "Manipulate the HTTP Vary header", + "size": 8747, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.1.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 7, + "lastUpdateAt": "2017-09-24T01:47:11.325Z", + "lastVersion": "1.1.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/vary#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "0.0.0", + "at": "2014-06-04T20:52:53.541Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "content-disposition": { + "0.5.3": { + "id": 22, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "hasWarnings" + ], + "description": "Create and parse Content-Disposition header", + "size": 19115, + "author": "Douglas Christopher Wilson ", + "warnings": [ + { + "kind": "unsafe-regex", + "location": [ + [ + 115, + 23 + ], + [ + 115, + 156 + ] + ], + "value": "^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$", + "file": "index.js" + } + ], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "path" + ], + "required_thirdparty": [ + "safe-buffer" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.5.3" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 1, + "publishedCount": 11, + "lastUpdateAt": "2018-12-17T20:18:52.643Z", + "lastVersion": "0.5.3", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/content-disposition#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "0.0.0", + "at": "2014-09-19T05:02:12.936Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "debug": { + "2.6.9": { + "id": 25, + "usedBy": { + "finalhandler": "1.1.2", + "send": "0.17.1", + "body-parser": "1.19.0", + "express": "4.17.1" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "isOutdated", + "hasExternalCapacity" + ], + "description": "small debugging utility", + "size": 51243, + "author": "TJ Holowaychuk ", + "warnings": [], + "composition": { + "extensions": [ + ".yml", + "", + ".md", + ".json", + ".js" + ], + "files": [ + ".coveralls.yml", + ".eslintrc", + ".npmignore", + ".travis.yml", + "CHANGELOG.md", + "LICENSE", + "Makefile", + "README.md", + "component.json", + "karma.conf.js", + "node.js", + "package.json", + "src\\browser.js", + "src\\debug.js", + "src\\index.js", + "src\\inspector-log.js", + "src\\node.js" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "src\\node.js", + "src\\debug.js", + "src\\browser.js", + "src\\node.js" + ], + "required_nodejs": [ + "stream", + "tty", + "util", + "fs", + "net" + ], + "required_thirdparty": [ + "ms" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.6.9" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 69, + "lastUpdateAt": "2020-12-09T15:36:20.909Z", + "lastVersion": "4.3.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/visionmedia/debug#readme", + "author": "TJ Holowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.0.1", + "at": "2011-11-29T01:11:25.405Z" + }, + { + "name": "tootallnate", + "version": "1.0.0", + "at": "2014-06-05T03:55:56.207Z" + }, + { + "name": "thebigredgeek", + "version": "2.3.0", + "at": "2016-11-07T17:40:37.812Z" + }, + { + "name": "qix", + "version": "3.2.0", + "at": "2018-09-11T06:19:14.567Z" + } + ], + "maintainers": [ + { + "name": "qix", + "email": "i.am.qix@gmail.com" + }, + { + "name": "thebigredgeek", + "email": "rhyneandrew@gmail.com" + }, + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + } + ] + } + }, + "ee-first": { + "1.1.1": { + "id": 26, + "usedBy": { + "on-finished": "2.3.0" + }, + "flags": [], + "description": "return the first event in a set of ee/event pairs", + "size": 6259, + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com", + "twitter": "https://twitter.com/jongleberry" + }, + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.1.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 8, + "lastUpdateAt": "2015-05-25T19:18:28.732Z", + "lastVersion": "1.1.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jonathanong/ee-first", + "author": "Jonathan Ong", + "publishers": [ + { + "name": "jongleberry", + "version": "1.0.0", + "at": "2014-06-11T01:31:59.902Z" + }, + { + "name": "dougwilson", + "version": "1.0.4", + "at": "2014-08-15T20:04:59.878Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + } + ] + } + }, + "on-finished": { + "2.3.0": { + "id": 27, + "usedBy": { + "express": "4.17.1", + "finalhandler": "1.1.2", + "send": "0.17.1", + "body-parser": "1.19.0" + }, + "flags": [ + "hasDependencies" + ], + "description": "Execute a callback when a request closes, finishes, or errors", + "size": 12311, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "ee-first" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.3.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 1, + "publishedCount": 6, + "lastUpdateAt": "2015-05-27T01:58:14.758Z", + "lastVersion": "2.3.0", + "hasManyPublishers": false, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/on-finished", + "author": "dougwilson", + "publishers": [ + { + "name": "dougwilson", + "version": "2.0.0", + "at": "2014-08-16T05:19:04.281Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "ms": { + "2.0.0": { + "id": 28, + "usedBy": { + "debug": "2.6.9" + }, + "flags": [ + "isOutdated", + "hasWarnings" + ], + "description": "Tiny milisecond conversion utility", + "size": 6266, + "author": {}, + "warnings": [ + { + "kind": "unsafe-regex", + "location": [ + [ + 52, + 14 + ], + [ + 52, + 133 + ] + ], + "value": "^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$", + "file": "index.js" + } + ], + "composition": { + "extensions": [ + ".js", + ".md", + ".json" + ], + "files": [ + "index.js", + "license.md", + "package.json", + "readme.md" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "license.md" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.0.0", + "2.1.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 24, + "lastUpdateAt": "2020-12-08T13:54:35.223Z", + "lastVersion": "2.1.3", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/vercel/ms#readme", + "author": "rauchg", + "publishers": [ + { + "name": "rauchg", + "version": "0.1.0", + "at": "2011-12-21T19:38:26.538Z" + }, + { + "name": "leo", + "version": "0.7.2", + "at": "2016-10-25T08:16:49.773Z" + }, + { + "name": "styfle", + "version": "2.1.2", + "at": "2019-06-06T17:31:55.859Z" + }, + { + "name": "mrmckeb", + "version": "3.0.0-beta.0", + "at": "2021-08-20T14:54:07.095Z" + }, + { + "name": "leerobinson", + "version": "3.0.0-canary.0", + "at": "2021-09-15T13:29:00.734Z" + } + ], + "maintainers": [ + { + "email": "gdborton@gmail.com", + "name": "gdborton" + }, + { + "email": "jeffrey@vercel.com", + "name": "jeffreyarneson" + }, + { + "email": "denizk@gmail.com", + "name": "ebb-tide" + }, + { + "email": "simulcik.miro@gmail.com", + "name": "msimulcik" + }, + { + "email": "domeccleston@gmail.com", + "name": "domeccleston" + }, + { + "email": "hassan4709@gmail.com", + "name": "nutlope" + }, + { + "email": "rich@vercel.com", + "name": "hungrybearstudio" + }, + { + "email": "thexrayone@icloud.com", + "name": "codetaromiura" + }, + { + "email": "a@vercel.com", + "name": "redacted-vercel" + }, + { + "email": "gkaragkiaouris2@gmail.com", + "name": "gkaragkiaouris" + }, + { + "email": "geovanisouza92@gmail.com", + "name": "geovanisouza92" + }, + { + "email": "dglsparsons@gmail.com", + "name": "dglsparsons" + }, + { + "email": "blweiner@gmail.com", + "name": "lostinpatterns" + }, + { + "email": "infra+release@vercel.com", + "name": "vercel-release-bot" + }, + { + "email": "southpolesteve@gmail.com", + "name": "southpolesteve" + }, + { + "email": "matheus.frndes@gmail.com", + "name": "matheuss" + }, + { + "email": "igor@klopov.com", + "name": "igorklopov" + }, + { + "email": "mindrun@icloud.com", + "name": "leo" + }, + { + "email": "naoyuki.kanezawa@gmail.com", + "name": "nkzawa" + }, + { + "email": "nathan@tootallnate.net", + "name": "tootallnate" + }, + { + "email": "rauchg@gmail.com", + "name": "rauchg" + }, + { + "email": "tim@timneutkens.nl", + "name": "timneutkens" + }, + { + "email": "javier.velasco86@gmail.com", + "name": "javivelasco" + }, + { + "email": "hello@evilrabb.it", + "name": "iamevilrabbit" + }, + { + "email": "kdy.1997.dev@gmail.com", + "name": "kdy1" + }, + { + "email": "joecohenr@gmail.com", + "name": "joecohens" + }, + { + "email": "ds303077135@gmail.com", + "name": "quietshu" + }, + { + "email": "mail@connordav.is", + "name": "dav-is" + }, + { + "email": "steven@ceriously.com", + "name": "styfle" + }, + { + "email": "team@zeit.co", + "name": "zeit-bot" + }, + { + "email": "luc.leray@gmail.com", + "name": "lucleray" + }, + { + "email": "mark.glagola@gmail.com", + "name": "mglagola" + }, + { + "email": "artzbitz@gmail.com", + "name": "andybitz" + }, + { + "email": "paulogdemitri@gmail.com", + "name": "paulogdm" + }, + { + "email": "ana.trajkovska2015@gmail.com", + "name": "anatrajkovska" + }, + { + "email": "timer150@gmail.com", + "name": "timer" + }, + { + "email": "iyatomi@gmail.com", + "name": "umegaya" + }, + { + "email": "franco@studiofreight.com", + "name": "arzafran" + }, + { + "email": "jj@jjsweb.site", + "name": "ijjk" + }, + { + "email": "mrfix84@gmail.com", + "name": "mfix22" + }, + { + "email": "luisito453@gmail.com", + "name": "lfades" + }, + { + "email": "rabautse@gmail.com", + "name": "rabaut" + }, + { + "email": "mail@mcs.dev", + "name": "msweeneydev" + }, + { + "email": "william@bbi.studio", + "name": "williamli" + }, + { + "email": "ragojosefrancisco@gmail.com", + "name": "ragojose" + }, + { + "email": "guybedford@gmail.com", + "name": "guybedford" + }, + { + "email": "pvco.coursey@gmail.com", + "name": "paco" + }, + { + "email": "skllcrn@zeit.co", + "name": "skllcrn" + }, + { + "email": "janicklasralph036@gmail.com", + "name": "janicklas-ralph" + }, + { + "email": "atcastle@gmail.com", + "name": "atcastle" + }, + { + "email": "npm@keanulee.com", + "name": "keanulee" + }, + { + "email": "shubhie@gmail.com", + "name": "spanicker" + }, + { + "email": "jason@developit.ca", + "name": "developit" + }, + { + "email": "houssein.djirdeh@gmail.com", + "name": "housseindjirdeh" + }, + { + "email": "gbmonaco@google.com", + "name": "gmonaco" + }, + { + "email": "josefrancisco.verdu@gmail.com", + "name": "kikobeats" + }, + { + "email": "prateek89born@gmail.com", + "name": "prateekbh" + }, + { + "email": "jan.krems@gmail.com", + "name": "jkrems" + }, + { + "email": "jared@palmer.net", + "name": "jaredpalmer" + }, + { + "email": "g.cobben@gmail.com", + "name": "gielcobben" + }, + { + "email": "shu@chibicode.com", + "name": "chibicode" + }, + { + "email": "nazareno@basement.studio", + "name": "nazarenooviedo" + }, + { + "email": "samko9522@gmail.com", + "name": "samsisle" + }, + { + "email": "curciobel@gmail.com", + "name": "okbel" + }, + { + "email": "hank@vercel.com", + "name": "hankvercel" + }, + { + "email": "lrobinson2011@gmail.com", + "name": "leerobinson" + }, + { + "email": "lsimon@commoner.com", + "name": "elsigh" + }, + { + "email": "julianbenegas99@gmail.com", + "name": "julianbenegas" + }, + { + "email": "rizwana.akmal@hotmail.com", + "name": "rizbizkits" + }, + { + "email": "freiberggg@gmail.com", + "name": "raunofreiberg" + }, + { + "email": "tobias.koppers@googlemail.com", + "name": "sokra" + }, + { + "email": "haltaffer@gmail.com", + "name": "cl3arglass" + }, + { + "email": "github.wolle404@gmail.com", + "name": "chriswdmr" + }, + { + "email": "lapapelera@gmail.com", + "name": "ernestd" + }, + { + "email": "ismaelrumzan@gmail.com", + "name": "ismaelrumzan" + }, + { + "email": "jrshoch@gmail.com", + "name": "jhoch" + }, + { + "email": "mitchellbwright@gmail.com", + "name": "mitchellwright" + }, + { + "email": "mrmckeb.npm@outlook.com", + "name": "mrmckeb" + }, + { + "email": "npm-public@qfox.nl", + "name": "kuvos" + }, + { + "email": "tim@creationix.com", + "name": "creationix" + }, + { + "email": "aaron@aaronboodman.com", + "name": "aboodman" + }, + { + "email": "inbox@huozhi.im", + "name": "huozhi" + }, + { + "email": "christina@vercel.com", + "name": "cmvnk" + }, + { + "email": "erik.arvidsson@gmail.com", + "name": "arv" + }, + { + "email": "ktcarter09@gmail.com", + "name": "ktcarter" + }, + { + "email": "dev@padmaia.rocks", + "name": "padmaia" + }, + { + "email": "delbabrown@gmail.com", + "name": "delba" + }, + { + "email": "joshuadgon@gmail.com", + "name": "catsaremlg" + }, + { + "email": "stevensteel97@gmail.com", + "name": "steventey" + }, + { + "email": "gsandhu@csumb.edu", + "name": "gsandhu" + }, + { + "email": "dbredvick@gmail.com", + "name": "dbredvick" + } + ] + }, + "2.1.1": { + "id": 52, + "usedBy": { + "send": "0.17.1" + }, + "flags": [ + "hasWarnings", + "isOutdated" + ], + "description": "Tiny millisecond conversion utility", + "size": 6818, + "author": {}, + "warnings": [ + { + "kind": "unsafe-regex", + "location": [ + [ + 53, + 14 + ], + [ + 53, + 148 + ] + ], + "value": "^((?:\\d+)?\\-?\\d?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$", + "file": "index.js" + } + ], + "composition": { + "extensions": [ + ".js", + ".md", + ".json" + ], + "files": [ + "index.js", + "license.md", + "package.json", + "readme.md" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "license.md" + } + ] + }, + "gitUrl": null + } + }, + "bytes": { + "3.1.0": { + "id": 30, + "usedBy": { + "body-parser": "1.19.0", + "raw-body": "2.4.0" + }, + "flags": [ + "hasWarnings" + ], + "description": "Utility to parse a string bytes to bytes and vice-versa", + "size": 10997, + "author": "TJ Holowaychuk (http://tjholowaychuk.com)", + "warnings": [ + { + "kind": "unsafe-regex", + "location": [ + [ + 24, + 28 + ], + [ + 24, + 51 + ] + ], + "value": "\\B(?=(\\d{3})+(?!\\d))", + "file": "index.js" + }, + { + "kind": "unsafe-regex", + "location": [ + [ + 37, + 18 + ], + [ + 37, + 65 + ] + ], + "value": "^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$", + "file": "index.js" + } + ], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "3.1.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 16, + "lastUpdateAt": "2019-01-23T04:43:34.815Z", + "lastVersion": "3.1.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/visionmedia/bytes.js#readme", + "author": "TJ Holowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.0.1", + "at": "2012-06-11T15:44:34.095Z" + }, + { + "name": "dougwilson", + "version": "2.0.1", + "at": "2015-05-08T04:43:03.189Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + } + ] + } + }, + "forwarded": { + "0.2.0": { + "id": 32, + "usedBy": { + "proxy-addr": "2.0.7" + }, + "flags": [], + "description": "Parse HTTP X-Forwarded-For header", + "size": 5876, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.2.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 4, + "lastUpdateAt": "2021-05-31T23:23:02.495Z", + "lastVersion": "0.2.0", + "hasManyPublishers": false, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/jshttp/forwarded#readme", + "author": "dougwilson", + "publishers": [ + { + "name": "dougwilson", + "version": "0.1.0", + "at": "2014-09-21T19:23:28.870Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "media-typer": { + "0.3.0": { + "id": 33, + "usedBy": { + "type-is": "1.6.18" + }, + "flags": [ + "isOutdated" + ], + "description": "Simple RFC 6838 media type parser and formatter", + "size": 11055, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.3.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 8, + "lastUpdateAt": "2019-04-25T03:16:05.379Z", + "lastVersion": "1.1.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/media-typer#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "0.0.0", + "at": "2014-06-13T19:25:11.301Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "type-is": { + "1.6.18": { + "id": 34, + "usedBy": { + "express": "4.17.1", + "body-parser": "1.19.0" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency" + ], + "description": "Infer the content-type of a request.", + "size": 18497, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "media-typer", + "mime-types" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.6.18" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 1, + "publishedCount": 37, + "lastUpdateAt": "2019-04-26T13:59:49.224Z", + "lastVersion": "1.6.18", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/type-is#readme", + "author": "jongleberry", + "publishers": [ + { + "name": "jongleberry", + "version": "1.0.0", + "at": "2013-12-28T00:06:19.362Z" + }, + { + "name": "dougwilson", + "version": "1.2.0", + "at": "2014-05-12T03:30:58.338Z" + } + ], + "maintainers": [ + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + } + ] + } + }, + "destroy": { + "1.0.4": { + "id": 37, + "usedBy": { + "send": "0.17.1" + }, + "flags": [], + "description": "destroy a stream if possible", + "size": 5197, + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com", + "twitter": "https://twitter.com/jongleberry" + }, + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "fs", + "stream" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.4" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 2, + "lastUpdateAt": "2016-01-16T03:14:05.899Z", + "lastVersion": "1.0.4", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/stream-utils/destroy", + "author": "Jonathan Ong", + "publishers": [ + { + "name": "jongleberry", + "version": "1.0.3", + "at": "2014-08-15T06:30:06.962Z" + }, + { + "name": "dougwilson", + "version": "1.0.4", + "at": "2016-01-16T03:14:05.899Z" + } + ], + "maintainers": [ + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + }, + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + } + ] + } + }, + "mime-db": { + "1.50.0": { + "id": 39, + "usedBy": { + "mime-types": "2.1.33" + }, + "flags": [], + "description": "Media Type Database", + "size": 203453, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".json", + ".md", + ".js", + "" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "db.json" + ], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.50.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 60, + "lastUpdateAt": "2021-09-16T01:37:03.130Z", + "lastVersion": "1.50.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/jshttp/mime-db#readme", + "author": "jongleberry", + "publishers": [ + { + "name": "jongleberry", + "version": "0.0.0", + "at": "2014-08-14T22:17:35.560Z" + }, + { + "name": "dougwilson", + "version": "1.0.2", + "at": "2014-09-25T07:47:47.870Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "mime-types": { + "2.1.33": { + "id": 40, + "usedBy": { + "accepts": "1.3.7", + "type-is": "1.6.18" + }, + "flags": [ + "hasDependencies" + ], + "description": "The ultimate javascript content-type utility.", + "size": 18034, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "path" + ], + "required_thirdparty": [ + "mime-db" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.1.33" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 1, + "publishedCount": 53, + "lastUpdateAt": "2021-10-01T17:09:22.903Z", + "lastVersion": "2.1.33", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/jshttp/mime-types#readme", + "author": "jongleberry", + "publishers": [ + { + "name": "jongleberry", + "version": "0.1.0", + "at": "2014-05-02T15:54:00.885Z" + }, + { + "name": "fishrock123", + "version": "1.0.0", + "at": "2014-05-12T20:00:39.325Z" + }, + { + "name": "dougwilson", + "version": "1.0.2", + "at": "2014-08-04T03:44:33.290Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + } + ] + } + }, + "ipaddr.js": { + "1.9.1": { + "id": 42, + "usedBy": { + "proxy-addr": "2.0.7" + }, + "flags": [ + "hasWarnings", + "isOutdated" + ], + "description": "A library for manipulating IPv4 and IPv6 addresses in JavaScript.", + "size": 42145, + "author": "whitequark ", + "warnings": [ + { + "kind": "unsafe-regex", + "location": [ + [ + 491, + 52 + ], + [ + 491, + 87 + ] + ], + "value": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$", + "file": "lib\\ipaddr.js" + }, + { + "kind": "unsafe-regex", + "location": [ + [ + 1, + 6990 + ], + [ + 1, + 7025 + ] + ], + "value": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$", + "file": "ipaddr.min.js" + } + ], + "composition": { + "extensions": [ + ".js", + ".ts", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "ipaddr.min.js", + "lib\\ipaddr.js", + "lib\\ipaddr.js.d.ts", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.9.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 33, + "lastUpdateAt": "2021-06-09T16:45:51.569Z", + "lastVersion": "2.0.1", + "hasManyPublishers": false, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/whitequark/ipaddr.js#readme", + "author": "whitequark", + "publishers": [ + { + "name": "whitequark", + "version": "0.1.2", + "at": "2013-12-06T22:00:21.923Z" + } + ], + "maintainers": [ + { + "name": "whitequark", + "email": "whitequark@whitequark.org" + } + ] + } + }, + "proxy-addr": { + "2.0.7": { + "id": 43, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency" + ], + "description": "Determine address of proxied request", + "size": 15399, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "forwarded", + "ipaddr.js" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.0.7" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 2, + "publishedCount": 27, + "lastUpdateAt": "2021-06-01T00:57:28.507Z", + "lastVersion": "2.0.7", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/jshttp/proxy-addr#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "0.0.0", + "at": "2014-05-05T02:38:49.512Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "unpipe": { + "1.0.0": { + "id": 46, + "usedBy": { + "finalhandler": "1.1.2", + "raw-body": "2.4.0" + }, + "flags": [], + "description": "Unpipe a stream from all destinations", + "size": 4311, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 1, + "lastUpdateAt": "2015-06-14T20:30:19.934Z", + "lastVersion": "1.0.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/stream-utils/unpipe", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "1.0.0", + "at": "2015-06-14T20:30:19.934Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "finalhandler": { + "1.1.2": { + "id": 47, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "hasIndirectDependencies" + ], + "description": "Node.js final http responder", + "size": 17043, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "debug", + "encodeurl", + "escape-html", + "on-finished", + "parseurl", + "statuses", + "unpipe" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.1.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 4, + "publishedCount": 27, + "lastUpdateAt": "2019-05-10T02:04:53.493Z", + "lastVersion": "1.1.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/pillarjs/finalhandler#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "0.0.0", + "at": "2014-06-06T02:46:23.972Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "negotiator": { + "0.6.2": { + "id": 48, + "usedBy": { + "accepts": "1.3.7" + }, + "flags": [ + "hasWarnings" + ], + "description": "HTTP content negotiation", + "size": 28102, + "author": {}, + "warnings": [ + { + "kind": "unsafe-regex", + "location": [ + [ + 24, + 26 + ], + [ + 24, + 55 + ] + ], + "value": "^\\s*([^\\s;]+)\\s*(?:;(.*))?$", + "file": "lib\\charset.js" + }, + { + "kind": "unsafe-regex", + "location": [ + [ + 24, + 27 + ], + [ + 24, + 73 + ] + ], + "value": "^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$", + "file": "lib\\language.js" + }, + { + "kind": "unsafe-regex", + "location": [ + [ + 24, + 27 + ], + [ + 24, + 56 + ] + ], + "value": "^\\s*([^\\s;]+)\\s*(?:;(.*))?$", + "file": "lib\\encoding.js" + }, + { + "kind": "unsafe-regex", + "location": [ + [ + 24, + 28 + ], + [ + 24, + 70 + ] + ], + "value": "^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$", + "file": "lib\\mediaType.js" + } + ], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "lib\\charset.js", + "lib\\encoding.js", + "lib\\language.js", + "lib\\mediaType.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "lib\\charset.js", + "lib\\encoding.js", + "lib\\language.js", + "lib\\mediaType.js" + ], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.6.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 25, + "lastUpdateAt": "2019-04-30T00:30:30.629Z", + "lastVersion": "0.6.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/negotiator#readme", + "author": "federomero", + "publishers": [ + { + "name": "federomero", + "version": "0.1.0", + "at": "2012-01-26T17:25:19.965Z" + }, + { + "name": "dougwilson", + "version": "0.4.8", + "at": "2014-09-28T21:46:31.730Z" + } + ], + "maintainers": [ + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + } + ] + } + }, + "accepts": { + "1.3.7": { + "id": 49, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasDependencies", + "hasIndirectDependencies" + ], + "description": "Higher-level content negotiation", + "size": 16646, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "negotiator", + "mime-types" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.3.7" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 2, + "publishedCount": 35, + "lastUpdateAt": "2019-04-30T03:41:03.144Z", + "lastVersion": "1.3.7", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/accepts#readme", + "author": "jongleberry", + "publishers": [ + { + "name": "jongleberry", + "version": "1.0.0", + "at": "2013-12-27T21:42:44.260Z" + }, + { + "name": "dougwilson", + "version": "1.0.2", + "at": "2014-05-29T17:39:16.522Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "mime": { + "1.6.0": { + "id": 50, + "usedBy": { + "send": "0.17.1" + }, + "flags": [ + "isOutdated" + ], + "description": "A comprehensive library for mime-type mapping", + "size": 51738, + "author": { + "name": "Robert Kieffer", + "url": "http://github.com/broofa", + "email": "robert@broofa.com" + }, + "warnings": [], + "composition": { + "extensions": [ + "", + ".md", + ".js", + ".json" + ], + "files": [ + ".npmignore", + "CHANGELOG.md", + "LICENSE", + "README.md", + "cli.js", + "mime.js", + "package.json", + "src\\build.js", + "src\\test.js", + "types.json" + ], + "minified": [], + "unused": [], + "missing": [ + "chalk" + ], + "required_files": [ + "mime.js", + "types.json", + "mime.js" + ], + "required_nodejs": [ + "path", + "fs", + "assert" + ], + "required_thirdparty": [ + "chalk" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.6.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 44, + "lastUpdateAt": "2021-02-17T17:58:58.345Z", + "lastVersion": "2.5.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/broofa/mime#readme", + "author": "Robert Kieffer", + "publishers": [ + { + "name": "broofa", + "version": "1.2.5", + "at": "2012-02-16T14:14:57.547Z" + }, + { + "name": "bentomas", + "version": "1.2.6", + "at": "2012-06-26T15:32:22.315Z" + } + ], + "maintainers": [ + { + "name": "bentomas", + "email": "benjamin@benjaminthomas.org" + }, + { + "name": "broofa", + "email": "robert@broofa.com" + } + ] + } + }, + "inherits": { + "2.0.3": { + "id": 51, + "usedBy": { + "http-errors": "1.7.2" + }, + "flags": [ + "isOutdated" + ], + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "size": 3824, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "inherits.js", + "inherits_browser.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "inherits_browser.js" + ], + "required_nodejs": [ + "util" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "ISC" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "ISC" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/ISC.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "ISC" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/ISC.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.0.3", + "2.0.4" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 7, + "lastUpdateAt": "2019-06-19T20:18:52.465Z", + "lastVersion": "2.0.4", + "hasManyPublishers": false, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/isaacs/inherits#readme", + "author": "isaacs", + "publishers": [ + { + "name": "isaacs", + "version": "2.0.0", + "at": "2013-05-16T14:44:54.523Z" + } + ], + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ] + }, + "2.0.4": { + "id": 54, + "usedBy": { + "http-errors": "1.7.3" + }, + "flags": [], + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "size": 3958, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "inherits.js", + "inherits_browser.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "inherits_browser.js" + ], + "required_nodejs": [ + "util" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "ISC" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "ISC" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/ISC.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "ISC" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/ISC.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + } + }, + "http-errors": { + "1.7.3": { + "id": 55, + "usedBy": { + "send": "0.17.1" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "isOutdated" + ], + "description": "Create HTTP error objects", + "size": 17151, + "author": "Jonathan Ong (http://jongleberry.com)", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "depd", + "setprototypeof", + "statuses", + "inherits", + "toidentifier" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.7.3", + "1.7.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 1, + "publishedCount": 27, + "lastUpdateAt": "2020-06-29T05:41:17.267Z", + "lastVersion": "1.8.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/jshttp/http-errors#readme", + "author": "Jonathan Ong", + "publishers": [ + { + "name": "egeste", + "version": "0.0.1", + "at": "2012-11-18T05:58:24.328Z" + }, + { + "name": "jongleberry", + "version": "1.0.0", + "at": "2014-09-08T20:04:47.893Z" + }, + { + "name": "dougwilson", + "version": "1.2.8", + "at": "2014-12-09T20:41:08.043Z" + } + ], + "maintainers": [ + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + }, + { + "email": "npm@egeste.net", + "name": "egeste" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + } + ] + }, + "1.7.2": { + "id": 61, + "usedBy": { + "body-parser": "1.19.0", + "raw-body": "2.4.0" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "isOutdated" + ], + "description": "Create HTTP error objects", + "size": 17086, + "author": "Jonathan Ong (http://jongleberry.com)", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "depd", + "setprototypeof", + "statuses", + "inherits", + "toidentifier" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + } + }, + "send": { + "0.17.1": { + "id": 56, + "usedBy": { + "express": "4.17.1", + "serve-static": "1.14.1" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "hasIndirectDependencies" + ], + "description": "Better streaming static file server with Range and conditional-GET support", + "size": 48173, + "author": "TJ Holowaychuk ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "fs", + "path", + "stream", + "util" + ], + "required_thirdparty": [ + "http-errors", + "debug", + "depd", + "destroy", + "encodeurl", + "escape-html", + "etag", + "fresh", + "mime", + "ms", + "on-finished", + "range-parser", + "statuses" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.17.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 5, + "publishedCount": 58, + "lastUpdateAt": "2019-05-11T01:40:56.003Z", + "lastVersion": "0.17.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/pillarjs/send#readme", + "author": "TJ Holowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "0.1.0", + "at": "2012-09-19T18:36:49.783Z" + }, + { + "name": "dougwilson", + "version": "0.3.0", + "at": "2014-04-24T14:33:52.351Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "serve-static": { + "1.14.1": { + "id": 59, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasDependencies", + "hasIndirectDependencies" + ], + "description": "Serve static files", + "size": 24894, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [ + "path", + "url" + ], + "required_thirdparty": [ + "encodeurl", + "escape-html", + "parseurl", + "send" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.14.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 4, + "publishedCount": 57, + "lastUpdateAt": "2019-05-11T03:40:40.466Z", + "lastVersion": "1.14.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/expressjs/serve-static#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "dougwilson", + "version": "1.0.0", + "at": "2014-03-06T03:09:32.347Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "toidentifier": { + "1.0.0": { + "id": 60, + "usedBy": { + "http-errors": "1.7.3" + }, + "flags": [], + "description": "Convert a string of words to a JavaScript identifier", + "size": 4327, + "author": "Douglas Christopher Wilson ", + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "README.md", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.0.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 2, + "lastUpdateAt": "2018-07-09T15:57:07.703Z", + "lastVersion": "1.0.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/component/toidentifier#readme", + "author": "Douglas Christopher Wilson", + "publishers": [ + { + "name": "niftylettuce", + "version": "0.0.1", + "at": "2017-12-19T09:08:44.919Z" + }, + { + "name": "dougwilson", + "version": "1.0.0", + "at": "2018-07-09T15:57:07.703Z" + } + ], + "maintainers": [ + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + }, + { + "email": "jonathanrichardong@gmail.com", + "name": "jongleberry" + }, + { + "email": "niftylettuce@gmail.com", + "name": "niftylettuce" + } + ] + } + }, + "safer-buffer": { + "2.1.2": { + "id": 62, + "usedBy": { + "iconv-lite": "0.4.24" + }, + "flags": [], + "description": "Modern Buffer API polyfill without footguns", + "size": 42299, + "author": { + "name": "Nikita Skovoroda", + "email": "chalkerx@gmail.com", + "url": "https://github.com/ChALkeR" + }, + "warnings": [], + "composition": { + "extensions": [ + ".js", + "", + ".json", + ".md" + ], + "files": [ + "LICENSE", + "Porting-Buffer.md", + "Readme.md", + "dangerous.js", + "package.json", + "safer.js", + "tests.js" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "safer.js", + "index.js", + "safer.js", + "dangerous.js" + ], + "required_nodejs": [ + "buffer" + ], + "required_thirdparty": [] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.1.2" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 6, + "lastUpdateAt": "2018-04-08T10:42:42.130Z", + "lastVersion": "2.1.2", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/ChALkeR/safer-buffer#readme", + "author": "Nikita Skovoroda", + "publishers": [ + { + "name": "chalker", + "version": "2.0.0", + "at": "2018-03-19T08:35:17.564Z" + } + ], + "maintainers": [ + { + "name": "chalker", + "email": "chalkerx@gmail.com" + } + ] + } + }, + "iconv-lite": { + "0.4.24": { + "id": 63, + "usedBy": { + "body-parser": "1.19.0", + "raw-body": "2.4.0" + }, + "flags": [ + "hasDependencies", + "isOutdated", + "hasWarnings" + ], + "description": "Convert character encodings in pure javascript.", + "size": 335941, + "author": "Alexander Shtuchkin ", + "warnings": [ + { + "kind": "encoded-literal", + "value": "eda0bdedb2a9", + "location": [ + [ + [ + 36, + 24 + ], + [ + 36, + 38 + ] + ] + ], + "file": "encodings\\internal.js" + }, + { + "kind": "suspicious-literal", + "location": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "value": 3, + "file": "encodings\\sbcs-data.js" + } + ], + "composition": { + "extensions": [ + ".md", + ".js", + ".json", + ".ts", + "" + ], + "files": [ + "Changelog.md", + "LICENSE", + "README.md", + "encodings\\dbcs-codec.js", + "encodings\\dbcs-data.js", + "encodings\\index.js", + "encodings\\internal.js", + "encodings\\sbcs-codec.js", + "encodings\\sbcs-data-generated.js", + "encodings\\sbcs-data.js", + "encodings\\tables\\big5-added.json", + "encodings\\tables\\cp936.json", + "encodings\\tables\\cp949.json", + "encodings\\tables\\cp950.json", + "encodings\\tables\\eucjp.json", + "encodings\\tables\\gb18030-ranges.json", + "encodings\\tables\\gbk-added.json", + "encodings\\tables\\shiftjis.json", + "encodings\\utf16.js", + "encodings\\utf7.js", + "lib\\bom-handling.js", + "lib\\extend-node.js", + "lib\\index.d.ts", + "lib\\index.js", + "lib\\streams.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "encodings\\tables\\shiftjis.json", + "encodings\\tables\\eucjp.json", + "encodings\\tables\\cp936.json", + "encodings\\tables\\gbk-added.json", + "encodings\\tables\\gb18030-ranges.json", + "encodings\\tables\\cp949.json", + "encodings\\tables\\cp950.json", + "encodings\\tables\\big5-added.json", + "encodings\\internal.js", + "encodings\\utf16.js", + "encodings\\utf7.js", + "encodings\\sbcs-codec.js", + "encodings\\sbcs-data.js", + "encodings\\sbcs-data-generated.js", + "encodings\\dbcs-codec.js", + "encodings\\dbcs-data.js", + "lib\\bom-handling.js", + "encodings.js", + "lib\\streams.js", + "lib\\extend-node.js" + ], + "required_nodejs": [ + "string_decoder", + "buffer", + "stream" + ], + "required_thirdparty": [ + "safer-buffer" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "0.4.24" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 1, + "publishedCount": 51, + "lastUpdateAt": "2021-05-24T03:00:17.928Z", + "lastVersion": "0.6.3", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": true, + "homepage": "https://github.com/ashtuchkin/iconv-lite", + "author": "Alexander Shtuchkin", + "publishers": [ + { + "name": "ashtuchkin", + "version": "0.1.0", + "at": "2011-11-09T17:51:05.090Z" + } + ], + "maintainers": [ + { + "name": "ashtuchkin", + "email": "ashtuchkin@gmail.com" + } + ] + } + }, + "raw-body": { + "2.4.0": { + "id": 65, + "usedBy": { + "body-parser": "1.19.0" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "isOutdated" + ], + "description": "Get and validate the raw body of a readable stream.", + "size": 22692, + "author": "Jonathan Ong (http://jongleberry.com)", + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".ts", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.d.ts", + "index.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [], + "required_nodejs": [], + "required_thirdparty": [ + "bytes", + "http-errors", + "iconv-lite", + "unpipe" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "2.4.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 0, + "publishedCount": 43, + "lastUpdateAt": "2019-06-26T03:50:01.465Z", + "lastVersion": "2.4.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/stream-utils/raw-body#readme", + "author": "Jonathan Ong", + "publishers": [ + { + "name": "jongleberry", + "version": "0.0.1", + "at": "2013-09-14T03:21:49.810Z" + }, + { + "name": "dougwilson", + "version": "1.1.6", + "at": "2014-05-27T13:42:01.085Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + } + ] + } + }, + "body-parser": { + "1.19.0": { + "id": 67, + "usedBy": { + "express": "4.17.1" + }, + "flags": [ + "hasDependencies", + "hasOutdatedDependency", + "hasIndirectDependencies" + ], + "description": "Node.js body parsing middleware", + "size": 56375, + "author": {}, + "warnings": [], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js", + "lib\\read.js", + "lib\\types\\json.js", + "lib\\types\\raw.js", + "lib\\types\\text.js", + "lib\\types\\urlencoded.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "lib\\types\\json.js", + "lib\\types\\raw.js", + "lib\\types\\text.js", + "lib\\types\\urlencoded.js", + "lib\\read.js" + ], + "required_nodejs": [ + "zlib", + "querystring" + ], + "required_thirdparty": [ + "depd", + "http-errors", + "raw-body", + "iconv-lite", + "on-finished", + "bytes", + "content-type", + "debug", + "type-is", + "qs" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "1.19.0" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 7, + "publishedCount": 65, + "lastUpdateAt": "2019-04-26T03:31:23.981Z", + "lastVersion": "1.19.0", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "https://github.com/expressjs/body-parser#readme", + "author": "jongleberry", + "publishers": [ + { + "name": "jongleberry", + "version": "1.0.0", + "at": "2014-01-06T08:25:15.060Z" + }, + { + "name": "dougwilson", + "version": "1.1.0", + "at": "2014-05-11T01:46:04.793Z" + } + ], + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ] + } + }, + "express": { + "4.17.1": { + "id": 0, + "usedBy": {}, + "flags": [ + "hasDependencies", + "hasIndirectDependencies", + "hasOutdatedDependency", + "hasWarnings", + "hasExternalCapacity" + ], + "description": "Fast, unopinionated, minimalist web framework", + "size": 208133, + "author": "TJ Holowaychuk ", + "warnings": [ + { + "kind": "unsafe-import", + "location": [ + [ + 81, + 13 + ], + [ + 81, + 25 + ] + ], + "file": "lib\\view.js" + } + ], + "composition": { + "extensions": [ + ".md", + ".js", + "", + ".json" + ], + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js", + "lib\\application.js", + "lib\\express.js", + "lib\\middleware\\init.js", + "lib\\middleware\\query.js", + "lib\\request.js", + "lib\\response.js", + "lib\\router\\index.js", + "lib\\router\\layer.js", + "lib\\router\\route.js", + "lib\\utils.js", + "lib\\view.js", + "package.json" + ], + "minified": [], + "unused": [], + "missing": [], + "required_files": [ + "lib\\express.js", + "lib\\router.js", + "lib\\middleware\\init.js", + "lib\\middleware\\query.js", + "lib\\view.js", + "lib\\utils.js", + "lib\\application.js", + "lib\\router\\route.js", + "lib\\request.js", + "lib\\response.js", + "lib\\router\\layer.js" + ], + "required_nodejs": [ + "http", + "path", + "events", + "net", + "querystring", + "fs" + ], + "required_thirdparty": [ + "finalhandler", + "methods", + "debug", + "depd", + "array-flatten", + "utils-merge", + "setprototypeof", + "body-parser", + "merge-descriptors", + "serve-static", + "parseurl", + "qs", + "accepts", + "type-is", + "fresh", + "range-parser", + "proxy-addr", + "safe-buffer", + "content-disposition", + "encodeurl", + "escape-html", + "on-finished", + "statuses", + "cookie-signature", + "cookie", + "send", + "vary", + "path-to-regexp", + "content-type", + "etag" + ] + }, + "license": { + "uniqueLicenseIds": [ + "MIT" + ], + "hasMultipleLicenses": false, + "licenses": [ + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "package.json" + }, + { + "uniqueLicenseIds": [ + "MIT" + ], + "spdxLicenseLinks": [ + "https://spdx.org/licenses/MIT.html#licenseText" + ], + "spdx": { + "osi": true, + "fsf": true, + "fsfAndOsi": true, + "includesDeprecated": false + }, + "from": "LICENSE" + } + ] + }, + "gitUrl": null + }, + "versions": [ + "4.17.1" + ], + "vulnerabilities": [], + "metadata": { + "dependencyCount": 30, + "publishedCount": 264, + "lastUpdateAt": "2019-05-26T04:25:34.606Z", + "lastVersion": "4.17.1", + "hasManyPublishers": true, + "hasReceivedUpdateInOneYear": false, + "homepage": "http://expressjs.com/", + "author": "TJ Holowaychuk", + "publishers": [ + { + "name": "tjholowaychuk", + "version": "2.5.1", + "at": "2011-11-18T16:04:40.126Z" + }, + { + "name": "jongleberry", + "version": "3.4.1", + "at": "2013-10-16T01:34:32.939Z" + }, + { + "name": "shtylman", + "version": "4.0.0-rc1", + "at": "2014-03-02T16:19:53.255Z" + }, + { + "name": "dougwilson", + "version": "3.5.2", + "at": "2014-04-24T20:40:38.736Z" + } + ], + "maintainers": [ + { + "email": "doug@somethingdoug.com", + "name": "dougwilson" + }, + { + "email": "jasnell@gmail.com", + "name": "jasnell" + }, + { + "email": "mikeal.rogers@gmail.com", + "name": "mikeal" + } + ] + } + } + }, + "version": "1.4.0", + "vulnerabilityStrategy": "none" +} \ No newline at end of file diff --git a/test/httpServer.js b/test/httpServer.spec.js similarity index 100% rename from test/httpServer.js rename to test/httpServer.spec.js diff --git a/test/process/summary.js b/test/process/summary.js new file mode 100644 index 00000000..1cda8bd4 --- /dev/null +++ b/test/process/summary.js @@ -0,0 +1,4 @@ +// Import command +import * as summary from "../../src/commands/summary.js"; + +await summary.main("result-test1.json"); diff --git a/test/utils.js b/test/utils.spec.js similarity index 100% rename from test/utils.js rename to test/utils.spec.js From 8ea9b5b0e6a398117f58158b761ebeda35f0ecae Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 19:37:45 +0200 Subject: [PATCH 19/32] refactor(test): use tape instead of jest --- jest.setup.js | 3 - package-lock.json | 2964 +++++--------------- package.json | 26 +- src/commands/http.js | 9 +- src/httpServer.js | 7 +- test/__snapshots__/httpServer.spec.js.snap | 102 - test/commands/summary.spec.js | 66 +- test/httpServer.spec.js | 76 +- test/utils.spec.js | 57 +- 9 files changed, 851 insertions(+), 2459 deletions(-) delete mode 100644 jest.setup.js delete mode 100644 test/__snapshots__/httpServer.spec.js.snap diff --git a/jest.setup.js b/jest.setup.js deleted file mode 100644 index 2cc5f635..00000000 --- a/jest.setup.js +++ /dev/null @@ -1,3 +0,0 @@ -import { jest } from "@jest/globals"; - -jest.setTimeout(30000); diff --git a/package-lock.json b/package-lock.json index 0bfce7c1..c1d48aa4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,58 +9,6 @@ "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==" }, - "@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "dev": true - }, - "@babel/core": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": 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 - } - } - }, "@babel/eslint-parser": { "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.8.tgz", @@ -86,176 +34,12 @@ } } }, - "@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", - "dev": true, - "requires": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "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==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", - "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", - "dev": true, - "requires": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", @@ -319,129 +103,6 @@ } } }, - "@babel/parser": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, "@babel/runtime": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", @@ -450,44 +111,6 @@ "regenerator-runtime": "^0.13.4" } }, - "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - } - }, "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -559,233 +182,12 @@ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, - "@jest/console": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", - "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.3.1", - "jest-util": "^27.3.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", - "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/reporters": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.3.0", - "jest-config": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-resolve-dependencies": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "jest-watcher": "^27.3.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "@jest/environment": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", - "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0" - } - }, - "@jest/fake-timers": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", - "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - } - }, - "@jest/globals": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", - "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/types": "^27.2.5", - "expect": "^27.3.1" - } - }, - "@jest/reporters": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", - "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - } - }, - "@jest/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", - "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", - "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.3.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-runtime": "^27.3.1" - } - }, - "@jest/transform": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", - "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.2.5", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.3.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", - "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, "@myunisoft/httpie": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@myunisoft/httpie/-/httpie-1.1.0.tgz", @@ -1350,24 +752,6 @@ "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==" }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", - "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, "@slimio/async-cli-spinner": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@slimio/async-cli-spinner/-/async-cli-spinner-0.5.2.tgz", @@ -1427,60 +811,40 @@ "resolved": "https://registry.npmjs.org/@slimio/wcwidth/-/wcwidth-1.0.0.tgz", "integrity": "sha512-/IXhyOjKnXkKeJlkavbmY1VCkznwZeMDccCABQXrYtyfYLfF0Wjzubtf8+stIiGyy7jkZiZE5w2fVaH1XhzX5A==" }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "@small-tech/esm-tape-runner": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@small-tech/esm-tape-runner/-/esm-tape-runner-1.0.3.tgz", + "integrity": "sha512-2r8pC/Yqda/m9md/fXhCD4d+2gZ3euAfl5FSHJJodWmIOZT+sgDrL+c1SYPX3GIK6TZshK3TZvcPkOEr5pE/7A==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "fast-glob": "^3.2.5" } }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "@small-tech/tap-monkey": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@small-tech/tap-monkey/-/tap-monkey-1.3.0.tgz", + "integrity": "sha512-R9D+7nKvyPKCFEATXDfzJjYW1IR1sXWcDm55bUWU9BOfFG58ZAkPOhyNcFsJYoq3vU471EK381Y5qv7hlChKww==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@small-tech/tap-out": "^3.2.0", + "chalk": "^4.1.0", + "ora": "^5.3.0" } }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "@small-tech/tap-out": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@small-tech/tap-out/-/tap-out-3.2.0.tgz", + "integrity": "sha512-2B35YwIogdOeurPJlMg9GxEmGS2gxRJjEZduCr2FPJEwGotPpSOEk0wJ2co1n1iEw3Q6kSSfHLEEES4hLe7wlA==", "dev": true, "requires": { - "@babel/types": "^7.3.0" + "re-emitter": "1.1.4", + "split": "1.0.1" } }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, "@types/istanbul-lib-coverage": { "version": "2.0.3", @@ -1488,34 +852,6 @@ "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", - "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", - "dev": true, - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -1528,33 +864,6 @@ "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==", "dev": true }, - "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, "@typescript-eslint/eslint-plugin": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", @@ -1671,12 +980,6 @@ } } }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1688,28 +991,12 @@ "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.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, - "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 - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1754,23 +1041,6 @@ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -1784,16 +1054,6 @@ "color-convert": "^2.0.1" } }, - "anymatch": { - "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" - } - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -1864,6 +1124,12 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1874,98 +1140,6 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, - "babel-jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", - "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", - "dev": true, - "requires": { - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz", - "integrity": "sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.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 - } - } - }, - "babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.2.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2037,34 +1211,6 @@ "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 - }, - "browserslist": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", - "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001265", - "electron-to-chromium": "^1.3.867", - "escalade": "^3.1.1", - "node-releases": "^2.0.0", - "picocolors": "^1.0.0" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2074,12 +1220,6 @@ "ieee754": "^1.1.13" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, "builtins": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", @@ -2094,6 +1234,65 @@ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, + "c8": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.10.0.tgz", + "integrity": "sha512-OAwfC5+emvA6R7pkYFVBTOtI5ruf9DahffGmIqUc9l6wEh0h7iAFP6dt/V9Ioqlr2zW5avX9U9/w1I4alTRHkA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.2", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.0.1", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "rimraf": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^8.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.7" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, "cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -2119,24 +1318,22 @@ "unique-filename": "^1.1.1" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "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 - }, - "caniuse-lite": { - "version": "1.0.30001271", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", - "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", - "dev": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -2152,29 +1349,11 @@ "supports-color": "^7.1.0" } }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -2233,6 +1412,12 @@ } } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, "cmd-shim": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", @@ -2241,23 +1426,11 @@ "mkdirp-infer-owner": "^2.0.0" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2346,29 +1519,6 @@ "which": "^2.0.1" } }, - "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 - } - } - }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -2386,17 +1536,6 @@ "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" - } - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -2441,35 +1580,72 @@ } } }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, + "deep-equal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "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 }, - "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 + "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" + } }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, + "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" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2485,12 +1661,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, "dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", @@ -2500,12 +1670,6 @@ "wrappy": "1" } }, - "diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "dev": true - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2524,28 +1688,20 @@ "esutils": "^2.0.2" } }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, "dotenv": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" }, + "dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2555,18 +1711,6 @@ "safer-buffer": "^2.1.0" } }, - "electron-to-chromium": { - "version": "1.3.878", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", - "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2617,6 +1761,69 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "esbuild": { "version": "0.13.8", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", @@ -2773,66 +1980,6 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "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": "8.1.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", @@ -3092,51 +2239,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expect": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", - "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-regex-util": "^27.0.6" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3193,15 +2295,6 @@ "reusify": "^1.0.4" } }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3235,16 +2328,6 @@ "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==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -3261,6 +2344,31 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3299,13 +2407,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "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 - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3333,29 +2434,38 @@ "wide-align": "^1.1.0" } }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, "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 }, + "get-intrinsic": { + "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", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } }, "getpass": { "version": "0.1.7", @@ -3387,12 +2497,6 @@ "is-glob": "^4.0.1" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, "globby": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", @@ -3443,12 +2547,42 @@ "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-dynamic-import": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.0.tgz", + "integrity": "sha512-GYPi/aZmACJVrVfEhP1rNUFmtCuK+SQ96mn8Bs7mXiGZRAJiI4VjaMmjj4uuvW8qaF085uWJvyJk9UNYUIYn0A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-symbols": { + "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-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -3462,15 +2596,6 @@ "lru-cache": "^6.0.0" } }, - "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" - } - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -3517,12 +2642,6 @@ "debug": "4" } }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, "humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -3577,16 +2696,6 @@ } } }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -3616,11 +2725,32 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3632,6 +2762,31 @@ "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-1.1.0.tgz", "integrity": "sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g==" }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, "is-core-module": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", @@ -3641,6 +2796,15 @@ "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -3660,12 +2824,6 @@ "number-is-nan": "^1.0.0" } }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -3675,52 +2833,147 @@ "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, "is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=" }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-minified-code": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-minified-code/-/is-minified-code-2.0.0.tgz", "integrity": "sha512-I1BHmOxm7owypunUWnYx2Ggdhg3lzdyJXLepi8NuR/IsvgVgkwjLj+12iYAGUklu0Xvy3nXGcDSKGbE0Q0Nkag==" }, + "is-negative-zero": { + "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-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "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-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==", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-svg": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.1.tgz", "integrity": "sha512-h2CGs+yPUyvkgTJQS9cJzo9lYK06WgRiXUqBBHtglSzVKAuH4/oWsqk7LGfbSa1hGk9QcZ0SyQtVggvBA8LZXA==", "requires": { - "fast-xml-parser": "^3.19.0" + "fast-xml-parser": "^3.19.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "dev": true }, "is-wsl": { "version": "2.2.0", @@ -3751,26 +3004,6 @@ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "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==", - "dev": true - } - } - }, "istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -3782,17 +3015,6 @@ "supports-color": "^7.1.0" } }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, "istanbul-reports": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", @@ -3811,491 +3033,6 @@ "@babel/runtime": "^7.14.6" } }, - "jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", - "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", - "dev": true, - "requires": { - "@jest/core": "^27.3.1", - "import-local": "^3.0.2", - "jest-cli": "^27.3.1" - }, - "dependencies": { - "jest-cli": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", - "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", - "dev": true, - "requires": { - "@jest/core": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - } - } - }, - "jest-changed-files": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", - "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", - "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-config": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", - "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.3.1", - "@jest/types": "^27.2.5", - "babel-jest": "^27.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.3.1", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-jasmine2": "^27.3.1", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-runner": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.1" - } - }, - "jest-diff": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", - "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", - "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-environment-jsdom": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", - "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", - "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", - "dev": true, - "requires": { - "@jest/environment": "^27.3.1", - "@jest/fake-timers": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.3.0", - "jest-util": "^27.3.1" - } - }, - "jest-get-type": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", - "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", - "dev": true - }, - "jest-haste-map": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", - "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", - "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "throat": "^6.0.1" - } - }, - "jest-leak-detector": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", - "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", - "dev": true, - "requires": { - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-matcher-utils": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", - "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "pretty-format": "^27.3.1" - } - }, - "jest-message-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", - "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.5", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", - "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", - "dev": true - }, - "jest-resolve": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", - "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", - "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.3.1" - } - }, - "jest-runner": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", - "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.3.1", - "jest-environment-node": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-leak-detector": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-util": "^27.3.1", - "jest-worker": "^27.3.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", - "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", - "dev": true, - "requires": { - "@jest/console": "^27.3.1", - "@jest/environment": "^27.3.1", - "@jest/globals": "^27.3.1", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.3.1", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-mock": "^27.3.0", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - } - }, - "jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", - "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.3.1", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.3.1", - "jest-get-type": "^27.3.1", - "jest-haste-map": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-resolve": "^27.3.1", - "jest-util": "^27.3.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.3.1", - "semver": "^7.3.2" - } - }, - "jest-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", - "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", - "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.3.1", - "leven": "^3.1.0", - "pretty-format": "^27.3.1" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", - "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.3.1", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.3.1", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "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": { - "has-flag": "^4.0.0" - } - } - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4317,77 +3054,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "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.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "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" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, "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", @@ -4425,15 +3091,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -4465,12 +3122,6 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==" }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4520,21 +3171,6 @@ } } }, - "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" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "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", @@ -4563,6 +3199,16 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -4621,15 +3267,6 @@ "ssri": "^8.0.0" } }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, "matchit": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", @@ -4638,12 +3275,6 @@ "@arr/every": "^1.0.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==", - "dev": true - }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4829,24 +3460,6 @@ "which": "^2.0.2" } }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -4861,12 +3474,6 @@ "integrity": "sha1-HL6oBKukNgAfg5OKsh7AOdaa6dM=", "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==", - "dev": true - }, "npm-bundled": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", @@ -4932,15 +3539,6 @@ "npm-package-arg": "^8.0.0" } }, - "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" - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -4957,12 +3555,6 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "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", @@ -4973,6 +3565,40 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-is": { + "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.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.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, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5013,22 +3639,38 @@ "word-wrap": "^1.2.3" } }, - "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==", + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "p-map": { @@ -5039,12 +3681,6 @@ "aggregate-error": "^3.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==", - "dev": true - }, "pacote": { "version": "11.3.5", "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", @@ -5090,12 +3726,6 @@ "just-diff-apply": "^3.0.0" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5130,12 +3760,6 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -5148,24 +3772,6 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, "pkg-ok": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/pkg-ok/-/pkg-ok-2.3.1.tgz", @@ -5446,32 +4052,6 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, - "pretty-format": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", - "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, "proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -5512,24 +4092,6 @@ "retry": "^0.12.0" } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "dependencies": { - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - } - } - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -5570,10 +4132,10 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "re-emitter": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.4.tgz", + "integrity": "sha512-C0SIXdXDSus2yqqvV7qifnb4NoWP7mEBXJq3axci301mXHCZb8Djwm4hrEZo4UeXRaEnfjH98uQ8EBppk2oNWA==", "dev": true }, "read-cmd-shim": { @@ -5625,6 +4187,16 @@ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.23.tgz", "integrity": "sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw==" }, + "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, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -5680,27 +4252,6 @@ "path-parse": "^1.0.6" } }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -5710,6 +4261,15 @@ "signal-exit": "^3.0.2" } }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "requires": { + "through": "~2.3.4" + } + }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -5764,15 +4324,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "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" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -5801,6 +4352,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -5823,12 +4385,6 @@ } } }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, "size-satisfies": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/size-satisfies/-/size-satisfies-1.0.0.tgz", @@ -5887,22 +4443,6 @@ "socks": "^2.6.1" } }, - "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 - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -5932,6 +4472,15 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -5968,55 +4517,11 @@ "minipass": "^3.1.1" } }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "string-natural-compare": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-2.0.3.tgz", @@ -6033,6 +4538,37 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.trim": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", + "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.trimend": { + "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": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "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": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -6049,18 +4585,6 @@ "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==", - "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==", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6086,22 +4610,6 @@ "has-flag": "^4.0.0" } }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.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.7.2", "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", @@ -6168,6 +4676,59 @@ } } }, + "tape": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.3.1.tgz", + "integrity": "sha512-Mj3h+/dgfI2xct4kTpzqZaRxhhglXcMg//xGTbB0AQisfiOYa6ZBNQIgv46xi1MqbgthuNLSS1SAySDZsb7MMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "deep-equal": "^2.0.5", + "defined": "^1.0.0", + "dotignore": "^0.1.2", + "for-each": "^0.3.3", + "get-package-type": "^0.1.0", + "glob": "^7.1.7", + "has": "^1.0.3", + "has-dynamic-import": "^2.0.0", + "inherits": "^2.0.4", + "is-regex": "^1.1.4", + "minimist": "^1.2.5", + "object-inspect": "^1.11.0", + "object-is": "^1.1.5", + "object.assign": "^4.1.2", + "resolve": "^2.0.0-next.3", + "resumer": "^0.0.0", + "string.prototype.trim": "^1.2.4", + "through": "^2.3.8" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -6223,16 +4784,6 @@ } } }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -6250,22 +4801,10 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "to-regex-range": { @@ -6291,15 +4830,6 @@ "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" - } - }, "treeverse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", @@ -6365,12 +4895,6 @@ "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==", - "dev": true - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -6385,6 +4909,18 @@ "is-typedarray": "^1.0.0" } }, + "unbox-primitive": { + "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.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "undici": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/undici/-/undici-4.5.1.tgz", @@ -6406,12 +4942,6 @@ "imurmurhash": "^0.1.4" } }, - "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 - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6496,87 +5026,65 @@ "integrity": "sha512-rx96L144RJWcqOa6afjiFyxZKUerRRbT/YaNMpsusHdwzxrVTO2LlduR45PeJDEztrAf3AU5l2zmiG+1ydUZCw==", "dev": true }, - "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" - } - }, "walk-up-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "requires": { - "makeerror": "1.0.x" + "defaults": "^1.0.3" } }, - "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 + "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" + } }, - "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==", + "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": { - "iconv-lite": "0.4.24" - }, - "dependencies": { - "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" - } - } + "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" } }, - "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.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dev": true, "requires": { - "isexe": "^2.0.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" } }, "wide-align": { @@ -6649,24 +5157,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "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 - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -6733,6 +5223,12 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, + "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 + }, "zup": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/zup/-/zup-0.0.1.tgz", diff --git a/package.json b/package.json index c743737b..65479ad9 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "prepublishOnly": "npm run build && pkg-ok", "build": "node ./esbuild.config.js", "test": "npm run test-only && npm run eslint", - "test-only": "cross-env NODE_OPTIONS=--experimental-vm-modules jest" + "test-only": "cross-env esm-tape-runner 'test/**/*.spec.js' | tap-monkey", + "coverage": "c8 -r html npm test" }, "files": [ "bin", @@ -52,38 +53,23 @@ "bugs": { "url": "https://github.com/ES-Community/nsecure/issues" }, - "jest": { - "setupFilesAfterEnv": [ - "./jest.setup.js" - ], - "collectCoverage": true, - "collectCoverageFrom": [ - "**/src/**/*.js" - ], - "testEnvironment": "node", - "testMatch": [ - "**/test/**/*.spec.js" - ], - "testPathIgnorePatterns": [ - "/node_modules/", - "/test/fixtures/" - ] - }, "homepage": "https://github.com/ES-Community/nsecure#readme", "devDependencies": { "@nodesecure/eslint-config": "^1.2.1", - "@types/jest": "^27.0.2", + "@small-tech/esm-tape-runner": "^1.0.3", + "@small-tech/tap-monkey": "^1.3.0", "@types/node": "^16.11.4", + "c8": "^7.10.0", "cross-env": "^7.0.3", "esbuild": "^0.13.8", "eslint": "^8.1.0", "httpie": "^1.1.2", - "jest": "^27.3.1", "list.js": "^2.3.1", "pkg-ok": "^2.3.1", "pretty-bytes": "^5.6.0", "size-satisfies": "^1.0.0", "split2": "^4.1.0", + "tape": "^5.3.1", "vis-network": "^9.1.0" }, "dependencies": { diff --git a/src/commands/http.js b/src/commands/http.js index 8dcb9e0d..2db8edf3 100644 --- a/src/commands/http.js +++ b/src/commands/http.js @@ -2,15 +2,14 @@ import path from "path"; // Import Internal Dependencies -import { startHTTPServer } from "../httpServer.js"; +import { buildServer } from "../httpServer.js"; export async function start(json = "nsecure-result.json", options = {}) { - const { port } = options; + const port = Number(options.port); const dataFilePath = path.join(process.cwd(), json); - const configPort = Number.isNaN(Number(port)) ? 0 : Number(port); - const httpServer = await startHTTPServer(dataFilePath, { - configPort + const httpServer = buildServer(dataFilePath, { + port: Number.isNaN(port) ? 0 : port }); for (const eventName of ["SIGINT", "SIGTERM"]) { diff --git a/src/httpServer.js b/src/httpServer.js index a251de33..3a574d95 100644 --- a/src/httpServer.js +++ b/src/httpServer.js @@ -18,12 +18,12 @@ import * as i18n from "@nodesecure/i18n"; import { getFlags, lazyFetchFlagFile, getManifest } from "@nodesecure/flags"; // CONSTANTS -const kNodeSecureFlags = getFlags(); const __dirname = dirname(fileURLToPath(import.meta.url)); const kProjectRootDir = join(__dirname, ".."); +const kNodeSecureFlags = getFlags(); -export async function startHTTPServer(dataFilePath, options = {}) { - const httpConfigPort = typeof options.configPort === "number" ? options.configPort : 0; +export function buildServer(dataFilePath, options = {}) { + const httpConfigPort = typeof options.port === "number" ? options.port : 0; const openLink = typeof options.openLink === "boolean" ? options.openLink : true; fs.accessSync(dataFilePath, fs.constants.R_OK | fs.constants.W_OK); @@ -74,7 +74,6 @@ export async function startHTTPServer(dataFilePath, options = {}) { }); }); - /* istanbul ignore next */ httpServer.listen(httpConfigPort, () => { const link = `http://localhost:${httpServer.server.address().port}`; console.log(kleur.magenta().bold(i18n.getToken("cli.http_server_started")), kleur.cyan().bold(link)); diff --git a/test/__snapshots__/httpServer.spec.js.snap b/test/__snapshots__/httpServer.spec.js.snap deleted file mode 100644 index 4c13028b..00000000 --- a/test/__snapshots__/httpServer.spec.js.snap +++ /dev/null @@ -1,102 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`'/data' should return the fixture payload we expect 1`] = ` -Object { - "foo": "bar", -} -`; - -exports[`'/flags' should return the flags list as JSON 1`] = ` -Object { - "bannedFile": Object { - "emoji": "⚔️", - "title": "hasBannedFile", - "tooltipDescription": "The project has at least one sensitive file.", - }, - "customResolver": Object { - "emoji": "💎", - "title": "hasCustomResolver", - "tooltipDescription": "The package has dependencies that are not packages.", - }, - "duplicated": Object { - "emoji": "🎭", - "title": "isDuplicated", - "tooltipDescription": "The package is also used somewhere else in the dependency tree but with a different version", - }, - "externalCapacity": Object { - "emoji": "🌍", - "title": "hasExternalCapacity", - "tooltipDescription": "The package use at least one Node.js dependency capable to communicate outside or to establish a listening server.", - }, - "hasScript": Object { - "emoji": "📦", - "title": "hasScript", - "tooltipDescription": "has \`post\` and/or \`pre\` (un)install npm script", - }, - "indirectDependencies": Object { - "emoji": "🌲", - "title": "hasIndirectDependencies", - "tooltipDescription": "The package have indirect dependencies.", - }, - "isDead": Object { - "emoji": "💀", - "title": "isDead", - "tooltipDescription": "The dependency has not received update from at least one year!", - }, - "isDeprecated": Object { - "emoji": "⛔️", - "title": "isDeprecated", - "tooltipDescription": "The package is deprecated.", - }, - "isGit": Object { - "emoji": "☁️", - "title": "isGit", - "tooltipDescription": "The package (project) is a git repository", - }, - "manyPublishers": Object { - "emoji": "👥", - "title": "hasManyPublishers", - "tooltipDescription": "The package has several publishers.", - }, - "minifiedCode": Object { - "emoji": "🔬", - "title": "hasMinifiedCode", - "tooltipDescription": "The package seems to have files that are minified/uglified.", - }, - "missingOrUnusedDependency": Object { - "emoji": "👀", - "title": "hasMissingOrUnusedDependency", - "tooltipDescription": "A dependency is missing in package.json or a dependency is installed but never used!", - }, - "multipleLicense": Object { - "emoji": "📚", - "title": "hasMultipleLicenses", - "tooltipDescription": "The package has multiple licenses in multiple files", - }, - "nativeCode": Object { - "emoji": "🐲", - "title": "hasNativeCode", - "tooltipDescription": "The package use native components (package, file, configuration).", - }, - "noLicense": Object { - "emoji": "📜", - "title": "hasNoLicense", - "tooltipDescription": "The package does not seem to have a license.", - }, - "outdated": Object { - "emoji": "⌚️", - "title": "isOutdated", - "tooltipDescription": "The current package version is not equal to the package latest version!", - }, - "vulnerabilities": Object { - "emoji": "🚨", - "title": "vulnerabilities", - "tooltipDescription": "The package have one or many vulnerabilities.", - }, - "warnings": Object { - "emoji": "⚠", - "title": "hasWarnings", - "tooltipDescription": "The AST analysis has detected warnings (suspect import, unsafe regex ..)", - }, -} -`; diff --git a/test/commands/summary.spec.js b/test/commands/summary.spec.js index a62cac19..93fbe731 100644 --- a/test/commands/summary.spec.js +++ b/test/commands/summary.spec.js @@ -4,47 +4,45 @@ import { fileURLToPath } from "url"; import path from "path"; // Import Third-party Dependencies +import test from "tape"; import split from "split2"; // CONSTANTS const __dirname = path.dirname(fileURLToPath(import.meta.url)); const kProcessDir = path.join(__dirname, "..", "process"); -describe("summary", () => { - it("should execute summary command on fixtures 'result-test1.json'", async() => { - const lines = [ - /Global Stats: express.*$/, - /.*/, - /Total of packages:.*60.*$/, - /Total size:.*1.59 MB.*$/, - /Packages with indirect dependencies:.*6.*$/, - /.*/, - /Extensions:.*$/, - /\(52\) \.md - \(52\) \.js - \(50\) {2}- \(52\) \.json - \(5\) \.ts - \(1\) \.yml.*$/, - /.*/, - /Licenses:.*$/, - /\(48\) MIT - \(1\) BSD-3-Clause - \(3\) ISC.*$/, - /.*/ - ]; +test("summary should execute summary command on fixtures 'result-test1.json'", async(tape) => { + const lines = [ + /Global Stats: express.*$/, + /.*/, + /Total of packages:.*60.*$/, + /Total size:.*1.59 MB.*$/, + /Packages with indirect dependencies:.*6.*$/, + /.*/, + /Extensions:.*$/, + /\(52\) \.md - \(52\) \.js - \(50\) {2}- \(52\) \.json - \(5\) \.ts - \(1\) \.yml.*$/, + /.*/, + /Licenses:.*$/, + /\(48\) MIT - \(1\) BSD-3-Clause - \(3\) ISC.*$/, + /.*/ + ]; + tape.plan(lines.length * 2); - const child = spawn(process.execPath, [path.join(kProcessDir, "summary.js")], { - cwd: path.join(__dirname, "..", "fixtures"), - env: process.env, - stdio: ["ignore", "pipe", "pipe"], - detached: false - }); + const child = spawn(process.execPath, [path.join(kProcessDir, "summary.js")], { + cwd: path.join(__dirname, "..", "fixtures"), + env: process.env, + stdio: ["ignore", "pipe", "pipe"], + detached: false + }); + tape.teardown(() => child.kill()); - try { - const rStream = child.stdout.pipe(split()); - for await (const line of rStream) { - const regexp = lines.shift(); + const rStream = child.stdout.pipe(split()); + for await (const line of rStream) { + const regexp = lines.shift(); - expect(regexp).toBeDefined(); - expect(regexp.test(line)).toStrictEqual(true); - } - } - finally { - child.kill(); - } - }); + tape.ok(regexp, "we are expecting this line"); + tape.ok(regexp.test(line), `line matches ${regexp}`); + } + + tape.end(); }); diff --git a/test/httpServer.spec.js b/test/httpServer.spec.js index f6cf9e7d..e1b3482e 100644 --- a/test/httpServer.spec.js +++ b/test/httpServer.spec.js @@ -1,16 +1,17 @@ -// Require Node.js Dependencies +// Import Node.js Dependencies import { readFileSync } from "fs"; import { fileURLToPath } from "url"; import path from "path"; -// Require Third-party Dependencies +// Import Third-party Dependencies +import test from "tape"; import { get } from "httpie"; import zup from "zup"; import * as i18n from "@nodesecure/i18n"; import * as flags from "@nodesecure/flags"; // Require Internal Dependencies -import { startHTTPServer } from "../src/httpServer.js"; +import { buildServer } from "../src/httpServer.js"; // CONSTANTS const HTTP_PORT = 1337; @@ -21,64 +22,71 @@ const JSON_PATH = path.join(__dirname, "fixtures", "httpServer.json"); const INDEX_HTML = readFileSync(path.join(__dirname, "..", "views", "index.html"), "utf-8"); // VARS -let httpServer; - -beforeAll(async() => { - httpServer = await startHTTPServer(JSON_PATH, { - configPort: HTTP_PORT, - openLink: false - }); +const httpServer = buildServer(JSON_PATH, { + port: HTTP_PORT, + openLink: false }); -afterAll(() => { - httpServer.server.close(); -}); - -test("'/' should return index.html HTML content", async() => { +test("'/' should return index.html content", async(tape) => { const result = await get(HTTP_URL); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("text/html"); + tape.equal(result.statusCode, 200); + tape.equal(result.headers["content-type"], "text/html"); const templateStr = zup(INDEX_HTML)({ lang: i18n.getToken("lang"), token: (tokenName) => i18n.getToken(`ui.${tokenName}`) }); - expect(result.data).toStrictEqual(templateStr); + tape.equal(result.data, templateStr); + + tape.end(); }); -test("'/flags' should return the flags list as JSON", async() => { +test("'/flags' should return the flags list as JSON", async(tape) => { const result = await get(new URL("/flags", HTTP_URL)); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("application/json;charset=utf-8"); - expect(result.data).toMatchSnapshot(); + tape.equal(result.statusCode, 200); + tape.equal(result.headers["content-type"], "application/json;charset=utf-8"); + + tape.end(); }); -test("'/flags/description/isGit' should return the isGit HTML description", async() => { +test("'/flags/description/isGit' should return the isGit HTML description", async(tape) => { const result = await get(new URL("/flags/description/isGit", HTTP_URL)); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("text/html"); + tape.equal(result.statusCode, 200); + tape.equal(result.headers["content-type"], "text/html"); - expect(result.data).toStrictEqual(await flags.eagerFetchFlagFile("isGit")); + tape.equal(result.data, await flags.eagerFetchFlagFile("isGit")); + + tape.end(); }); -test("'/flags/description/foobar' should return a 404 error", async() => { - expect.assertions(2); +test("'/flags/description/foobar' should return a 404 error", async(tape) => { + tape.plan(2); + try { await get(new URL("/flags/description/foobar", HTTP_URL)); } catch (error) { - expect(error.statusCode).toStrictEqual(404); - expect(error.data.error).toStrictEqual("Not Found"); + tape.equal(error.statusCode, 404); + tape.equal(error.data.error, "Not Found"); } + + tape.end(); }); -test("'/data' should return the fixture payload we expect", async() => { +test("'/data' should return the fixture payload we expect", async(tape) => { const result = await get(new URL("/data", HTTP_URL)); - expect(result.statusCode).toStrictEqual(200); - expect(result.headers["content-type"]).toStrictEqual("application/json"); - expect(result.data).toMatchSnapshot(); + tape.equal(result.statusCode, 200); + tape.equal(result.headers["content-type"], "application/json"); + // tape.equal(result.data).toMatchSnapshot(); + + tape.end(); +}); + +test("teardown", (tape) => { + httpServer.server.close(); + tape.end(); }); diff --git a/test/utils.spec.js b/test/utils.spec.js index f94402fa..e7a04426 100644 --- a/test/utils.spec.js +++ b/test/utils.spec.js @@ -1,32 +1,43 @@ +// Import Third-party Dependencies +import test from "tape"; + // Import Internal Dependencies -import * as utils from "../src/utils"; +import * as utils from "../src/utils.js"; + +test("formatBytes should return '0 B' if bytes argument is equal zero", (tape) => { + tape.equal(utils.formatBytes(0), "0 B"); + + tape.end(); +}); + +test("formatBytes should format 10 bytes", (tape) => { + tape.equal(utils.formatBytes(10), "10 B"); -describe("formatBytes", () => { - it("should return '0 B' if bytes argument is equal zero", () => { - expect(utils.formatBytes(0)).toStrictEqual("0 B"); - }); + tape.end(); +}); - it("should format 10 bytes", () => { - expect(utils.formatBytes(10)).toStrictEqual("10 B"); - }); +test("formatBytes should format 3000 bytes in KB with two fixed number", (tape) => { + tape.equal(utils.formatBytes(3000), "2.93 KB"); + + tape.end(); +}); + +test("formatBytes should format 822_223_900 bytes in MB", (tape) => { + tape.equal(utils.formatBytes(822_223_900), "784.13 MB"); + + tape.end(); +}); - it("should format 3000 bytes in KB with two fixed number", () => { - expect(utils.formatBytes(3000)).toStrictEqual("2.93 KB"); - }); +test("locationToString should return the location array in string syntax", (tape) => { + const str = utils.locationToString([[1, 2], [2, 4]]); + tape.equal(str, "[1:2] - [2:4]"); - it("should format 822_223_900 bytes in MB", () => { - expect(utils.formatBytes(822_223_900)).toStrictEqual("784.13 MB"); - }); + tape.end(); }); -describe("locationToString", () => { - it("should return the location array in string syntax", () => { - const str = utils.locationToString([[1, 2], [2, 4]]); - expect(str).toStrictEqual("[1:2] - [2:4]"); - }); +test("locationToString should ignore elements after length 1", (tape) => { + const str = utils.locationToString([[1, 2, 3], [2, 4, 10], [50]]); + tape.equal(str, "[1:2] - [2:4]"); - it("should ignore elements after length 1", () => { - const str = utils.locationToString([[1, 2, 3], [2, 4, 10], [50]]); - expect(str).toStrictEqual("[1:2] - [2:4]"); - }); + tape.end(); }); From 9ca6027cebfc0821d20bd2c2ca239d85938a7dfc Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sat, 30 Oct 2021 20:23:22 +0200 Subject: [PATCH 20/32] fix: eslint V7+ issue --- package-lock.json | 1091 ++++++++++++++++++++++++++++++++++----------- package.json | 6 +- 2 files changed, 824 insertions(+), 273 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1d48aa4..5251fa8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,126 @@ "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==" }, + "@babel/code-frame": { + "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" + } + }, + "@babel/compat-data": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 + }, + "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" + } + } + } + }, "@babel/eslint-parser": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.8.tgz", - "integrity": "sha512-fYP7QFngCvgxjUuw8O057SVH5jCXsbFFOoE77CFDcvzwBVgTOkMD/L4mIC5Ud1xf8chK/no2fRbSSn1wvNmKuQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.0.tgz", + "integrity": "sha512-c+AsYOHjI+FgCa+ifLd8sDXp4U4mjkfFgL9NdQWhuA731kAUJs0WdJIXET4A14EJAR9Jv9FFF/MzPWJfV9Oirw==", "dev": true, "requires": { "eslint-scope": "^5.1.1", @@ -20,12 +136,37 @@ "semver": "^6.3.0" }, "dependencies": { - "eslint-visitor-keys": { - "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==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, + } + } + }, + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -34,12 +175,131 @@ } } }, + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", @@ -103,6 +363,12 @@ } } }, + "@babel/parser": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", + "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==", + "dev": true + }, "@babel/runtime": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", @@ -111,6 +377,194 @@ "regenerator-runtime": "^0.13.4" } }, + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "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" + } + } + } + }, + "@babel/traverse": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "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 + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "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" + } + } + } + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -118,46 +572,20 @@ "dev": true }, "@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", + "debug": "^4.1.1", + "espree": "^7.3.0", "globals": "^13.9.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" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.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 - } } }, "@gar/promisify": { @@ -166,9 +594,9 @@ "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==" }, "@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", @@ -226,47 +654,51 @@ } }, "@nodesecure/eslint-config": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@nodesecure/eslint-config/-/eslint-config-1.2.1.tgz", - "integrity": "sha512-gIM8VOFHDiljRNO9EtPrslbl8XEIpnpWWOfVRrm4qRxHtnAfU7hUehFl7MbpLoMIIHsNGbJ2VL53EbC0KRwrCA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@nodesecure/eslint-config/-/eslint-config-1.3.0.tgz", + "integrity": "sha512-+MP5yqhInTVNSStSOsYIf2v9uQWToUDFBi1JN1uJULdlI0Q8K3kzrlyUXSMDGey4tWLqcYsqQQJSGjCWVkap+A==", "dev": true, "requires": { - "@babel/eslint-parser": "^7.15.8", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", - "eslint": "^7.32.0" + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.0", + "@typescript-eslint/eslint-plugin": "^5.2.0", + "@typescript-eslint/parser": "^5.2.0", + "eslint": "^8.1.0" }, "dependencies": { - "@babel/code-frame": { - "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" - } - }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.0.0", "globals": "^13.9.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" + }, + "dependencies": { + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", @@ -274,12 +706,27 @@ "minimatch": "^3.0.4" } }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -287,37 +734,36 @@ "dev": true }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", + "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "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", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", "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.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -325,66 +771,113 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" } }, + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "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": "^1.1.0" + "eslint-visitor-keys": "^2.0.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==", + "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 } } }, "eslint-visitor-keys": { - "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.5.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "eslint-visitor-keys": "^3.0.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" }, "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 + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } } } }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } } }, + "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 + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -865,39 +1358,60 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz", + "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", + "@typescript-eslint/experimental-utils": "5.2.0", + "@typescript-eslint/scope-manager": "5.2.0", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "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 + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true } } }, "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz", + "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.2.0", + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/typescript-estree": "5.2.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -910,72 +1424,109 @@ "requires": { "eslint-visitor-keys": "^2.0.0" } - }, - "eslint-visitor-keys": { - "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 } } }, "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.2.0.tgz", + "integrity": "sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "@typescript-eslint/scope-manager": "5.2.0", + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/typescript-estree": "5.2.0", + "debug": "^4.3.2" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "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 + } } }, "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz", + "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/visitor-keys": "5.2.0" } }, "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz", + "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz", + "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/visitor-keys": "5.2.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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 + } } }, "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz", + "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.2.0", + "eslint-visitor-keys": "^3.0.0" }, "dependencies": { "eslint-visitor-keys": { - "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true } } @@ -1211,6 +1762,19 @@ "fill-range": "^7.0.1" } }, + "browserslist": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", + "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001271", + "electron-to-chromium": "^1.3.878", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1334,6 +1898,12 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001272", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001272.tgz", + "integrity": "sha512-DV1j9Oot5dydyH1v28g25KoVm7l8MTxazwuiH3utWiAS6iL/9Nh//TGwqFEeqqN8nnWYQ8HHhUq+o4QPt9kvYw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1711,6 +2281,12 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.3.885", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz", + "integrity": "sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1981,36 +2557,37 @@ "dev": true }, "eslint": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", - "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.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": "^6.0.1", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -2018,10 +2595,11 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.2.0", + "regexpp": "^3.1.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -2032,93 +2610,12 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - }, - "dependencies": { - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "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 - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2141,43 +2638,43 @@ } }, "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "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": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { "eslint-visitor-keys": { - "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==", + "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 } } }, "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "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": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "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": "^8.5.0", + "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "eslint-visitor-keys": "^1.3.0" }, "dependencies": { - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "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 } } @@ -2434,6 +2931,12 @@ "wide-align": "^1.1.0" } }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2497,6 +3000,15 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, "globby": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", @@ -3054,6 +3566,12 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "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", @@ -3091,6 +3609,15 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -3460,6 +3987,12 @@ "which": "^2.0.2" } }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -3760,6 +4293,12 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -4443,6 +4982,12 @@ "socks": "^2.6.1" } }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -4807,6 +5352,12 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/package.json b/package.json index 65479ad9..7b7c945f 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "build": "node ./esbuild.config.js", "test": "npm run test-only && npm run eslint", "test-only": "cross-env esm-tape-runner 'test/**/*.spec.js' | tap-monkey", - "coverage": "c8 -r html npm test" + "coverage": "c8 --all --src ./src -r html npm run test" }, "files": [ "bin", @@ -55,14 +55,14 @@ }, "homepage": "https://github.com/ES-Community/nsecure#readme", "devDependencies": { - "@nodesecure/eslint-config": "^1.2.1", + "@nodesecure/eslint-config": "^1.3.0", "@small-tech/esm-tape-runner": "^1.0.3", "@small-tech/tap-monkey": "^1.3.0", "@types/node": "^16.11.4", "c8": "^7.10.0", "cross-env": "^7.0.3", "esbuild": "^0.13.8", - "eslint": "^8.1.0", + "eslint": "^7.32.0", "httpie": "^1.1.2", "list.js": "^2.3.1", "pkg-ok": "^2.3.1", From f9a630a02abbd86f0ecf69e39ba102802a7d03a5 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sun, 31 Oct 2021 17:31:26 +0100 Subject: [PATCH 21/32] chore: update dependencies --- package-lock.json | 1287 ++++++++++++++++++++------------------------- package.json | 14 +- 2 files changed, 582 insertions(+), 719 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5251fa8c..dccc0274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,6 @@ "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==" }, - "@babel/code-frame": { - "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" - } - }, "@babel/compat-data": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", @@ -300,69 +291,6 @@ "@babel/types": "^7.16.0" } }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "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==", - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "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" - } - } - } - }, "@babel/parser": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", @@ -370,9 +298,9 @@ "dev": true }, "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", + "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -572,20 +500,47 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.0.0", "globals": "^13.9.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" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.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 + } } }, "@gar/promisify": { @@ -594,9 +549,9 @@ "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==" }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", @@ -610,6 +565,11 @@ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" + }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -919,47 +879,275 @@ "safe-regex": "^2.1.1" } }, + "@nodesecure/licenses-conformance": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/licenses-conformance/-/licenses-conformance-1.0.0.tgz", + "integrity": "sha512-zHLgFhsuXBkNMvCbXDkSW8KBpeHsE9a4aWlxYyC8lKiK68lcC0mB8dgJTGuQMphvYXehFzHf2QmsUWqSG26zFQ==", + "requires": { + "spdx-expression-parse": "^3.0.1" + } + }, "@nodesecure/npm-registry-sdk": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@nodesecure/npm-registry-sdk/-/npm-registry-sdk-1.2.1.tgz", - "integrity": "sha512-1u1vhOocDyfux5V7/jxM9g5Olg/Llg5/mS4GawgISYLAX7NaVmgkldIhIScoDZXZdMaNQZYCp7nByCNqYLnsFQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@nodesecure/npm-registry-sdk/-/npm-registry-sdk-1.3.0.tgz", + "integrity": "sha512-h/dpP+EEqEHw6hnXUfgy9DowqpB9Wd91KPj6PqW41s1vLS/pgP5rmwMBEHu/utmpeJWrDI3Iy3FVpAATldWyvQ==", "requires": { - "@myunisoft/httpie": "^1.1.0", + "@myunisoft/httpie": "^1.3.1", "@npm/types": "^1.0.1" + }, + "dependencies": { + "@myunisoft/httpie": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@myunisoft/httpie/-/httpie-1.3.1.tgz", + "integrity": "sha512-wOD+9Wei4Qv5cyftZdmD67tpKJ+xPRSgms1pLE7bjqeiIzl78P2iNvtg0di68MMfu6HwI8Tl0krRzrMTsq0bbg==", + "requires": { + "content-type": "^1.0.4", + "lru-cache": "^6.0.0", + "statuses": "^2.0.1", + "undici": "^4.7.1" + } + }, + "undici": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-4.9.2.tgz", + "integrity": "sha512-O8D4fp0cT7/bOMe7XE2oc0PaBCyc0GsahzQ+nMSeWW0o0+EB2ykXYNhU0kY2nKP589zzS91pLj979NtJrBRwFQ==" + } } }, "@nodesecure/ntlp": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@nodesecure/ntlp/-/ntlp-1.2.1.tgz", - "integrity": "sha512-1/xrLeqEpSCDGzafUWeEcLm6E7n+zWHwJlRwPfAh+FyWwA1XmaBB9oeSGeSR74Ev9KqJCzo5Owl2xpuiSdSBpQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/ntlp/-/ntlp-2.0.0.tgz", + "integrity": "sha512-OWz2+ppWRAJ5swxRGSvbdVpEaKD2lM6hI5QDP7iC+EYoqqa5bYqWqaztf0ZB4lDyhZmPpg7JUTylGYPogEtVaQ==", "requires": { - "conformance": "^1.0.0" + "@nodesecure/licenses-conformance": "^1.0.0" } }, "@nodesecure/scanner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.4.0.tgz", - "integrity": "sha512-Bnaw3VnhxU18dW9IgDjvmM0zpkrW+Lpl5goM2DBg0FSRXvW0na5An8Kx85yGGL7OjdpgOyLLurua4qSsq/HbIg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.5.0.tgz", + "integrity": "sha512-9tqSsGBpS46PTi1Nxhiymzj2PPVMqyX8m6Xazq4cJhmewkBNymHxAB3WhaTeFA0Tz1G3WFt1sGWCTM227Bif6g==", "requires": { - "@nodesecure/flags": "^1.0.0", + "@nodesecure/flags": "^1.2.0", "@nodesecure/fs-walk": "^1.0.0", "@nodesecure/i18n": "^1.2.0", "@nodesecure/js-x-ray": "^4.0.1", - "@nodesecure/npm-registry-sdk": "^1.2.1", - "@nodesecure/ntlp": "^1.2.1", - "@nodesecure/vuln": "^1.3.0", + "@nodesecure/npm-registry-sdk": "^1.3.0", + "@nodesecure/ntlp": "^2.0.0", + "@nodesecure/vuln": "^1.4.0", "@npm/types": "^1.0.1", - "@npmcli/arborist": "^2.8.3", + "@npmcli/arborist": "^4.0.3", "@slimio/lock": "^1.0.0", "builtins": "^4.0.0", "combine-async-iterators": "^2.0.0", - "filenamify": "^5.0.1", "is-minified-code": "^2.0.0", - "itertools": "^1.7.0", - "kleur": "^4.1.4", + "itertools": "^1.7.1", "lodash.difference": "^4.5.0", - "pacote": "^11.3.5", + "pacote": "^12.0.2", "semver": "^7.3.4" + }, + "dependencies": { + "@myunisoft/httpie": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@myunisoft/httpie/-/httpie-1.3.1.tgz", + "integrity": "sha512-wOD+9Wei4Qv5cyftZdmD67tpKJ+xPRSgms1pLE7bjqeiIzl78P2iNvtg0di68MMfu6HwI8Tl0krRzrMTsq0bbg==", + "requires": { + "content-type": "^1.0.4", + "lru-cache": "^6.0.0", + "statuses": "^2.0.1", + "undici": "^4.7.1" + } + }, + "@nodesecure/vuln": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.4.0.tgz", + "integrity": "sha512-pIbGzolp3/+uS8u+JF8qceRJhNBJO1f3Obv48BZiWsZ48cF0GDuIYRmLixTOuk4gDvP1efl4+k5tw65rv36mxw==", + "requires": { + "@myunisoft/httpie": "^1.3.1", + "@nodesecure/npm-registry-sdk": "^1.3.0", + "@npmcli/arborist": "^4.0.3", + "@slimio/github": "^1.0.0", + "semver": "^7.3.5" + } + }, + "@npmcli/arborist": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-4.0.3.tgz", + "integrity": "sha512-gFz/dNJtpv2bYXlupcUpEaWlFDRUNmvVnQNbE6dY4ild6beZ2SkG4R5/CM4GZZwj9HD2TyfGjO350Ja+xlLzuA==", + "requires": { + "@isaacs/string-locale-compare": "^1.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.0", + "@npmcli/metavuln-calculator": "^2.0.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^2.0.0", + "bin-links": "^2.3.0", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^12.0.0", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/map-workspaces": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz", + "integrity": "sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g==", + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + } + }, + "@npmcli/metavuln-calculator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz", + "integrity": "sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==", + "requires": { + "cacache": "^15.0.5", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^12.0.0", + "semver": "^7.3.2" + } + }, + "@npmcli/run-script": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", + "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^8.2.0", + "read-package-json-fast": "^2.0.1" + } + }, + "bin-links": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", + "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", + "requires": { + "cmd-shim": "^4.0.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + } + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "ignore-walk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "node-gyp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.3.0.tgz", + "integrity": "sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA==", + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + } + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^4.0.1", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "pacote": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", + "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^2.0.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^3.0.0", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "undici": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-4.9.2.tgz", + "integrity": "sha512-O8D4fp0cT7/bOMe7XE2oc0PaBCyc0GsahzQ+nMSeWW0o0+EB2ykXYNhU0kY2nKP589zzS91pLj979NtJrBRwFQ==" + } } }, "@nodesecure/sec-literal": { @@ -989,13 +1177,13 @@ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" }, "string-width": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.0.tgz", - "integrity": "sha512-zwXcRmLUdiWhMPrHz6EXITuyTgcEnUqDzspTkCLhQovxywWz6NP9VHgqfVg20V/1mUg0B95AKbXxNT+ALRmqCw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", + "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", "requires": { "emoji-regex": "^9.2.2", "is-fullwidth-code-point": "^4.0.0", - "strip-ansi": "^7.0.0" + "strip-ansi": "^7.0.1" } }, "strip-ansi": { @@ -1009,15 +1197,33 @@ } }, "@nodesecure/vuln": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.3.0.tgz", - "integrity": "sha512-VQ/1H/Ls2PNmHDvj0ShBfufMzpM2ZdiRjPmPjpTir58nefaGQGwcxLSaltTIBgfP4/LJCge/i/warJlnCPX9Og==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.4.0.tgz", + "integrity": "sha512-pIbGzolp3/+uS8u+JF8qceRJhNBJO1f3Obv48BZiWsZ48cF0GDuIYRmLixTOuk4gDvP1efl4+k5tw65rv36mxw==", "requires": { - "@myunisoft/httpie": "^1.1.0", - "@nodesecure/npm-registry-sdk": "^1.2.0", - "@npmcli/arborist": "^2.8.3", + "@myunisoft/httpie": "^1.3.1", + "@nodesecure/npm-registry-sdk": "^1.3.0", + "@npmcli/arborist": "^4.0.3", "@slimio/github": "^1.0.0", "semver": "^7.3.5" + }, + "dependencies": { + "@myunisoft/httpie": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@myunisoft/httpie/-/httpie-1.3.1.tgz", + "integrity": "sha512-wOD+9Wei4Qv5cyftZdmD67tpKJ+xPRSgms1pLE7bjqeiIzl78P2iNvtg0di68MMfu6HwI8Tl0krRzrMTsq0bbg==", + "requires": { + "content-type": "^1.0.4", + "lru-cache": "^6.0.0", + "statuses": "^2.0.1", + "undici": "^4.7.1" + } + }, + "undici": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-4.9.2.tgz", + "integrity": "sha512-O8D4fp0cT7/bOMe7XE2oc0PaBCyc0GsahzQ+nMSeWW0o0+EB2ykXYNhU0kY2nKP589zzS91pLj979NtJrBRwFQ==" + } } }, "@npm/types": { @@ -1026,19 +1232,20 @@ "integrity": "sha512-+tTwymYjZrm7s5KPcS6Abq2l1wVlsk0Jxx4RWMMlC9BePNK4BGMaXUKWphdi7xAYJNA+lwqIqFK6hcNrMu/HFg==" }, "@npmcli/arborist": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.8.3.tgz", - "integrity": "sha512-miFcxbZjmQqeFTeRSLLh+lc/gxIKDO5L4PVCp+dp+kmcwJmYsEJmF7YvHR2yi3jF+fxgvLf3CCFzboPIXAuabg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-4.0.3.tgz", + "integrity": "sha512-gFz/dNJtpv2bYXlupcUpEaWlFDRUNmvVnQNbE6dY4ild6beZ2SkG4R5/CM4GZZwj9HD2TyfGjO350Ja+xlLzuA==", "requires": { + "@isaacs/string-locale-compare": "^1.0.1", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^1.0.2", - "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/map-workspaces": "^2.0.0", + "@npmcli/metavuln-calculator": "^2.0.0", "@npmcli/move-file": "^1.1.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^1.0.1", "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^1.8.2", - "bin-links": "^2.2.1", + "@npmcli/run-script": "^2.0.0", + "bin-links": "^2.3.0", "cacache": "^15.0.3", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", @@ -1049,7 +1256,7 @@ "npm-package-arg": "^8.1.5", "npm-pick-manifest": "^6.1.0", "npm-registry-fetch": "^11.0.0", - "pacote": "^11.3.5", + "pacote": "^12.0.0", "parse-conflict-json": "^1.1.1", "proc-log": "^1.0.0", "promise-all-reject-late": "^1.0.0", @@ -1080,15 +1287,6 @@ "semver": "^7.3.4", "validate-npm-package-name": "^3.0.0" } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } } } }, @@ -1167,9 +1365,9 @@ } }, "@npmcli/map-workspaces": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.3.tgz", - "integrity": "sha512-SdlRlOoQw4WKD4vtb/n5gUkobEABYBEOo8fRE4L8CtBkyWDSvIrReTfKvQ/Jc/LQqDaaZ5iv1iMSQzKCUr1n1A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz", + "integrity": "sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g==", "requires": { "@npmcli/name-from-folder": "^1.0.1", "glob": "^7.1.6", @@ -1178,12 +1376,13 @@ } }, "@npmcli/metavuln-calculator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.0.tgz", - "integrity": "sha512-fb51NyiWHjeqqFez9FXhvr+E2Dv4ZjPGVgnj8QC1xjHRSw4gMRIO8pNCzU11WYQ2wZxoHBhPMgovZGxP5lP74g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz", + "integrity": "sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==", "requires": { "cacache": "^15.0.5", - "pacote": "^11.1.11", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^12.0.0", "semver": "^7.3.2" } }, @@ -1223,15 +1422,13 @@ } }, "@npmcli/run-script": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.3.tgz", - "integrity": "sha512-ELPGWAVU/xyU+A+H3pEPj0QOvYwLTX71RArXcClFzeiyJ/b/McsZ+d0QxpznvfFtZzxGN/gz/1cvlqICR4/suQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", + "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", "requires": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", - "node-gyp": "^7.1.0", - "puka": "^1.0.1", + "node-gyp": "^8.2.0", "read-package-json-fast": "^2.0.1" } }, @@ -1352,9 +1549,9 @@ "dev": true }, "@types/node": { - "version": "16.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz", - "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "dev": true }, "@typescript-eslint/eslint-plugin": { @@ -1537,9 +1734,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, "acorn-jsx": { @@ -1579,6 +1776,7 @@ "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", @@ -1651,46 +1849,12 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "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=" - }, - "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 - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, - "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", @@ -1701,21 +1865,13 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "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" - } - }, "bin-links": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.2.1.tgz", - "integrity": "sha512-wFzVTqavpgCCYAh8SVBdnZdiQMxTkGR+T3b14CNpBXIBe2neJWaMGAZ55XWWHELJJ89dscuq0VCBqcVaIOgCMg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", + "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", "requires": { "cmd-shim": "^4.0.1", - "mkdirp": "^1.0.3", + "mkdirp-infer-owner": "^2.0.0", "npm-normalize-package-bin": "^1.0.0", "read-cmd-shim": "^2.0.0", "rimraf": "^3.0.0", @@ -1904,11 +2060,6 @@ "integrity": "sha512-DV1j9Oot5dydyH1v28g25KoVm7l8MTxazwuiH3utWiAS6iL/9Nh//TGwqFEeqqN8nnWYQ8HHhUq+o4QPt9kvYw==", "dev": true }, - "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", @@ -2015,17 +2166,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combine-async-iterators": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/combine-async-iterators/-/combine-async-iterators-2.0.0.tgz", - "integrity": "sha512-zGRm9TDhc/CrEM4se4NdOx012lPMAdyWc35uTGY2yBJ26qK8DK8/hdIoJBKAJF0YuM69Aqb/EyqXRhCUra7CHw==" - }, - "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" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/combine-async-iterators/-/combine-async-iterators-2.0.1.tgz", + "integrity": "sha512-0uI91ZnfWnnioT9OHBdybUfBKBLWFwx5KOeFwyc9CCtj6mBPLpXPf90JLVVON0GIu+Z0Jr05Bdg0GXLP3uc8Qw==" }, "common-ancestor-path": { "version": "1.0.1", @@ -2037,14 +2180,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "conformance": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/conformance/-/conformance-1.0.0.tgz", - "integrity": "sha512-yHNr1QYQIigTHww52pFTppBQaAJVDJgOpN0I+fvzzf3V0WmGeIzHisaHoTeCN/V49Zwp4v8YNhLzDFnP0hsBEw==", - "requires": { - "spdx-expression-parse": "^3.0.0" - } - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2098,14 +2233,6 @@ "array-find-index": "^1.0.1" } }, - "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" - } - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -2216,11 +2343,6 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -2272,15 +2394,6 @@ "minimatch": "^3.0.4" } }, - "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" - } - }, "electron-to-chromium": { "version": "1.3.885", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz", @@ -2401,146 +2514,146 @@ } }, "esbuild": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", - "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", - "dev": true, - "requires": { - "esbuild-android-arm64": "0.13.8", - "esbuild-darwin-64": "0.13.8", - "esbuild-darwin-arm64": "0.13.8", - "esbuild-freebsd-64": "0.13.8", - "esbuild-freebsd-arm64": "0.13.8", - "esbuild-linux-32": "0.13.8", - "esbuild-linux-64": "0.13.8", - "esbuild-linux-arm": "0.13.8", - "esbuild-linux-arm64": "0.13.8", - "esbuild-linux-mips64le": "0.13.8", - "esbuild-linux-ppc64le": "0.13.8", - "esbuild-netbsd-64": "0.13.8", - "esbuild-openbsd-64": "0.13.8", - "esbuild-sunos-64": "0.13.8", - "esbuild-windows-32": "0.13.8", - "esbuild-windows-64": "0.13.8", - "esbuild-windows-arm64": "0.13.8" + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz", + "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.13.12", + "esbuild-darwin-64": "0.13.12", + "esbuild-darwin-arm64": "0.13.12", + "esbuild-freebsd-64": "0.13.12", + "esbuild-freebsd-arm64": "0.13.12", + "esbuild-linux-32": "0.13.12", + "esbuild-linux-64": "0.13.12", + "esbuild-linux-arm": "0.13.12", + "esbuild-linux-arm64": "0.13.12", + "esbuild-linux-mips64le": "0.13.12", + "esbuild-linux-ppc64le": "0.13.12", + "esbuild-netbsd-64": "0.13.12", + "esbuild-openbsd-64": "0.13.12", + "esbuild-sunos-64": "0.13.12", + "esbuild-windows-32": "0.13.12", + "esbuild-windows-64": "0.13.12", + "esbuild-windows-arm64": "0.13.12" } }, "esbuild-android-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", - "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.12.tgz", + "integrity": "sha512-TSVZVrb4EIXz6KaYjXfTzPyyRpXV5zgYIADXtQsIenjZ78myvDGaPi11o4ZSaHIwFHsuwkB6ne5SZRBwAQ7maw==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", - "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", + "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", - "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.12.tgz", + "integrity": "sha512-JvAMtshP45Hd8A8wOzjkY1xAnTKTYuP/QUaKp5eUQGX+76GIie3fCdUUr2ZEKdvpSImNqxiZSIMziEiGB5oUmQ==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", - "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.12.tgz", + "integrity": "sha512-r6On/Skv9f0ZjTu6PW5o7pdXr8aOgtFOEURJZYf1XAJs0IQ+gW+o1DzXjVkIoT+n1cm3N/t1KRJfX71MPg/ZUA==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", - "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.12.tgz", + "integrity": "sha512-F6LmI2Q1gii073kmBE3NOTt/6zLL5zvZsxNLF8PMAwdHc+iBhD1vzfI8uQZMJA1IgXa3ocr3L3DJH9fLGXy6Yw==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", - "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.12.tgz", + "integrity": "sha512-U1UZwG3UIwF7/V4tCVAo/nkBV9ag5KJiJTt+gaCmLVWH3bPLX7y+fNlhIWZy8raTMnXhMKfaTvWZ9TtmXzvkuQ==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", - "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.12.tgz", + "integrity": "sha512-YpXSwtu2NxN3N4ifJxEdsgd6Q5d8LYqskrAwjmoCT6yQnEHJSF5uWcxv783HWN7lnGpJi9KUtDvYsnMdyGw71Q==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", - "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.12.tgz", + "integrity": "sha512-SyiT/JKxU6J+DY2qUiSLZJqCAftIt3uoGejZ0HDnUM2MGJqEGSGh7p1ecVL2gna3PxS4P+j6WAehCwgkBPXNIw==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", - "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.12.tgz", + "integrity": "sha512-sgDNb8kb3BVodtAlcFGgwk+43KFCYjnFOaOfJibXnnIojNWuJHpL6aQJ4mumzNWw8Rt1xEtDQyuGK9f+Y24jGA==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", - "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.12.tgz", + "integrity": "sha512-qQJHlZBG+QwVIA8AbTEtbvF084QgDi4DaUsUnA+EolY1bxrG+UyOuGflM2ZritGhfS/k7THFjJbjH2wIeoKA2g==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", - "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.12.tgz", + "integrity": "sha512-2dSnm1ldL7Lppwlo04CGQUpwNn5hGqXI38OzaoPOkRsBRWFBozyGxTFSee/zHFS+Pdh3b28JJbRK3owrrRgWNw==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", - "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.12.tgz", + "integrity": "sha512-D4raxr02dcRiQNbxOLzpqBzcJNFAdsDNxjUbKkDMZBkL54Z0vZh4LRndycdZAMcIdizC/l/Yp/ZsBdAFxc5nbA==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", - "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.12.tgz", + "integrity": "sha512-KuLCmYMb2kh05QuPJ+va60bKIH5wHL8ypDkmpy47lzwmdxNsuySeCMHuTv5o2Af1RUn5KLO5ZxaZeq4GEY7DaQ==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", - "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.12.tgz", + "integrity": "sha512-jBsF+e0woK3miKI8ufGWKG3o3rY9DpHvCVRn5eburMIIE+2c+y3IZ1srsthKyKI6kkXLvV4Cf/E7w56kLipMXw==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", - "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.12.tgz", + "integrity": "sha512-L9m4lLFQrFeR7F+eLZXG82SbXZfUhyfu6CexZEil6vm+lc7GDCE0Q8DiNutkpzjv1+RAbIGVva9muItQ7HVTkQ==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", - "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.12.tgz", + "integrity": "sha512-k4tX4uJlSbSkfs78W5d9+I9gpd+7N95W7H2bgOMFPsYREVJs31+Q2gLLHlsnlY95zBoPQMIzHooUIsixQIBjaQ==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", - "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", + "version": "0.13.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.12.tgz", + "integrity": "sha512-2tTv/BpYRIvuwHpp2M960nG7uvL+d78LFW/ikPItO+2GfK51CswIKSetSpDii+cjz8e9iSPgs+BU4o8nWICBwQ==", "dev": true, "optional": true }, @@ -2557,37 +2670,36 @@ "dev": true }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", + "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "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", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", "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.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -2595,11 +2707,10 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -2610,12 +2721,69 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "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.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2638,20 +2806,12 @@ } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "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": "^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==", - "dev": true - } + "eslint-visitor-keys": "^2.0.0" } }, "eslint-visitor-keys": { @@ -2661,20 +2821,20 @@ "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.5.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "eslint-visitor-keys": "^3.0.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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true } } @@ -2736,20 +2896,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "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==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-glob": { "version": "3.2.7", @@ -2767,7 +2918,8 @@ "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", @@ -2776,11 +2928,11 @@ "dev": true }, "fast-xml-parser": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.20.0.tgz", - "integrity": "sha512-cMQwDJYVDjMPU56DviszewgMKuNzuf4NQSBuDf9RgZ6FKm5QEMxW05Za8lvnuL6moxoeZVUWBlL733WmovvV6g==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", "requires": { - "strnum": "^1.0.3" + "strnum": "^1.0.4" } }, "fastq": { @@ -2866,21 +3018,6 @@ "signal-exit": "^3.0.2" } }, - "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" - } - }, "frequency-set": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/frequency-set/-/frequency-set-1.0.1.tgz", @@ -2970,14 +3107,6 @@ "get-intrinsic": "^1.1.1" } }, - "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", @@ -3036,20 +3165,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, - "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", @@ -3129,16 +3244,6 @@ "debug": "4" } }, - "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" - } - }, "httpie": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", @@ -3183,9 +3288,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", "requires": { "minimatch": "^3.0.4" } @@ -3505,11 +3610,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -3538,11 +3638,11 @@ } }, "itertools": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/itertools/-/itertools-1.7.0.tgz", - "integrity": "sha512-HSS1CnDbL+3DDDCoVvnwaTH8UsvsBwkwN9HhiL2m1E0Cmr6pbFBxmMjn2wXfgH2TsflWDEJXdZMWuoMbnGSIfg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/itertools/-/itertools-1.7.1.tgz", + "integrity": "sha512-0sC8t0HYOH0wb/mU5eLmp2g19yfhqho12Q6kCX6MGkNEEJQz97LIXzZ2bbIDyzBnQGcMixmcAtByzKjiaFkw8Q==", "requires": { - "@babel/runtime": "^7.14.6" + "@babel/runtime": "^7.15.4" } }, "js-tokens": { @@ -3552,20 +3652,22 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -3583,15 +3685,11 @@ "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==" }, - "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==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3604,11 +3702,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" }, - "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=" - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -3623,17 +3716,6 @@ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, - "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" - } - }, "just-diff": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.0.2.tgz", @@ -3698,12 +3780,6 @@ } } }, - "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.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", @@ -3720,12 +3796,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "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.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3828,19 +3898,6 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" }, - "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==" - }, - "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==", - "requires": { - "mime-db": "1.46.0" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -3971,19 +4028,19 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.3.0.tgz", + "integrity": "sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA==", "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^4.1.2", - "request": "^2.88.2", "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", "which": "^2.0.2" } }, @@ -4039,12 +4096,12 @@ } }, "npm-packlist": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.4.tgz", - "integrity": "sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", "requires": { "glob": "^7.1.6", - "ignore-walk": "^3.0.3", + "ignore-walk": "^4.0.1", "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" } @@ -4088,11 +4145,6 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "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", @@ -4149,9 +4201,9 @@ } }, "open": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", - "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -4215,14 +4267,14 @@ } }, "pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", + "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", "requires": { "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", + "@npmcli/run-script": "^2.0.0", "cacache": "^15.0.5", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", @@ -4230,7 +4282,7 @@ "minipass": "^3.1.3", "mkdirp": "^1.0.3", "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", + "npm-packlist": "^3.0.0", "npm-pick-manifest": "^6.0.0", "npm-registry-fetch": "^11.0.0", "promise-retry": "^2.0.1", @@ -4288,11 +4340,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -4391,8 +4438,7 @@ }, "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==", + "resolved": "", "dev": true }, "indent-string": { @@ -4631,16 +4677,6 @@ "retry": "^0.12.0" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "puka": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/puka/-/puka-1.0.1.tgz", - "integrity": "sha512-ssjRZxBd7BT3dte1RR3VoeT2cT/ODH8x+h0rUF1rMqB0srHYf48stSDWfiYakTp5UBZMxroZhB2+ExLDHm7W3g==" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -4653,18 +4689,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 }, "qoa": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/qoa/-/qoa-0.2.0.tgz", "integrity": "sha512-svEO3uevNU354fUBWgMxGJH0spF29EZRe140YL20PP+5C25V+u0eMeFforSIiop2879uXgxI+IFwibHBGcseEA==" }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4683,9 +4715,9 @@ "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==" }, "read-package-json-fast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.1.tgz", - "integrity": "sha512-bp6z0tdgLy9KzdfENDIw/53HWAolOVoQTRWXv7PUiqAo3YvvoUVeLr7RWPWq+mu7KUOu9kiT4DvxhUgNUBsvug==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "requires": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -4722,9 +4754,9 @@ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regexp-tree": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.23.tgz", - "integrity": "sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw==" + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==" }, "regexp.prototype.flags": { "version": "1.3.1", @@ -4737,50 +4769,17 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "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=", "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 - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -4861,7 +4860,8 @@ "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==", + "optional": true }, "semver": { "version": "7.3.5", @@ -4939,25 +4939,6 @@ "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", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "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 - } - } - }, "smart-buffer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", @@ -5038,22 +5019,6 @@ "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==", - "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" - } - }, "ssri": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", @@ -5142,9 +5107,9 @@ "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==" }, "strnum": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.3.tgz", - "integrity": "sha512-GVoRjsqAYZkAH16GDzfTuafuwKxzKdaaCQyLaWf37gOP1e2PPbAKWoME1OmO+c4RCKMfNrrPRDLFCNBFU45N/A==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.4.tgz", + "integrity": "sha512-lMzNMfDpaQOLt4B2mEbfzYS0+T7dvCXeojnlGf6f1AygvWDMcWyXYaLbyICfjVu29sErR8fnRagQfBW/N/hGgw==" }, "supports-color": { "version": "7.2.0", @@ -5155,72 +5120,6 @@ "has-flag": "^4.0.0" } }, - "table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "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" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "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==", - "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 - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, "tape": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/tape/-/tape-5.3.1.tgz", @@ -5372,15 +5271,6 @@ "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" }, - "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" - } - }, "treeverse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", @@ -5424,19 +5314,6 @@ "tslib": "^1.8.1" } }, - "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", @@ -5497,6 +5374,7 @@ "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" } @@ -5506,11 +5384,6 @@ "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.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -5561,16 +5434,6 @@ } } }, - "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" - } - }, "vis-network": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-9.1.0.tgz", diff --git a/package.json b/package.json index 7b7c945f..e7a53c74 100644 --- a/package.json +++ b/package.json @@ -58,11 +58,11 @@ "@nodesecure/eslint-config": "^1.3.0", "@small-tech/esm-tape-runner": "^1.0.3", "@small-tech/tap-monkey": "^1.3.0", - "@types/node": "^16.11.4", + "@types/node": "^16.11.6", "c8": "^7.10.0", "cross-env": "^7.0.3", - "esbuild": "^0.13.8", - "eslint": "^7.32.0", + "esbuild": "^0.13.12", + "eslint": "^8.1.0", "httpie": "^1.1.2", "list.js": "^2.3.1", "pkg-ok": "^2.3.1", @@ -75,9 +75,9 @@ "dependencies": { "@nodesecure/flags": "^1.2.0", "@nodesecure/i18n": "^1.2.0", - "@nodesecure/npm-registry-sdk": "^1.2.1", - "@nodesecure/scanner": "^1.4.0", - "@nodesecure/vuln": "^1.3.0", + "@nodesecure/npm-registry-sdk": "^1.3.0", + "@nodesecure/scanner": "^1.5.0", + "@nodesecure/vuln": "^1.4.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", "cliui": "^7.0.4", @@ -85,7 +85,7 @@ "filenamify": "^5.0.2", "kleur": "^4.1.4", "ms": "^2.1.3", - "open": "^8.3.0", + "open": "^8.4.0", "polka": "^0.5.2", "qoa": "^0.2.0", "sade": "^1.7.4", From 8238818f114192fc20d9966bd33082b35afda109 Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sun, 7 Nov 2021 14:41:37 +0100 Subject: [PATCH 22/32] chore: update @nodesecure/scanner (1.5.0 to 2.0.0) --- package-lock.json | 219 +++------------------------------------------- package.json | 2 +- 2 files changed, 12 insertions(+), 209 deletions(-) diff --git a/package-lock.json b/package-lock.json index dccc0274..a4ca99c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -923,9 +923,9 @@ } }, "@nodesecure/scanner": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-1.5.0.tgz", - "integrity": "sha512-9tqSsGBpS46PTi1Nxhiymzj2PPVMqyX8m6Xazq4cJhmewkBNymHxAB3WhaTeFA0Tz1G3WFt1sGWCTM227Bif6g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-2.0.0.tgz", + "integrity": "sha512-epFKIi7cHCQ5PrH/Rv3BQWBJ1yPH4UL1R7G/jdHS9Y1tQcwVyAKG08PmY0Bl7AU9mJNUMPYS1I7ykOAnKSwJsg==", "requires": { "@nodesecure/flags": "^1.2.0", "@nodesecure/fs-walk": "^1.0.0", @@ -933,6 +933,7 @@ "@nodesecure/js-x-ray": "^4.0.1", "@nodesecure/npm-registry-sdk": "^1.3.0", "@nodesecure/ntlp": "^2.0.0", + "@nodesecure/utils": "^1.0.0", "@nodesecure/vuln": "^1.4.0", "@npm/types": "^1.0.1", "@npmcli/arborist": "^4.0.3", @@ -944,210 +945,6 @@ "lodash.difference": "^4.5.0", "pacote": "^12.0.2", "semver": "^7.3.4" - }, - "dependencies": { - "@myunisoft/httpie": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@myunisoft/httpie/-/httpie-1.3.1.tgz", - "integrity": "sha512-wOD+9Wei4Qv5cyftZdmD67tpKJ+xPRSgms1pLE7bjqeiIzl78P2iNvtg0di68MMfu6HwI8Tl0krRzrMTsq0bbg==", - "requires": { - "content-type": "^1.0.4", - "lru-cache": "^6.0.0", - "statuses": "^2.0.1", - "undici": "^4.7.1" - } - }, - "@nodesecure/vuln": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.4.0.tgz", - "integrity": "sha512-pIbGzolp3/+uS8u+JF8qceRJhNBJO1f3Obv48BZiWsZ48cF0GDuIYRmLixTOuk4gDvP1efl4+k5tw65rv36mxw==", - "requires": { - "@myunisoft/httpie": "^1.3.1", - "@nodesecure/npm-registry-sdk": "^1.3.0", - "@npmcli/arborist": "^4.0.3", - "@slimio/github": "^1.0.0", - "semver": "^7.3.5" - } - }, - "@npmcli/arborist": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-4.0.3.tgz", - "integrity": "sha512-gFz/dNJtpv2bYXlupcUpEaWlFDRUNmvVnQNbE6dY4ild6beZ2SkG4R5/CM4GZZwj9HD2TyfGjO350Ja+xlLzuA==", - "requires": { - "@isaacs/string-locale-compare": "^1.0.1", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.0", - "@npmcli/metavuln-calculator": "^2.0.0", - "@npmcli/move-file": "^1.1.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.1", - "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^2.0.0", - "bin-links": "^2.3.0", - "cacache": "^15.0.3", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^11.0.0", - "pacote": "^12.0.0", - "parse-conflict-json": "^1.1.1", - "proc-log": "^1.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "treeverse": "^1.0.4", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz", - "integrity": "sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g==", - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" - } - }, - "@npmcli/metavuln-calculator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz", - "integrity": "sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==", - "requires": { - "cacache": "^15.0.5", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^12.0.0", - "semver": "^7.3.2" - } - }, - "@npmcli/run-script": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", - "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.2.0", - "read-package-json-fast": "^2.0.1" - } - }, - "bin-links": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", - "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", - "requires": { - "cmd-shim": "^4.0.1", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^2.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^3.0.3" - } - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "ignore-walk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", - "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "node-gyp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.3.0.tgz", - "integrity": "sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA==", - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - } - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "pacote": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", - "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", - "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^2.0.0", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^3.0.0", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "undici": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-4.9.2.tgz", - "integrity": "sha512-O8D4fp0cT7/bOMe7XE2oc0PaBCyc0GsahzQ+nMSeWW0o0+EB2ykXYNhU0kY2nKP589zzS91pLj979NtJrBRwFQ==" - } } }, "@nodesecure/sec-literal": { @@ -1196,6 +993,11 @@ } } }, + "@nodesecure/utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nodesecure/utils/-/utils-1.0.0.tgz", + "integrity": "sha512-eLkW+MDYx/pznZ5lvAA4QbQJryUaHOIwSfm/anWHsZYNE3HdtUOq2T7/eAKQyymmEIJbG3EHYMXVKSiVKZWgng==" + }, "@nodesecure/vuln": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@nodesecure/vuln/-/vuln-1.4.0.tgz", @@ -4438,7 +4240,8 @@ }, "hosted-git-info": { "version": "2.8.8", - "resolved": "", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "indent-string": { diff --git a/package.json b/package.json index e7a53c74..2dcce5a9 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@nodesecure/flags": "^1.2.0", "@nodesecure/i18n": "^1.2.0", "@nodesecure/npm-registry-sdk": "^1.3.0", - "@nodesecure/scanner": "^1.5.0", + "@nodesecure/scanner": "^2.0.0", "@nodesecure/vuln": "^1.4.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", From 109ea2319cb73e620e51a5181626093ae2c6c82d Mon Sep 17 00:00:00 2001 From: Thomas GENTILHOMME Date: Sun, 7 Nov 2021 15:03:20 +0100 Subject: [PATCH 23/32] refactor: use @nodesecure/utils & enhance author management --- package-lock.json | 6 +++--- package.json | 3 ++- public/js/master.js | 12 +----------- public/js/popup.js | 24 +++++++++++------------ public/js/utils.js | 33 ------------------------------- src/commands/summary.js | 4 +--- src/commands/verify.js | 6 ++---- src/utils.js | 19 ------------------ test/utils.spec.js | 43 ----------------------------------------- 9 files changed, 20 insertions(+), 130 deletions(-) delete mode 100644 src/utils.js delete mode 100644 test/utils.spec.js diff --git a/package-lock.json b/package-lock.json index a4ca99c8..cb79d95b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -923,9 +923,9 @@ } }, "@nodesecure/scanner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-2.0.0.tgz", - "integrity": "sha512-epFKIi7cHCQ5PrH/Rv3BQWBJ1yPH4UL1R7G/jdHS9Y1tQcwVyAKG08PmY0Bl7AU9mJNUMPYS1I7ykOAnKSwJsg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nodesecure/scanner/-/scanner-2.0.1.tgz", + "integrity": "sha512-RcTG0q09VOLDGh6ArEWaReJz7W+7j8OfIG8SDh7Bu/uBOwrrNRyUTOo2w5eAu/YnYxJWI5137E2MIbQAdPjJrQ==", "requires": { "@nodesecure/flags": "^1.2.0", "@nodesecure/fs-walk": "^1.0.0", diff --git a/package.json b/package.json index 2dcce5a9..44a327f7 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,8 @@ "@nodesecure/flags": "^1.2.0", "@nodesecure/i18n": "^1.2.0", "@nodesecure/npm-registry-sdk": "^1.3.0", - "@nodesecure/scanner": "^2.0.0", + "@nodesecure/scanner": "^2.0.1", + "@nodesecure/utils": "^1.0.0", "@nodesecure/vuln": "^1.4.0", "@polka/send-type": "^0.5.2", "@slimio/async-cli-spinner": "^0.5.2", diff --git a/public/js/master.js b/public/js/master.js index cdda387e..55410681 100644 --- a/public/js/master.js +++ b/public/js/master.js @@ -553,17 +553,7 @@ document.addEventListener("DOMContentLoaded", async() => { } function handleAuthor(author) { - if (typeof author === "undefined" || author === null) { - return; - } - let user = { name: null }; - - if (typeof author === "string") { - user = utils.parseAuthor(author); - } - else if (typeof author === "object" && typeof author.name === "string") { - user = author; - } + const user = "name" in author ? author : { name: null }; if (authorsList.has(user.name)) { authorsList.get(user.name).count++; diff --git a/public/js/popup.js b/public/js/popup.js index ae2e34bf..5412956f 100644 --- a/public/js/popup.js +++ b/public/js/popup.js @@ -1,7 +1,12 @@ -import * as utils from "./utils.js"; +// Import Third-party Dependencies +import { locationToString } from "@nodesecure/utils"; import List from "list.js"; -const loadingMessage = "Loading ..."; +// Import Internal Dependencies +import * as utils from "./utils.js"; + +// CONSTANTS +const kLoadingMessage = "Loading ..."; function licenseModal(clone, options) { const { licenses, selectedNode } = options; @@ -21,13 +26,6 @@ function licenseModal(clone, options) { } } -function locationToString(location) { - const start = `${location[0][0]}:${location[0][1]}`; - const end = `${location[1][0]}:${location[1][1]}`; - - return `[${start}] - [${end}]`; -} - function getLineFromFile(code, location) { const [[startLine]] = location; const lines = code.split('\n'); @@ -45,7 +43,7 @@ async function fetchCodeLine(event, url, location, cache, lineId) { return; } - target.innerText = loadingMessage; + target.innerText = kLoadingMessage; const code = await fetch(url).then((response) => response.text()); target.innerText = code.length ? getLineFromFile(code, location): "Line not found ..."; @@ -55,12 +53,12 @@ async function fetchCodeLine(event, url, location, cache, lineId) { function handleOutsideTooltipClick({ target }) { const tooltip = document.getElementById('tooltip'); - + if (!tooltip) { return; } - - if ((tooltip.innerHTML && tooltip.innerHTML !== loadingMessage) && !tooltip.contains(target) && tooltip.style.visibility === "visible") { + + if ((tooltip.innerHTML && tooltip.innerHTML !== kLoadingMessage) && !tooltip.contains(target) && tooltip.style.visibility === "visible") { tooltip.style.visibility = "hidden"; tooltip.innerHTML = ""; } diff --git a/public/js/utils.js b/public/js/utils.js index 338a04fd..dcd7046b 100644 --- a/public/js/utils.js +++ b/public/js/utils.js @@ -198,39 +198,6 @@ export async function getJSON(path, customHeaders = Object.create(null)) { return raw.json(); } -export function parseAuthor(str) { - if (typeof str !== "string") { - throw new TypeError("expected author to be a string"); - } - - if (!str || !/\w/.test(str)) { - return {}; - } - - const match = /^([^<(]+?)?[ \t]*(?:<([^>(]+?)>)?[ \t]*(?:\(([^)]+?)\)|$)/gm.exec(str); - if (!match) { - return {}; - } - const author = Object.create(null); - - if (match[1]) { - author.name = match[1]; - } - - for (let id = 2; id < match.length; id++) { - const val = match[id] || ""; - - if (val.includes("@")) { - author.email = val; - } - else if (val.includes("http")) { - author.url = val; - } - } - - return author; -} - export function copyToClipboard(str) { const el = document.createElement('textarea'); // Create a