From 7b0ccbfb1af1a44007c44ffc54334078d58fe527 Mon Sep 17 00:00:00 2001 From: Igor Papandinas Date: Thu, 7 Mar 2024 17:21:15 +0100 Subject: [PATCH] feat: add env command (#178) - created a new `env` command - moved the `check` functionality under `env` command - implemented an `install` command to install all or individual deps - added the *env* section to *swanky.config* on `init` with default version from docker base-image - implemented the edit flow for the *env* section in *swanky.config* --- README.md | 50 ++-- base-image/Dockerfile | 6 +- src/commands/{check/index.ts => env/check.ts} | 19 +- src/commands/env/install.ts | 70 +++++ src/commands/init/index.ts | 2 +- src/lib/command-utils.ts | 48 +++- src/lib/config-builder.ts | 7 + src/lib/consts.ts | 10 + src/lib/swankyCommand.ts | 4 +- src/lib/tasks.ts | 46 ++-- src/types/index.ts | 5 +- yarn.lock | 251 +++++++++--------- 12 files changed, 336 insertions(+), 182 deletions(-) rename src/commands/{check/index.ts => env/check.ts} (92%) create mode 100644 src/commands/env/install.ts diff --git a/README.md b/README.md index 6d707795..53c3aaba 100644 --- a/README.md +++ b/README.md @@ -199,7 +199,6 @@ USAGE * [`swanky account create`](#swanky-account-create) * [`swanky account list`](#swanky-account-list) * [`swanky account ls`](#swanky-account-ls) -* [`swanky check`](#swanky-check) * [`swanky contract compile [CONTRACTNAME]`](#swanky-contract-compile-contractname) * [`swanky contract deploy CONTRACTNAME`](#swanky-contract-deploy-contractname) * [`swanky contract explain CONTRACTNAME`](#swanky-contract-explain-contractname) @@ -208,6 +207,8 @@ USAGE * [`swanky contract test [CONTRACTNAME]`](#swanky-contract-test-contractname) * [`swanky contract tx CONTRACTNAME MESSAGENAME`](#swanky-contract-tx-contractname-messagename) * [`swanky contract typegen CONTRACTNAME`](#swanky-contract-typegen-contractname) +* [`swanky env check`](#swanky-env-check) +* [`swanky env install`](#swanky-env-install) * [`swanky help [COMMANDS]`](#swanky-help-commands) * [`swanky init PROJECTNAME`](#swanky-init-projectname) * [`swanky node install`](#swanky-node-install) @@ -277,21 +278,6 @@ ALIASES $ swanky account ls ``` -## `swanky check` - -Check installed package versions and compatibility - -``` -USAGE - $ swanky check [-v] - -FLAGS - -v, --verbose Display more info in the result logs - -DESCRIPTION - Check installed package versions and compatibility -``` - _See code: [dist/commands/check/index.ts](https://github.com/AstarNetwork/swanky-cli/blob/v3.1.0-beta.0/dist/commands/check/index.ts)_ ## `swanky contract compile [CONTRACTNAME]` @@ -456,6 +442,38 @@ DESCRIPTION Generate types from compiled contract metadata ``` +## `swanky env check` + +Check installed package versions and compatibility + +``` +USAGE + $ swanky env check [-v] + +FLAGS + -v, --verbose Display more info in the result logs + +DESCRIPTION + Check installed package versions and compatibility +``` + +## `swanky env install` + +Install dev dependencies + +``` +USAGE + $ swanky env install [-a] [-d ] + +FLAGS + -a, --all Set all to true to install all dev dependencies specified in the swanky config + -d, --deps=... [default: ] Specific dev dependencies to install in the format + -v, --verbose Display more info in the result logs + +DESCRIPTION + Install dev dependencies +``` + ## `swanky help [COMMANDS]` Display help for swanky. diff --git a/base-image/Dockerfile b/base-image/Dockerfile index 7429433c..a4e13086 100644 --- a/base-image/Dockerfile +++ b/base-image/Dockerfile @@ -19,12 +19,12 @@ RUN curl -L https://github.com/swankyhub/swanky-cli/releases/download/v3.1.0-bet # Install Rustup and Rust, additional components, packages, and verify the installations RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ /bin/bash -c "source $HOME/.cargo/env && \ - rustup install 1.72 && \ - rustup default 1.72 && \ + rustup install 1.76 && \ + rustup default 1.76 && \ rustup component add rust-src && \ rustup target add wasm32-unknown-unknown && \ cargo install cargo-dylint dylint-link && \ - cargo install cargo-contract --version 4.0.0-rc.1 && \ + cargo install cargo-contract --version 4.0.0-rc.2 && \ rustc --version" # Install Yarn 1.x diff --git a/src/commands/check/index.ts b/src/commands/env/check.ts similarity index 92% rename from src/commands/check/index.ts rename to src/commands/env/check.ts index eaa169fe..417e6741 100644 --- a/src/commands/check/index.ts +++ b/src/commands/env/check.ts @@ -1,5 +1,5 @@ import { Listr } from "listr2"; -import { commandStdoutOrNull, extractCargoContractVersion } from "../../lib/index.js"; +import { extractCargoContractVersion, extractCargoDylintVersion, extractCargoNightlyVersion, extractCargoVersion, extractRustVersion } from "../../lib/index.js"; import { SwankyConfig } from "../../types/index.js"; import { pathExistsSync, writeJson } from "fs-extra/esm"; import { readFileSync } from "fs"; @@ -36,7 +36,7 @@ interface Ctx { looseDefinitionDetected: boolean; } -export default class Check extends SwankyCommand { +export class Check extends SwankyCommand { static description = "Check installed package versions and compatibility"; static flags = { @@ -79,7 +79,7 @@ export default class Check extends SwankyCommand { { title: "Check Rust", task: async (ctx, task) => { - ctx.versions.tools.rust = commandStdoutOrNull("rustc --version")?.match(/rustc (.*) \((.*)/)?.[1]; + ctx.versions.tools.rust = extractRustVersion(); if (!ctx.versions.tools.rust) { throw new Error("Rust is not installed"); } @@ -90,7 +90,7 @@ export default class Check extends SwankyCommand { { title: "Check cargo", task: async (ctx, task) => { - ctx.versions.tools.cargo = commandStdoutOrNull("cargo -V")?.match(/cargo (.*) \((.*)/)?.[1]; + ctx.versions.tools.cargo = extractCargoVersion(); if (!ctx.versions.tools.cargo) { throw new Error("Cargo is not installed"); } @@ -101,7 +101,7 @@ export default class Check extends SwankyCommand { { title: "Check cargo nightly", task: async (ctx, task) => { - ctx.versions.tools.cargoNightly = commandStdoutOrNull("cargo +nightly -V")?.match(/cargo (.*)-nightly \((.*)/)?.[1]; + ctx.versions.tools.cargoNightly = extractCargoNightlyVersion(); if (!ctx.versions.tools.cargoNightly) { throw new Error("Cargo nightly is not installed"); } @@ -112,7 +112,7 @@ export default class Check extends SwankyCommand { { title: "Check cargo dylint", task: async (ctx, task) => { - ctx.versions.tools.cargoDylint = commandStdoutOrNull("cargo dylint -V")?.match(/cargo-dylint (.*)/)?.[1]; + ctx.versions.tools.cargoDylint = extractCargoDylintVersion(); if (!ctx.versions.tools.cargoDylint) { throw new Warn("Cargo dylint is not installed"); } @@ -123,12 +123,11 @@ export default class Check extends SwankyCommand { { title: "Check cargo-contract", task: async (ctx, task) => { - const cargoContractVersion = extractCargoContractVersion(); - ctx.versions.tools.cargoContract = cargoContractVersion; - if (!cargoContractVersion) { + ctx.versions.tools.cargoContract = extractCargoContractVersion(); + if (!ctx.versions.tools.cargoContract) { throw new Error("Cargo contract is not installed"); } - task.title = `Check cargo-contract: ${cargoContractVersion}`; + task.title = `Check cargo-contract: ${ctx.versions.tools.cargoContract}`; }, exitOnError: false, }, diff --git a/src/commands/env/install.ts b/src/commands/env/install.ts new file mode 100644 index 00000000..e15160b7 --- /dev/null +++ b/src/commands/env/install.ts @@ -0,0 +1,70 @@ +import { Flags } from "@oclif/core"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { InputError } from "../../lib/errors.js"; +import { installCliDevDeps } from "../../lib/tasks.js"; +import { SUPPORTED_DEPS } from "../../lib/consts.js"; +import { DependencyName, SwankyConfig, getSwankyConfig } from "../../index.js"; +import { ConfigBuilder } from "../../lib/config-builder.js"; + +export class Install extends SwankyCommand { + static flags = { + deps: Flags.string({ + required: false, + description: `Install the specified dev dependency name and version in the format . The following options are supported: ${Object.keys( + SUPPORTED_DEPS + ).join(", ")}. For installing rust nightly version run: env install --deps rust@nightly`, + multiple: true, + default: [], + char: "d", + }), + }; + + async run(): Promise { + const { flags } = await this.parse(Install); + + const localConfig = getSwankyConfig('local') as SwankyConfig; + const depsToInstall = flags.deps.length > 0 ? this.parseDeps(flags.deps) : localConfig.env; + + if (Object.keys(depsToInstall).length === 0) { + this.log("No dependencies to install."); + return; + } + + await this.installDeps(depsToInstall); + + if (flags.deps.length > 0) { + await this.updateLocalConfig(depsToInstall); + } + + this.log("Swanky Dev Dependencies Installed successfully"); + } + + parseDeps(deps: string[]): Record { + return deps.reduce((acc, dep) => { + const [key, value] = dep.split('@'); + if (!Object.keys(SUPPORTED_DEPS).includes(key)) { + throw new InputError(`Unsupported dependency '${key}'. Supported: ${Object.keys(SUPPORTED_DEPS).join(", ")}`); + } + acc[key] = value || 'latest'; + return acc; + }, {} as Record); + } + + async installDeps(dependencies: Record) { + for (const [dep, version] of Object.entries(dependencies)) { + await this.spinner.runCommand( + () => installCliDevDeps(this.spinner, dep as DependencyName, version), + `Installing ${dep}@${version}` + ); + } + } + + async updateLocalConfig(newDeps: Record): Promise { + await this.spinner.runCommand(async () => { + const newLocalConfig = new ConfigBuilder(getSwankyConfig('local')) + .updateEnv(newDeps) + .build(); + await this.storeConfig(newLocalConfig, 'local'); + }, "Updating Swanky config with new Dev Dependencies..."); + } +} diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index 1cbe45ce..3050e45a 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -129,7 +129,7 @@ export class Init extends SwankyCommand { this.taskQueue.push({ task: installDeps, args: [this.projectPath], - runningMessage: "Installing dependencies", + runningMessage: "Installing NPM dependencies...", shouldExitOnError: false, }); diff --git a/src/lib/command-utils.ts b/src/lib/command-utils.ts index 270ea732..5284c4ad 100644 --- a/src/lib/command-utils.ts +++ b/src/lib/command-utils.ts @@ -12,9 +12,12 @@ import { DEFAULT_CONFIG_NAME, DEFAULT_CONFIG_FOLDER_NAME, DEFAULT_NODE_INFO, + DEFAULT_RUST_DEP_VERSION, + DEFAULT_CARGO_CONTRACT_DEP_VERSION, + DEFAULT_CARGO_DYLINT_DEP_VERSION, } from "./consts.js"; import { SwankyConfig, SwankySystemConfig } from "../types/index.js"; -import { ConfigError, FileError } from "./errors.js"; +import { ConfigError, FileError, ProcessError } from "./errors.js"; import { userInfo } from "os"; import { existsSync } from "fs"; @@ -150,7 +153,7 @@ export function ensureAccountIsSet(account: string | undefined, config: SwankyCo } } -export function buildSwankyConfig() { +export function buildSwankyConfig() { return { node: { localPath: "", @@ -180,6 +183,11 @@ export function buildSwankyConfig() { shibuya: { url: DEFAULT_SHIBUYA_NETWORK_URL }, }, contracts: {}, + env: { + rust: extractRustVersion() ?? DEFAULT_RUST_DEP_VERSION, + "cargo-dylint": extractCargoDylintVersion() ?? DEFAULT_CARGO_DYLINT_DEP_VERSION, + "cargo-contract": extractCargoContractVersion() ?? DEFAULT_CARGO_CONTRACT_DEP_VERSION, + }, }; } @@ -206,4 +214,40 @@ export function configName(): string { } return process.env.SWANKY_CONFIG?.split("/").pop() ?? DEFAULT_CONFIG_NAME; +} + +export function extractVersion(command: string, regex: RegExp) { + const output = commandStdoutOrNull(command); + if (!output) { + return null; + } + + const match = output.match(regex); + if (!match) { + throw new ProcessError( + `Unable to determine version from command '${command}'. Please verify its installation.` + ); + } + + return match[1]; +} + +export function extractRustVersion() { + return extractVersion("rustc --version", /rustc (.*) \((.*)/); +} + +export function extractCargoVersion() { + return extractVersion("cargo -V", /cargo (.*) \((.*)/); +} + +export function extractCargoNightlyVersion() { + return extractVersion("cargo +nightly -V", /cargo (.*)-nightly \((.*)/); +} + +export function extractCargoDylintVersion() { + return extractVersion("cargo dylint -V", /cargo-dylint (.*)/); +} + +export function extractCargoContractVersion() { + return extractVersion("cargo contract -V", /cargo-contract-contract (\d+\.\d+\.\d+(?:-[\w.]+)?)(?:-unknown-[\w-]+)/); } \ No newline at end of file diff --git a/src/lib/config-builder.ts b/src/lib/config-builder.ts index 386dd9fd..9a4f4b0b 100644 --- a/src/lib/config-builder.ts +++ b/src/lib/config-builder.ts @@ -32,6 +32,13 @@ export class ConfigBuilder { return this; } + updateEnv(env: Record): ConfigBuilder { + if ("env" in this.config) { + this.config.env = {...this.config.env, ...env}; + } + return this; + } + updateContracts(contracts: SwankyConfig["contracts"]): ConfigBuilder { if ("contracts" in this.config) { this.config.contracts = { ...contracts }; diff --git a/src/lib/consts.ts b/src/lib/consts.ts index 8883913b..ad7d4209 100644 --- a/src/lib/consts.ts +++ b/src/lib/consts.ts @@ -14,6 +14,16 @@ export const DEFAULT_CONFIG_NAME = "swanky.config.json"; export const ARTIFACTS_PATH = "artifacts"; export const TYPED_CONTRACTS_PATH = "typedContracts"; +export const DEFAULT_RUST_DEP_VERSION = "1.76.0"; +export const DEFAULT_CARGO_DYLINT_DEP_VERSION = "2.6.1"; +export const DEFAULT_CARGO_CONTRACT_DEP_VERSION = "4.0.0-rc.2"; + +export const SUPPORTED_DEPS = { + rust: DEFAULT_RUST_DEP_VERSION, + "cargo-dylint": DEFAULT_CARGO_DYLINT_DEP_VERSION, + "cargo-contract": DEFAULT_CARGO_CONTRACT_DEP_VERSION, +} as const; + export const LOCAL_FAUCET_AMOUNT = 100; export const KEYPAIR_TYPE = "sr25519"; export const ALICE_URI = "//Alice"; diff --git a/src/lib/swankyCommand.ts b/src/lib/swankyCommand.ts index a184cb86..d3c3ff43 100644 --- a/src/lib/swankyCommand.ts +++ b/src/lib/swankyCommand.ts @@ -59,7 +59,7 @@ export abstract class SwankyCommand extends Command { this.swankyConfig = { ...this.swankyConfig, ...systemConfig }; } catch (error) { this.warn( - `No Swanky system config found; creating one in "/${DEFAULT_CONFIG_FOLDER_NAME}/${DEFAULT_CONFIG_NAME}}" at home directory` + `No Swanky system config found; creating one in "/${DEFAULT_CONFIG_FOLDER_NAME}/${DEFAULT_CONFIG_NAME}" at home directory` ); await this.storeConfig(this.swankyConfig, "global"); } @@ -102,7 +102,7 @@ export abstract class SwankyCommand extends Command { } else { // global configPath = getSystemConfigDirectoryPath() + `/${DEFAULT_CONFIG_NAME}`; - if ("node" in newConfig) { + if ("accounts" in newConfig) { // If it's a SwankyConfig, extract only the system relevant parts for the global SwankySystemConfig config newConfig = { defaultAccount: newConfig.defaultAccount, diff --git a/src/lib/tasks.ts b/src/lib/tasks.ts index 11af82fb..f023c567 100644 --- a/src/lib/tasks.ts +++ b/src/lib/tasks.ts @@ -10,14 +10,13 @@ import semver from "semver"; import { nodeInfo } from "./nodeInfo.js"; import decompress from "decompress"; import { Spinner } from "./spinner.js"; -import { Relaychain, SupportedArch, SupportedPlatforms, SwankyConfig, TestType, ZombienetConfig } from "../types/index.js"; +import { DependencyName, Relaychain, SupportedArch, SupportedPlatforms, SwankyConfig, TestType, ZombienetConfig } from "../types/index.js"; import { ConfigError, NetworkError, ProcessError } from "./errors.js"; import { BinaryNames } from "./zombienetInfo.js"; import { zombienetConfig } from "../commands/zombienet/init.js"; import { readFileSync } from "fs"; import TOML from "@iarna/toml"; import { writeFileSync } from "node:fs"; -import { commandStdoutOrNull } from "./command-utils.js"; export async function checkCliDependencies(spinner: Spinner) { const dependencyList = [ @@ -35,6 +34,32 @@ export async function checkCliDependencies(spinner: Spinner) { } } +export async function installCliDevDeps(spinner: Spinner, name: DependencyName, version: string) { + switch (name) { + case "rust": { + spinner.text(` Installing rust`); + await execaCommand(`rustup toolchain install ${version}`); + await execaCommand(`rustup default ${version}`); + await execaCommand(`rustup component add rust-src --toolchain ${version}`); + await execaCommand(`rustup target add wasm32-unknown-unknown --toolchain ${version}`); + break; + } + case "cargo-dylint": + case "cargo-contract": { + spinner.text(` Installing ${name}`); + await execaCommand( + `cargo +stable install ${name} ${ + version === "latest" ? "" : ` --force --version ${version}` + }` + ); + break; + } + default: + spinner.fail(`Unsupported dependency. Skipping installation.`); + return; + } +} + export function osCheck() { const platform = process.platform; const arch = process.arch; @@ -326,23 +351,6 @@ export async function installDeps(projectPath: string) { } } -export function extractCargoContractVersion() { - const regex = /cargo-contract-contract (\d+\.\d+\.\d+(?:-[\w.]+)?)(?:-unknown-[\w-]+)/; - const cargoContractVersionOutput = commandStdoutOrNull("cargo contract -V"); - if (!cargoContractVersionOutput) { - return null - } - - const match = cargoContractVersionOutput.match(regex); - if (!match) { - throw new ProcessError( - `Unable to determine cargo-contract version. Please verify its installation.` - ); - } - - return match[1]; -} - export function ensureCargoContractVersionCompatibility( cargoContractVersion: string, minimalVersion: string, diff --git a/src/types/index.ts b/src/types/index.ts index 77f1ede1..8c243e2e 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,4 +1,5 @@ import { SubmittableExtrinsic } from "@polkadot/api/types"; +import { SUPPORTED_DEPS } from "../lib/consts.js"; export type KeypairType = "ed25519" | "sr25519" | "ecdsa" | "ethereum"; @@ -60,12 +61,13 @@ export interface SwankyConfig extends SwankySystemConfig{ }; contracts: Record | Record; zombienet?: ZombienetData; + env: Record; } export interface SwankySystemConfig { defaultAccount: string | null; accounts: AccountData[]; - networks: Record + networks: Record; } export interface ZombienetData { @@ -117,4 +119,5 @@ export enum BuildMode { export type SupportedPlatforms = "darwin" | "linux"; export type SupportedArch = "arm64" | "x64"; +export type DependencyName = keyof typeof SUPPORTED_DEPS; export type TestType = "e2e" | "mocha"; diff --git a/yarn.lock b/yarn.lock index acf9fa0d..71261808 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1550,14 +1550,7 @@ ansi-escapes@^3.2.0: resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1622,12 +1615,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.1, ansi-styles@^4.3.0: dependencies: color-convert "^2.0.1" -ansi-styles@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansi-styles@^6.1.0: +ansi-styles@^6.0.0, ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -1910,7 +1898,15 @@ buffer-from@^1.0.0, buffer-from@^1.1.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.2.1, buffer@^5.5.0: +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2395,7 +2391,14 @@ code-point-at@^1.0.0: resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^1.9.3: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -2740,21 +2743,16 @@ diff@^4.0.1: resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +diff@^5.0.0, diff@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== diff@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -2881,12 +2879,17 @@ escape-html@^1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^4.0.0: +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0, escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -2896,11 +2899,6 @@ escape-string-regexp@^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== -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - escape-string-regexp@5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" @@ -3433,6 +3431,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fsu@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz" @@ -3497,9 +3500,9 @@ get-caller-file@^2.0.5: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + version "2.0.0" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: version "1.2.1" @@ -3536,7 +3539,12 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-stream@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -3553,7 +3561,7 @@ github-username@^6.0.0: dependencies: "@octokit/rest" "^18.0.6" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3567,18 +3575,14 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^10.2.2: - version "10.3.3" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz" - integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw== +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: - foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + is-glob "^4.0.1" -glob@^10.2.7: +glob@^10.2.2, glob@^10.2.7: version "10.2.7" dependencies: foreground-child "^3.1.0" @@ -3587,15 +3591,15 @@ glob@^10.2.7: minipass "^5.0.0 || ^6.0.2" path-scurry "^1.7.0" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -3610,18 +3614,6 @@ glob@^8.0.1: minimatch "^5.0.1" once "^1.3.0" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - globals@^13.19.0: version "13.20.0" resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" @@ -3880,21 +3872,16 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@1.1.13: + version "1.1.13" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@^1.1.4: +ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" @@ -4267,12 +4254,7 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-unicode-supported@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -is-unicode-supported@^1.2.0: +is-unicode-supported@^1.1.0, is-unicode-supported@^1.2.0: version "1.3.0" resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== @@ -4338,7 +4320,7 @@ jmespath@0.16.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.0: +js-yaml@^3.13.0, js-yaml@^3.14.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -4346,15 +4328,14 @@ js-yaml@^3.13.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" -js-yaml@^4.1.0, js-yaml@4.1.0: +js-yaml@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -4905,7 +4886,14 @@ mimic-response@^3.1.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -5026,9 +5014,6 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3. resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz" integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA== -"minipass@^5.0.0 || ^6.0.2": - version "7.0.2" - minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.2": version "5.0.0" resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" @@ -5173,15 +5158,20 @@ modern-errors@^6.0.0: set-error-props "^5.0.0" set-error-stack "^2.0.0" -ms@^2.0.0, ms@^2.1.1, ms@^2.1.2, ms@2.1.3: +ms@^2.0.0, ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.2: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multimatch@^5.0.0: version "5.0.0" @@ -5507,17 +5497,7 @@ npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: npm-package-arg "^8.1.2" semver "^7.3.4" -npm-pick-manifest@^8.0.0: - version "8.0.2" - resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz" - integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^10.0.0" - semver "^7.3.5" - -npm-pick-manifest@^8.0.1: +npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: version "8.0.1" dependencies: npm-install-checks "^6.0.0" @@ -5742,7 +5722,14 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -6540,7 +6527,12 @@ run-applescript@^5.0.0: dependencies: execa "^5.0.0" -run-async@^2.0.0, run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.0.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -6571,12 +6563,12 @@ rxjs@^7.0.0, rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -6599,12 +6591,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -sax@1.2.1: +sax@>=0.6.0, sax@1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== @@ -7866,21 +7853,16 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^20.2.2, yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" @@ -7891,7 +7873,20 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@^17.2.1, yargs@^17.3.1: +yargs@^17.2.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yargs@^17.3.1: version "17.7.2" resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==