From 23549e4069750c07676fea3768935bad83292a2e Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Mon, 12 Feb 2024 12:33:37 +0200 Subject: [PATCH 01/19] feat: Swanky node install locking mechanism with version management (#191) In node install command, having version locking mechanism, and allow users specify which version to install with command args. Add command `swanky node version` --------- Co-authored-by: Igor Papandinas --- src/commands/check/index.ts | 7 ++ src/commands/init/index.ts | 35 +++++++--- src/commands/node/install.ts | 39 +++++++++-- src/commands/node/start.ts | 7 +- src/commands/node/version.ts | 12 ++++ src/lib/consts.ts | 4 ++ src/lib/nodeInfo.ts | 132 +++++++++++++++++++++++++++++++---- src/lib/prompts.ts | 10 +++ src/types/index.ts | 3 +- 9 files changed, 220 insertions(+), 29 deletions(-) create mode 100644 src/commands/node/version.ts diff --git a/src/commands/check/index.ts b/src/commands/check/index.ts index 9d1d27fa..8af906ae 100644 --- a/src/commands/check/index.ts +++ b/src/commands/check/index.ts @@ -18,6 +18,7 @@ interface Ctx { cargoContract?: string | null; }; contracts: Record>; + node?: string | null; }; swankyConfig?: SwankyConfig; mismatchedVersions?: Record; @@ -59,6 +60,12 @@ export default class Check extends SwankyCommand { ctx.versions.tools.cargoContract = await commandStdoutOrNull("cargo contract -V"); }, }, + { + title: "Check swanky node", + task: async (ctx) => { + ctx.versions.node = this.swankyConfig.node.version !== "" ? this.swankyConfig.node.version : null; + }, + }, { title: "Read ink dependencies", task: async (ctx) => { diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index 45177372..e7141b40 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -6,7 +6,7 @@ import { execaCommand, execaCommandSync } from "execa"; import { paramCase, pascalCase, snakeCase } from "change-case"; import inquirer from "inquirer"; import TOML from "@iarna/toml"; -import { choice, email, name, pickTemplate } from "../../lib/prompts.js"; +import { choice, email, name, pickNodeVersion, pickTemplate } from "../../lib/prompts.js"; import { checkCliDependencies, copyCommonTemplateFiles, @@ -15,12 +15,11 @@ import { installDeps, ChainAccount, processTemplates, - swankyNode, - getTemplates, + getTemplates, swankyNodeVersions, } from "../../lib/index.js"; import { DEFAULT_ASTAR_NETWORK_URL, - DEFAULT_NETWORK_URL, + DEFAULT_NETWORK_URL, DEFAULT_NODE_INFO, DEFAULT_SHIBUYA_NETWORK_URL, DEFAULT_SHIDEN_NETWORK_URL, } from "../../lib/consts.js"; @@ -93,11 +92,13 @@ export class Init extends SwankyCommand { } projectPath = ""; + configBuilder: Partial = { node: { localPath: "", - polkadotPalletVersions: swankyNode.polkadotPalletVersions, - supportedInk: swankyNode.supportedInk, + polkadotPalletVersions: "", + supportedInk: "", + version: "", }, accounts: [], networks: { @@ -161,12 +162,28 @@ export class Init extends SwankyCommand { choice("useSwankyNode", "Do you want to download Swanky node?"), ]); if (useSwankyNode) { + const versions = Array.from(swankyNodeVersions.keys()); + let nodeVersion = DEFAULT_NODE_INFO.version; + await inquirer.prompt([ + pickNodeVersion(versions), + ]).then((answers) => { + nodeVersion = answers.version; + }); + + const nodeInfo = swankyNodeVersions.get(nodeVersion)!; + this.taskQueue.push({ task: downloadNode, - args: [this.projectPath, swankyNode, this.spinner], + args: [this.projectPath, nodeInfo, this.spinner], runningMessage: "Downloading Swanky node", - callback: (result) => - this.configBuilder.node ? (this.configBuilder.node.localPath = result) : null, + callback: (result) => { + this.configBuilder.node = { + supportedInk: nodeInfo.supportedInk, + polkadotPalletVersions: nodeInfo.polkadotPalletVersions, + version: nodeInfo.version, + localPath: result, + }; + } }); } } diff --git a/src/commands/node/install.ts b/src/commands/node/install.ts index 8d9beb5e..af90048c 100644 --- a/src/commands/node/install.ts +++ b/src/commands/node/install.ts @@ -1,17 +1,42 @@ import { SwankyCommand } from "../../lib/swankyCommand.js"; -import { ux } from "@oclif/core"; -import { downloadNode, swankyNode } from "../../lib/index.js"; +import { ux, Flags } from "@oclif/core"; +import { downloadNode, swankyNodeVersions } from "../../lib/index.js"; import path from "node:path"; import { writeJSON } from "fs-extra/esm"; +import inquirer from "inquirer"; +import { DEFAULT_NODE_INFO } from "../../lib/consts.js"; +import { pickNodeVersion } from "../../lib/prompts.js"; +import { InputError } from "../../lib/errors.js"; export class InstallNode extends SwankyCommand { static description = "Install swanky node binary"; + static flags = { + "set-version": Flags.string({ + description: "Specify version of swanky node to install. \n List of supported versions: " + Array.from(swankyNodeVersions.keys()).join(", "), + required: false, + }), + } async run(): Promise { const { flags } = await this.parse(InstallNode); if (flags.verbose) { this.spinner.verbose = true; } + let nodeVersion= DEFAULT_NODE_INFO.version; + + if (flags["set-version"]) { + nodeVersion = flags["set-version"]; + if(!swankyNodeVersions.has(nodeVersion)) { + throw new InputError(`Version ${nodeVersion} is not supported.\n List of supported versions: ${Array.from(swankyNodeVersions.keys()).join(", ")}`); + } + } else { + const versions = Array.from(swankyNodeVersions.keys()); + await inquirer.prompt([ + pickNodeVersion(versions), + ]).then((answers) => { + nodeVersion = answers.version; + }); + } const projectPath = path.resolve(); @@ -24,16 +49,20 @@ export class InstallNode extends SwankyCommand { } } + const nodeInfo = swankyNodeVersions.get(nodeVersion)!; + const taskResult = (await this.spinner.runCommand( - () => downloadNode(projectPath, swankyNode, this.spinner), + () => downloadNode(projectPath, nodeInfo, this.spinner), "Downloading Swanky node" )) as string; const nodePath = path.relative(projectPath, taskResult); + this.swankyConfig.node = { localPath: nodePath, - polkadotPalletVersions: swankyNode.polkadotPalletVersions, - supportedInk: swankyNode.supportedInk, + polkadotPalletVersions: nodeInfo.polkadotPalletVersions, + supportedInk: nodeInfo.supportedInk, + version: nodeInfo.version, }; await this.spinner.runCommand( diff --git a/src/commands/node/start.ts b/src/commands/node/start.ts index cb976870..e92e65e6 100644 --- a/src/commands/node/start.ts +++ b/src/commands/node/start.ts @@ -1,6 +1,7 @@ import { Flags } from "@oclif/core"; import { execaCommand } from "execa"; import { SwankyCommand } from "../../lib/swankyCommand.js"; +import semver from "semver"; export class StartNode extends SwankyCommand { static description = "Start a local node"; @@ -28,11 +29,15 @@ export class StartNode extends SwankyCommand { async run(): Promise { const { flags } = await this.parse(StartNode); + if (this.swankyConfig.node.version === "") { + this.log("Node is not installed"); + return; + } // Run persistent mode by default. non-persistent mode in case flag is provided. // Non-Persistent mode (`--dev`) allows all CORS origin, without `--dev`, users need to specify origins by `--rpc-cors`. await execaCommand( `${this.swankyConfig.node.localPath} \ - --finalize-delay-sec ${flags.finalizeDelaySec} \ + ${ semver.gte(this.swankyConfig.node.version, "1.6.0") ? `--finalize-delay-sec ${flags.finalizeDelaySec}` : ""} \ ${flags.tmp ? "--dev" : `--rpc-cors ${flags.rpcCors}`}`, { stdio: "inherit", diff --git a/src/commands/node/version.ts b/src/commands/node/version.ts new file mode 100644 index 00000000..a6937d09 --- /dev/null +++ b/src/commands/node/version.ts @@ -0,0 +1,12 @@ +import { SwankyCommand } from "../../lib/swankyCommand.js"; +export class NodeVersion extends SwankyCommand { + static description = "Show swanky node version"; + async run(): Promise { + if(this.swankyConfig.node.version === ""){ + this.log("Swanky node is not installed"); + } + else { + this.log(`Swanky node version: ${this.swankyConfig.node.version}`); + } + } +} diff --git a/src/lib/consts.ts b/src/lib/consts.ts index d48b2b67..ed9e063b 100644 --- a/src/lib/consts.ts +++ b/src/lib/consts.ts @@ -1,3 +1,5 @@ +import { swankyNodeVersions } from "./nodeInfo.js"; + export const DEFAULT_NETWORK_URL = "ws://127.0.0.1:9944"; export const DEFAULT_ASTAR_NETWORK_URL = "wss://rpc.astar.network"; export const DEFAULT_SHIDEN_NETWORK_URL = "wss://rpc.shiden.astar.network"; @@ -5,3 +7,5 @@ export const DEFAULT_SHIBUYA_NETWORK_URL = "wss://shibuya.public.blastapi.io"; export const ARTIFACTS_PATH = "artifacts"; export const TYPED_CONTRACTS_PATH = "typedContracts"; + +export const DEFAULT_NODE_INFO = swankyNodeVersions.get("1.6.0")!; diff --git a/src/lib/nodeInfo.ts b/src/lib/nodeInfo.ts index 3064488a..60a6d1f0 100644 --- a/src/lib/nodeInfo.ts +++ b/src/lib/nodeInfo.ts @@ -1,17 +1,123 @@ -export type nodeInfo = typeof swankyNode; - -export const swankyNode = { - version: "1.6.0", - polkadotPalletVersions: "polkadot-v0.9.39", - supportedInk: "v4.2.0", +export interface nodeInfo { + version: string; + polkadotPalletVersions: string; + supportedInk: string; downloadUrl: { darwin: { - "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-macOS-universal.tar.gz", - "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-macOS-universal.tar.gz" - }, + "arm64"?: string; + "x64"?: string; + }; linux: { - "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-ubuntu-aarch64.tar.gz", - "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-ubuntu-x86_64.tar.gz", + "arm64"?: string; + "x64"?: string; + }; + }; +} + +export const swankyNodeVersions = new Map([ + ["1.6.0", { + version: "1.6.0", + polkadotPalletVersions: "polkadot-v0.9.39", + supportedInk: "v4.2.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-macOS-universal.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-macOS-universal.tar.gz" + }, + linux: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-ubuntu-aarch64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-ubuntu-x86_64.tar.gz", + } + } + }], + ["1.5.0", { + version: "1.5.0", + polkadotPalletVersions: "polkadot-v0.9.39", + supportedInk: "v4.0.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.5.0/swanky-node-v1.5.0-macOS-universal.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.5.0/swanky-node-v1.5.0-macOS-universal.tar.gz" + }, + linux: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.5.0/swanky-node-v1.5.0-ubuntu-aarch64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.5.0/swanky-node-v1.5.0-ubuntu-x86_64.tar.gz", + } + } + }], + ["1.4.0", { + version: "1.4.0", + polkadotPalletVersions: "polkadot-v0.9.37", + supportedInk: "v4.0.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.4.0/swanky-node-v1.4.0-macOS-universal.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.4.0/swanky-node-v1.4.0-macOS-universal.tar.gz" + }, + linux: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.4.0/swanky-node-v1.4.0-ubuntu-aarch64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.4.0/swanky-node-v1.4.0-ubuntu-x86_64.tar.gz", + } + } + }], + ["1.3.0", { + version: "1.3.0", + polkadotPalletVersions: "polkadot-v0.9.37", + supportedInk: "v4.0.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.3.0/swanky-node-v1.3.0-macOS-universal.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.3.0/swanky-node-v1.3.0-macOS-universal.tar.gz" + }, + linux: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.3.0/swanky-node-v1.3.0-ubuntu-aarch64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.3.0/swanky-node-v1.3.0-ubuntu-x86_64.tar.gz", + } + } + }], + ["1.2.0", { + version: "1.2.0", + polkadotPalletVersions: "polkadot-v0.9.37", + supportedInk: "v4.0.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.2.0/swanky-node-v1.2.0-macOS-universal.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.2.0/swanky-node-v1.2.0-macOS-universal.tar.gz" + }, + linux: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.2.0/swanky-node-v1.2.0-ubuntu-aarch64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.2.0/swanky-node-v1.2.0-ubuntu-x86_64.tar.gz", + } + } + }], + ["1.1.0", { + version: "1.1.0", + polkadotPalletVersions: "polkadot-v0.9.37", + supportedInk: "v4.0.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.1.0/swanky-node-v1.1.0-macOS-x86_64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.1.0/swanky-node-v1.1.0-macOS-x86_64.tar.gz" + }, + linux: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.1.0/swanky-node-v1.1.0-ubuntu-x86_64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.1.0/swanky-node-v1.1.0-ubuntu-x86_64.tar.gz", + } + } + }], + ["1.0.0", { + version: "1.0.0", + polkadotPalletVersions: "polkadot-v0.9.30", + supportedInk: "v3.4.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.0.0/swanky-node-v1.0.0-macOS-x86_64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.0.0/swanky-node-v1.0.0-macOS-x86_64.tar.gz" + }, + linux: { + "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.0.0/swanky-node-v1.0.0-ubuntu-x86_64.tar.gz", + "x64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.0.0/swanky-node-v1.0.0-ubuntu-x86_64.tar.gz", + } } - }, -}; + }] +]); diff --git a/src/lib/prompts.ts b/src/lib/prompts.ts index 259c45a9..3ee17625 100644 --- a/src/lib/prompts.ts +++ b/src/lib/prompts.ts @@ -11,6 +11,16 @@ export function pickTemplate(templateList: string[]): ListQuestion { }; } +export function pickNodeVersion(nodeVersions: string[]): ListQuestion { + if (!nodeVersions?.length) throw new ConfigError("Node version list is empty!"); + return { + name: "version", + type: "list", + choices: nodeVersions, + message: "Which node version should we use?", + }; +} + export function name( subject: string, initial?: (answers: Answers) => string, diff --git a/src/types/index.ts b/src/types/index.ts index aa13a0df..7ff5b9f6 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -11,7 +11,7 @@ export interface ChainProperty { export type ExtrinsicPayload = SubmittableExtrinsic<"promise">; -export interface Encrypted { iv: string; data: string }; +export interface Encrypted { iv: string; data: string } export interface AccountData { isDev: boolean; @@ -43,6 +43,7 @@ export interface SwankyConfig { polkadotPalletVersions: string; localPath: string; supportedInk: string; + version: string; }; accounts: AccountData[]; contracts: Record | Record; From 6701f4290e324795882fac2de7464367e1a7edc4 Mon Sep 17 00:00:00 2001 From: Igor Papandinas Date: Mon, 12 Feb 2024 12:01:55 +0100 Subject: [PATCH 02/19] feat: Update swanky check (#114) Co-authored-by: prxgr4mm3r --- README.md | 2 +- src/commands/check/index.ts | 206 ++++++++++++++++++++++++++++++----- src/commands/node/install.ts | 10 +- src/lib/cargoContractInfo.ts | 13 +++ src/lib/nodeInfo.ts | 2 +- 5 files changed, 200 insertions(+), 33 deletions(-) create mode 100644 src/lib/cargoContractInfo.ts diff --git a/README.md b/README.md index 51a6b4e4..6d707795 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ A newly generated project will have a `swanky.config.json` file that will get po "node": { "localPath": "/Users/sasapul/Work/astar/swanky-cli/temp_proj/bin/swanky-node", "polkadotPalletVersions": "polkadot-v0.9.39", - "supportedInk": "v4.2.0" + "supportedInk": "v4.3.0" }, "accounts": [ { diff --git a/src/commands/check/index.ts b/src/commands/check/index.ts index 8af906ae..ce45afe9 100644 --- a/src/commands/check/index.ts +++ b/src/commands/check/index.ts @@ -1,14 +1,23 @@ import { Listr } from "listr2"; import { commandStdoutOrNull } from "../../lib/index.js"; import { SwankyConfig } from "../../types/index.js"; -import { pathExistsSync, readJSON } from "fs-extra/esm"; +import { pathExistsSync, readJSON, writeJson } from "fs-extra/esm"; import { readFileSync } from "fs"; import path from "node:path"; import TOML from "@iarna/toml"; import semver from "semver"; import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { Flags } from "@oclif/core"; +import chalk from "chalk"; +import { CARGO_CONTRACT_INK_DEPS } from "../../lib/cargoContractInfo.js"; +import { CLIError } from "@oclif/core/lib/errors/index.js"; +import Warn = CLIError.Warn; interface Ctx { + os: { + platform: string; + architecture: string; + }, versions: { tools: { rust?: string | null; @@ -17,57 +26,123 @@ interface Ctx { cargoDylint?: string | null; cargoContract?: string | null; }; + supportedInk?: string; + missingTools: string[]; contracts: Record>; - node?: string | null; + swankyNode: string | null; }; swankyConfig?: SwankyConfig; - mismatchedVersions?: Record; + mismatchedVersions: Record; looseDefinitionDetected: boolean; } export default class Check extends SwankyCommand { static description = "Check installed package versions and compatibility"; + static flags = { + print: Flags.string({ + char: "o", + description: "File to write output to", + }), + }; + public async run(): Promise { + const { flags } = await this.parse(Check); + const swankyNodeVersion = this.swankyConfig.node.version; + const isSwankyNodeInstalled = !!swankyNodeVersion; + const anyContracts = Object.keys(this.swankyConfig?.contracts).length > 0; const tasks = new Listr([ + { + title: "Check OS", + task: async (ctx, task) => { + ctx.os.platform = process.platform; + ctx.os.architecture = process.arch; + const supportedPlatforms = ["darwin", "linux"]; + const supportedArch = ["arm64", "x64"]; + + if (!supportedPlatforms.includes(ctx.os.platform)) { + throw new Error(`Platform ${ctx.os.platform} is not supported`); + } + if (!supportedArch.includes(ctx.os.architecture)) { + throw new Error(`Architecture ${ctx.os.architecture} is not supported`); + } + + task.title = `Check OS: '${ctx.os.platform}-${ctx.os.architecture}'`; + }, + exitOnError: false, + }, { title: "Check Rust", - task: async (ctx) => { - ctx.versions.tools.rust = await commandStdoutOrNull("rustc --version"); + task: async (ctx, task) => { + ctx.versions.tools.rust = (await commandStdoutOrNull("rustc --version"))?.match(/rustc (.*) \((.*)/)?.[1]; + if (!ctx.versions.tools.rust) { + throw new Error("Rust is not installed"); + } + task.title = `Check Rust: ${ctx.versions.tools.rust}`; }, + exitOnError: false, }, { title: "Check cargo", - task: async (ctx) => { - ctx.versions.tools.cargo = await commandStdoutOrNull("cargo -V"); + task: async (ctx, task) => { + ctx.versions.tools.cargo = (await commandStdoutOrNull("cargo -V"))?.match(/cargo (.*) \((.*)/)?.[1]; + if (!ctx.versions.tools.cargo) { + throw new Error("Cargo is not installed"); + } + task.title = `Check cargo: ${ctx.versions.tools.cargo}`; }, + exitOnError: false, }, { title: "Check cargo nightly", - task: async (ctx) => { - ctx.versions.tools.cargoNightly = await commandStdoutOrNull("cargo +nightly -V"); + task: async (ctx, task) => { + ctx.versions.tools.cargoNightly = (await commandStdoutOrNull("cargo +nightly -V"))?.match(/cargo (.*)-nightly \((.*)/)?.[1]; + if (!ctx.versions.tools.cargoNightly) { + throw new Error("Cargo nightly is not installed"); + } + task.title = `Check cargo nightly: ${ctx.versions.tools.cargoNightly}`; }, + exitOnError: false, }, { title: "Check cargo dylint", - task: async (ctx) => { - ctx.versions.tools.cargoDylint = await commandStdoutOrNull("cargo dylint -V"); + task: async (ctx, task) => { + ctx.versions.tools.cargoDylint = (await commandStdoutOrNull("cargo dylint -V"))?.match(/cargo-dylint (.*)/)?.[1]; + if (!ctx.versions.tools.cargoDylint) { + throw new Warn("Cargo dylint is not installed"); + } + task.title = `Check cargo dylint: ${ctx.versions.tools.cargoDylint}`; }, + exitOnError: false, }, { title: "Check cargo-contract", - task: async (ctx) => { + task: async (ctx, task) => { ctx.versions.tools.cargoContract = await commandStdoutOrNull("cargo contract -V"); + if (!ctx.versions.tools.cargoContract) { + throw new Error("Cargo contract is not installed"); + } + + const regex = /cargo-contract-contract (\d+\.\d+\.\d+(?:-[\w.]+)?)(?:-unknown-[\w-]+)/; + const match = ctx.versions.tools.cargoContract.match(regex); + if (match?.[1]) { + ctx.versions.tools.cargoContract = match[1]; + } else { + throw new Error("Cargo contract version not found"); + } + task.title = `Check cargo-contract: ${ctx.versions.tools.cargoContract}`; }, + exitOnError: false, }, { title: "Check swanky node", task: async (ctx) => { - ctx.versions.node = this.swankyConfig.node.version !== "" ? this.swankyConfig.node.version : null; + ctx.versions.swankyNode = this.swankyConfig.node.version !== "" ? this.swankyConfig.node.version : null; }, }, { title: "Read ink dependencies", + enabled: anyContracts, task: async (ctx) => { const swankyConfig = await readJSON("swanky.config.json"); ctx.swankyConfig = swankyConfig; @@ -86,7 +161,7 @@ export default class Check extends SwankyCommand { const cargoToml = TOML.parse(cargoTomlString); const inkDependencies = Object.entries(cargoToml.dependencies) - .filter((dependency) => dependency[0].includes("ink_")) + .filter((dependency) => dependency[0].includes("ink")) .map(([depName, depInfo]) => { const dependency = depInfo as Dependency; return [depName, dependency.version ?? dependency.tag]; @@ -96,43 +171,122 @@ export default class Check extends SwankyCommand { }, }, { - title: "Verify ink version", + title: "Verify ink version compatibility with Swanky node", + skip: (ctx) => Object.keys(ctx.versions.contracts).length === 0, + enabled: anyContracts && isSwankyNodeInstalled, task: async (ctx) => { - const supportedInk = ctx.swankyConfig?.node.supportedInk; - + const supportedInk = ctx.swankyConfig!.node.supportedInk; const mismatched: Record = {}; Object.entries(ctx.versions.contracts).forEach(([contract, inkPackages]) => { Object.entries(inkPackages).forEach(([inkPackage, version]) => { - if (semver.gt(version, supportedInk!)) { + if (semver.gt(version, supportedInk)) { mismatched[ `${contract}-${inkPackage}` - ] = `Version of ${inkPackage} (${version}) in ${contract} is higher than supported ink version (${supportedInk})`; + ] = `Version of ${inkPackage} (${version}) in ${chalk.yellowBright(contract)} is higher than supported ink version (${supportedInk}) in current Swanky node version (${swankyNodeVersion}). A Swanky node update can fix this warning.`; } - if (!(version.startsWith("=") || version.startsWith("v"))) { + if (version.startsWith(">") || version.startsWith("<") || version.startsWith("^") || version.startsWith("~")) { ctx.looseDefinitionDetected = true; } }); }); ctx.mismatchedVersions = mismatched; + if (Object.entries(mismatched).length > 0) { + throw new Warn("Ink versions in contracts don't match the Swanky node's supported version."); + } }, + exitOnError: false, + }, + { + title: "Verify cargo contract compatibility", + skip: (ctx) => !ctx.versions.tools.cargoContract, + enabled: anyContracts, + task: async (ctx) => { + const cargoContractVersion = ctx.versions.tools.cargoContract!; + const dependencyIdx = CARGO_CONTRACT_INK_DEPS.findIndex((dep) => + semver.satisfies(cargoContractVersion.replace(/-.*$/, ""), `>=${dep.minCargoContractVersion}`) + ); + + if (dependencyIdx === -1) { + throw new Warn(`cargo-contract version ${cargoContractVersion} is not supported`); + } + + const validInkVersionRange = CARGO_CONTRACT_INK_DEPS[dependencyIdx].validInkVersionRange; + const minCargoContractVersion = dependencyIdx === 0 + ? CARGO_CONTRACT_INK_DEPS[dependencyIdx].minCargoContractVersion + : CARGO_CONTRACT_INK_DEPS[dependencyIdx - 1].minCargoContractVersion + + const mismatched: Record = {}; + Object.entries(ctx.versions.contracts).forEach(([contract, inkPackages]) => { + Object.entries(inkPackages).forEach(([inkPackage, version]) => { + if (!semver.satisfies(version, validInkVersionRange)) { + mismatched[ + `${contract}-${inkPackage}` + ] = `Version of ${inkPackage} (${version}) in ${chalk.yellowBright(contract)} requires cargo-contract version >=${minCargoContractVersion}, but version ${cargoContractVersion} is installed`; + } + }); + }); + + ctx.mismatchedVersions = { ...ctx.mismatchedVersions, ...mismatched }; + if (Object.entries(mismatched).length > 0) { + throw new Warn("cargo-contract version mismatch"); + } + }, + exitOnError: false, + }, + { + title: "Check for missing tools", + task: async (ctx) => { + const missingTools: string[] = []; + for (const [toolName, toolVersion] of Object.entries(ctx.versions.tools)) { + if (!toolVersion) { + missingTools.push(toolName); + if (toolName === "cargoDylint") this.warn("Cargo dylint is not installed"); + else this.error(`${toolName} is not installed`); + } + } + ctx.versions.missingTools = missingTools; + if (Object.entries(missingTools).length > 0) { + throw new Warn(`Missing tools: ${missingTools.join(", ")}`); + } + }, + exitOnError: false, }, ]); + const context = await tasks.run({ - versions: { tools: {}, contracts: {} }, + os: { platform: "", architecture: "" }, + versions: { + tools: {}, + missingTools: [], + contracts: {}, + swankyNode: swankyNodeVersion || null, + }, looseDefinitionDetected: false, + mismatchedVersions: {} }); - console.log(context.versions); - Object.values(context.mismatchedVersions as any).forEach((mismatch) => - console.error(`[ERROR] ${mismatch as string}`) - ); + + Object.values(context.mismatchedVersions).forEach((mismatch) => this.warn(mismatch)); + if (context.looseDefinitionDetected) { - console.log(`\n[WARNING]Some of the ink dependencies do not have a fixed version. + this.warn(`Some of the ink dependencies do not have a fixed version. This can lead to accidentally installing version higher than supported by the node. Please use "=" to install a fixed version (Example: "=3.0.1") `); } + + const output = { + ...context.os, + ...context.versions + } + + const filePath = flags.print; + if (filePath !== undefined) { + await this.spinner.runCommand(async () => { + writeJson(filePath, output, { spaces: 2 }); + }, `Writing output to file ${chalk.yellowBright(filePath)}`); + } } } diff --git a/src/commands/node/install.ts b/src/commands/node/install.ts index af90048c..79beab3e 100644 --- a/src/commands/node/install.ts +++ b/src/commands/node/install.ts @@ -1,11 +1,11 @@ import { SwankyCommand } from "../../lib/swankyCommand.js"; -import { ux, Flags } from "@oclif/core"; +import { Flags } from "@oclif/core"; import { downloadNode, swankyNodeVersions } from "../../lib/index.js"; import path from "node:path"; import { writeJSON } from "fs-extra/esm"; import inquirer from "inquirer"; import { DEFAULT_NODE_INFO } from "../../lib/consts.js"; -import { pickNodeVersion } from "../../lib/prompts.js"; +import { choice, pickNodeVersion } from "../../lib/prompts.js"; import { InputError } from "../../lib/errors.js"; export class InstallNode extends SwankyCommand { @@ -41,9 +41,9 @@ export class InstallNode extends SwankyCommand { const projectPath = path.resolve(); if (this.swankyConfig.node.localPath !== "") { - const overwrite = await ux.confirm( - "Swanky node already installed. Do you want to overwrite it? (y/n)" - ); + const { overwrite } =await inquirer.prompt([ + choice("overwrite", "Swanky node already installed. Do you want to overwrite it?"), + ]); if (!overwrite) { return; } diff --git a/src/lib/cargoContractInfo.ts b/src/lib/cargoContractInfo.ts new file mode 100644 index 00000000..eafdd57d --- /dev/null +++ b/src/lib/cargoContractInfo.ts @@ -0,0 +1,13 @@ +export interface CargoContractInkDependency { + minCargoContractVersion: string; + validInkVersionRange: string; +} + +// Keep cargo-contract versions in descending order +// Ranges are supported by semver +export const CARGO_CONTRACT_INK_DEPS: CargoContractInkDependency[] = [ + { minCargoContractVersion: "4.0.0", validInkVersionRange: "<99.0.0" }, // Non-max version known yet: a very high version is used as fallback in the meantime + { minCargoContractVersion: "2.2.0", validInkVersionRange: "<5.0.0" }, + { minCargoContractVersion: "2.0.2", validInkVersionRange: "<4.2.0" }, + { minCargoContractVersion: "2.0.0", validInkVersionRange: "<4.0.1" }, +]; \ No newline at end of file diff --git a/src/lib/nodeInfo.ts b/src/lib/nodeInfo.ts index 60a6d1f0..59e2f415 100644 --- a/src/lib/nodeInfo.ts +++ b/src/lib/nodeInfo.ts @@ -18,7 +18,7 @@ export const swankyNodeVersions = new Map([ ["1.6.0", { version: "1.6.0", polkadotPalletVersions: "polkadot-v0.9.39", - supportedInk: "v4.2.0", + supportedInk: "v4.3.0", downloadUrl: { darwin: { "arm64": "https://github.com/AstarNetwork/swanky-node/releases/download/v1.6.0/swanky-node-v1.6.0-macOS-universal.tar.gz", From cd93607735e41cfcc5ad7bbdbe07d00c1c7c7824 Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Mon, 12 Feb 2024 20:24:35 +0200 Subject: [PATCH 03/19] feat: Add contract verifiable build (#125) Co-authored-by: Igor Papandinas --- .devcontainer/devcontainer.json | 6 +- base-image/Dockerfile | 12 +- src/commands/check/index.ts | 35 +- src/commands/contract/compile.ts | 37 +- src/commands/contract/verify.ts | 122 ++ src/lib/command-utils.ts | 6 +- src/lib/contract.ts | 2 +- src/lib/tasks.ts | 39 +- src/types/index.ts | 1 + yarn.lock | 2919 +++++++++++++++++------------- 10 files changed, 1836 insertions(+), 1343 deletions(-) create mode 100644 src/commands/contract/verify.ts diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c34e3ef1..19122656 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,9 @@ { "name": "swanky-env", - "image": "ghcr.io/swankyhub/swanky-cli/swanky-base:swanky3.1.0-beta.0_v2.1.0", - + "image": "ghcr.io/inkdevhub/swanky-cli/swanky-base:swanky3.1.0-beta.0_v2.1.1", + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2.8.0": {} + }, // Mount the workspace volume "mounts": ["source=${localWorkspaceFolder},target=/workspaces,type=bind,consistency=cached"], "workspaceFolder": "/workspaces", diff --git a/base-image/Dockerfile b/base-image/Dockerfile index c479863e..7429433c 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 toolchain install nightly-2023-03-05 && \ - rustup default nightly-2023-03-05 && \ - rustup component add rust-src --toolchain nightly-2023-03-05 && \ - rustup target add wasm32-unknown-unknown --toolchain nightly-2023-03-05 && \ - cargo +stable install cargo-dylint dylint-link && \ - cargo +stable install cargo-contract --force --version 4.0.0-alpha && \ + rustup install 1.72 && \ + rustup default 1.72 && \ + 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 && \ rustc --version" # Install Yarn 1.x diff --git a/src/commands/check/index.ts b/src/commands/check/index.ts index ce45afe9..1875a8eb 100644 --- a/src/commands/check/index.ts +++ b/src/commands/check/index.ts @@ -1,5 +1,5 @@ import { Listr } from "listr2"; -import { commandStdoutOrNull } from "../../lib/index.js"; +import { commandStdoutOrNull, extractCargoContractVersion } from "../../lib/index.js"; import { SwankyConfig } from "../../types/index.js"; import { pathExistsSync, readJSON, writeJson } from "fs-extra/esm"; import { readFileSync } from "fs"; @@ -74,7 +74,7 @@ export default class Check extends SwankyCommand { { title: "Check Rust", task: async (ctx, task) => { - ctx.versions.tools.rust = (await commandStdoutOrNull("rustc --version"))?.match(/rustc (.*) \((.*)/)?.[1]; + ctx.versions.tools.rust = commandStdoutOrNull("rustc --version")?.match(/rustc (.*) \((.*)/)?.[1]; if (!ctx.versions.tools.rust) { throw new Error("Rust is not installed"); } @@ -85,7 +85,7 @@ export default class Check extends SwankyCommand { { title: "Check cargo", task: async (ctx, task) => { - ctx.versions.tools.cargo = (await commandStdoutOrNull("cargo -V"))?.match(/cargo (.*) \((.*)/)?.[1]; + ctx.versions.tools.cargo = commandStdoutOrNull("cargo -V")?.match(/cargo (.*) \((.*)/)?.[1]; if (!ctx.versions.tools.cargo) { throw new Error("Cargo is not installed"); } @@ -96,7 +96,7 @@ export default class Check extends SwankyCommand { { title: "Check cargo nightly", task: async (ctx, task) => { - ctx.versions.tools.cargoNightly = (await commandStdoutOrNull("cargo +nightly -V"))?.match(/cargo (.*)-nightly \((.*)/)?.[1]; + ctx.versions.tools.cargoNightly = commandStdoutOrNull("cargo +nightly -V")?.match(/cargo (.*)-nightly \((.*)/)?.[1]; if (!ctx.versions.tools.cargoNightly) { throw new Error("Cargo nightly is not installed"); } @@ -107,7 +107,7 @@ export default class Check extends SwankyCommand { { title: "Check cargo dylint", task: async (ctx, task) => { - ctx.versions.tools.cargoDylint = (await commandStdoutOrNull("cargo dylint -V"))?.match(/cargo-dylint (.*)/)?.[1]; + ctx.versions.tools.cargoDylint = commandStdoutOrNull("cargo dylint -V")?.match(/cargo-dylint (.*)/)?.[1]; if (!ctx.versions.tools.cargoDylint) { throw new Warn("Cargo dylint is not installed"); } @@ -118,19 +118,12 @@ export default class Check extends SwankyCommand { { title: "Check cargo-contract", task: async (ctx, task) => { - ctx.versions.tools.cargoContract = await commandStdoutOrNull("cargo contract -V"); - if (!ctx.versions.tools.cargoContract) { + const cargoContractVersion = extractCargoContractVersion(); + ctx.versions.tools.cargoContract = cargoContractVersion; + if (!cargoContractVersion) { throw new Error("Cargo contract is not installed"); } - - const regex = /cargo-contract-contract (\d+\.\d+\.\d+(?:-[\w.]+)?)(?:-unknown-[\w-]+)/; - const match = ctx.versions.tools.cargoContract.match(regex); - if (match?.[1]) { - ctx.versions.tools.cargoContract = match[1]; - } else { - throw new Error("Cargo contract version not found"); - } - task.title = `Check cargo-contract: ${ctx.versions.tools.cargoContract}`; + task.title = `Check cargo-contract: ${cargoContractVersion}`; }, exitOnError: false, }, @@ -161,7 +154,7 @@ export default class Check extends SwankyCommand { const cargoToml = TOML.parse(cargoTomlString); const inkDependencies = Object.entries(cargoToml.dependencies) - .filter((dependency) => dependency[0].includes("ink")) + .filter(([depName]) => /^ink($|_)/.test(depName)) .map(([depName, depInfo]) => { const dependency = depInfo as Dependency; return [depName, dependency.version ?? dependency.tag]; @@ -177,12 +170,12 @@ export default class Check extends SwankyCommand { task: async (ctx) => { const supportedInk = ctx.swankyConfig!.node.supportedInk; const mismatched: Record = {}; - Object.entries(ctx.versions.contracts).forEach(([contract, inkPackages]) => { - Object.entries(inkPackages).forEach(([inkPackage, version]) => { + Object.entries(ctx.versions.contracts).forEach(([contract, inkDependencies]) => { + Object.entries(inkDependencies).forEach(([depName, version]) => { if (semver.gt(version, supportedInk)) { mismatched[ - `${contract}-${inkPackage}` - ] = `Version of ${inkPackage} (${version}) in ${chalk.yellowBright(contract)} is higher than supported ink version (${supportedInk}) in current Swanky node version (${swankyNodeVersion}). A Swanky node update can fix this warning.`; + `${contract}-${depName}` + ] = `Version of ${depName} (${version}) in ${chalk.yellowBright(contract)} is higher than supported ink version (${supportedInk}) in current Swanky node version (${swankyNodeVersion}). A Swanky node update can fix this warning.`; } if (version.startsWith(">") || version.startsWith("<") || version.startsWith("^") || version.startsWith("~")) { diff --git a/src/commands/contract/compile.ts b/src/commands/contract/compile.ts index a42ccddf..56129c01 100644 --- a/src/commands/contract/compile.ts +++ b/src/commands/contract/compile.ts @@ -1,6 +1,6 @@ import { Args, Flags } from "@oclif/core"; import path from "node:path"; -import { storeArtifacts, Spinner, generateTypes } from "../../lib/index.js"; +import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, generateTypes, Spinner, storeArtifacts } from "../../lib/index.js"; import { spawn } from "node:child_process"; import { pathExists } from "fs-extra/esm"; import { SwankyCommand } from "../../lib/swankyCommand.js"; @@ -16,6 +16,11 @@ export class CompileContract extends SwankyCommand { description: "A production contract should always be build in `release` mode for building optimized wasm", }), + verifiable: Flags.boolean({ + default: false, + description: + "A production contract should be build in `verifiable` mode to deploy on a public network. Ensure Docker Engine is up and running.", + }), all: Flags.boolean({ default: false, char: "a", @@ -49,7 +54,7 @@ export class CompileContract extends SwankyCommand { const contractInfo = this.swankyConfig.contracts[contractName]; if (!contractInfo) { throw new ConfigError( - `Cannot find contract info for ${contractName} contract in swanky.config.json` + `Cannot find contract info for ${contractName} contract in swanky.config.json`, ); } const contractPath = path.resolve("contracts", contractInfo.name); @@ -65,11 +70,23 @@ export class CompileContract extends SwankyCommand { "contract", "build", "--manifest-path", - `${contractPath}/Cargo.toml`, + `contracts/${contractName}/Cargo.toml`, ]; - if (flags.release) { + if (flags.release && !flags.verifiable) { compileArgs.push("--release"); } + if (flags.verifiable) { + const cargoContractVersion = extractCargoContractVersion(); + if (cargoContractVersion === null) + throw new InputError( + `Cargo contract tool is required for verifiable mode. Please ensure it is installed.` + ); + + ensureCargoContractVersionCompatibility(cargoContractVersion, "4.0.0", [ + "4.0.0-alpha", + ]); + compileArgs.push("--verifiable"); + } const compile = spawn("cargo", compileArgs); this.logger.info(`Running compile command: [${JSON.stringify(compile.spawnargs)}]`); let outputBuffer = ""; @@ -100,7 +117,7 @@ export class CompileContract extends SwankyCommand { }); }, `Compiling ${contractName} contract`, - `${contractName} Contract compiled successfully` + `${contractName} Contract compiled successfully`, ); const artifactsPath = compilationResult as string; @@ -112,8 +129,16 @@ export class CompileContract extends SwankyCommand { await spinner.runCommand( async () => await generateTypes(contractInfo.name), `Generating ${contractName} contract ts types`, - `${contractName} contract's TS types Generated successfully` + `${contractName} contract's TS types Generated successfully`, ); + + this.swankyConfig.contracts[contractName].build = { + timestamp: Date.now(), + artifactsPath, + isVerified: false, + }; + + await this.storeConfig(); } } } diff --git a/src/commands/contract/verify.ts b/src/commands/contract/verify.ts new file mode 100644 index 00000000..e6ea3991 --- /dev/null +++ b/src/commands/contract/verify.ts @@ -0,0 +1,122 @@ +import { Args, Flags } from "@oclif/core"; +import path from "node:path"; +import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, Spinner } from "../../lib/index.js"; +import { pathExists } from "fs-extra/esm"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { ConfigError, InputError, ProcessError } from "../../lib/errors.js"; +import { spawn } from "node:child_process"; + +export class VerifyContract extends SwankyCommand { + static description = "Verify the smart contract(s) in your contracts directory"; + + static flags = { + all: Flags.boolean({ + default: false, + char: "a", + description: "Set all to true to verify all contracts", + }), + }; + + static args = { + contractName: Args.string({ + name: "contractName", + required: false, + default: "", + description: "Name of the contract to verify", + }), + }; + + async run(): Promise { + const { args, flags } = await this.parse(VerifyContract); + + const cargoContractVersion = extractCargoContractVersion(); + if (cargoContractVersion === null) + throw new InputError( + `Cargo contract tool is required for verifiable mode. Please ensure it is installed.` + ); + + ensureCargoContractVersionCompatibility(cargoContractVersion, "4.0.0", [ + "4.0.0-alpha", + ]); + + if (args.contractName === undefined && !flags.all) { + throw new InputError("No contracts were selected to verify", { winston: { stack: true } }); + } + + const contractNames = flags.all + ? Object.keys(this.swankyConfig.contracts) + : [args.contractName]; + + const spinner = new Spinner(); + + for (const contractName of contractNames) { + this.logger.info(`Started compiling contract [${contractName}]`); + const contractInfo = this.swankyConfig.contracts[contractName]; + if (!contractInfo) { + throw new ConfigError( + `Cannot find contract info for ${contractName} contract in swanky.config.json` + ); + } + const contractPath = path.resolve("contracts", contractInfo.name); + this.logger.info(`"Looking for contract ${contractInfo.name} in path: [${contractPath}]`); + if (!(await pathExists(contractPath))) { + throw new InputError(`Contract folder not found at expected path`); + } + + if(!contractInfo.build) { + throw new InputError(`Contract ${contractName} is not compiled. Please compile it first`); + } + + await spinner.runCommand( + async () => { + return new Promise((resolve, reject) => { + if(contractInfo.build!.isVerified) { + this.logger.info(`Contract ${contractName} is already verified`); + resolve(true); + } + const compileArgs = [ + "contract", + "verify", + `artifacts/${contractName}/${contractName}.contract`, + "--manifest-path", + `contracts/${contractName}/Cargo.toml`, + ]; + const compile = spawn("cargo", compileArgs); + this.logger.info(`Running verify command: [${JSON.stringify(compile.spawnargs)}]`); + let outputBuffer = ""; + let errorBuffer = ""; + + compile.stdout.on("data", (data) => { + outputBuffer += data.toString(); + spinner.ora.clear(); + }); + + compile.stderr.on("data", (data) => { + errorBuffer += data; + }); + + compile.on("exit", (code) => { + if (code === 0) { + const regex = /Successfully verified contract (.*) against reference contract (.*)/; + const match = outputBuffer.match(regex); + if (match) { + this.logger.info(`Contract ${contractName} verification done.`); + resolve(true); + } + } else { + reject(new ProcessError(errorBuffer)); + } + }); + }); + }, + `Verifying ${contractName} contract`, + `${contractName} Contract verified successfully` + ); + contractInfo.build.isVerified = true; + + this.swankyConfig.contracts[contractName] = contractInfo; + + await this.storeConfig(); + } + } +} diff --git a/src/lib/command-utils.ts b/src/lib/command-utils.ts index 5cffd073..4478b6ee 100644 --- a/src/lib/command-utils.ts +++ b/src/lib/command-utils.ts @@ -1,13 +1,13 @@ -import { execaCommand } from "execa"; +import { execaCommand, execaCommandSync } from "execa"; import { copy, emptyDir, ensureDir, readJSON } from "fs-extra/esm"; import path from "node:path"; import { DEFAULT_NETWORK_URL, ARTIFACTS_PATH, TYPED_CONTRACTS_PATH } from "./consts.js"; import { SwankyConfig } from "../types/index.js"; import { ConfigError, FileError, InputError } from "./errors.js"; -export async function commandStdoutOrNull(command: string): Promise { +export function commandStdoutOrNull(command: string): string | null { try { - const result = await execaCommand(command); + const result = execaCommandSync(command); return result.stdout; } catch { return null; diff --git a/src/lib/contract.ts b/src/lib/contract.ts index 482c0ae2..7d9d85ab 100644 --- a/src/lib/contract.ts +++ b/src/lib/contract.ts @@ -56,7 +56,7 @@ export class Contract { `Cannot read .contract bundle, path not found: ${check.missingPaths.toString()}` ); } - return readJSON(path.resolve(this.artifactsPath, `${this.moduleName}.contract`)); + return readJSON(path.resolve(this.artifactsPath, `${this.moduleName}.contract`), 'utf-8'); } async getWasm(): Promise { diff --git a/src/lib/tasks.ts b/src/lib/tasks.ts index 20c0efdc..2705ac42 100644 --- a/src/lib/tasks.ts +++ b/src/lib/tasks.ts @@ -10,7 +10,9 @@ import { nodeInfo } from "./nodeInfo.js"; import decompress from "decompress"; import { Spinner } from "./spinner.js"; import { SupportedPlatforms, SupportedArch } from "../types/index.js"; -import { ConfigError, NetworkError } from "./errors.js"; +import { ConfigError, NetworkError, ProcessError } from "./errors.js"; +import semver from "semver"; +import { commandStdoutOrNull } from "./command-utils.js"; export async function checkCliDependencies(spinner: Spinner) { const dependencyList = [ @@ -136,3 +138,38 @@ export async function installDeps(projectPath: string) { await execaCommand(installCommand, { cwd: projectPath }); } } + +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, + invalidVersionsList?: string[] +) { + if (invalidVersionsList?.includes(cargoContractVersion)) { + throw new ProcessError( + `The cargo-contract version ${cargoContractVersion} is not supported. Please update or change the version.` + ); + } + + if (!semver.satisfies(cargoContractVersion.replace(/-.*$/, ""), `>=${minimalVersion}`)) { + throw new ProcessError( + `cargo-contract version >= ${minimalVersion} required, but found version ${cargoContractVersion}. Please update to a compatible version.` + ); + } +} diff --git a/src/types/index.ts b/src/types/index.ts index 7ff5b9f6..542a1d7f 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -30,6 +30,7 @@ export interface ContractData { export interface BuildData { timestamp: number; artifactsPath: string; + isVerified: boolean; } export interface DeploymentData { diff --git a/yarn.lock b/yarn.lock index ec51521c..acf9fa0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,24 +4,24 @@ "@aashutoshrathi/word-wrap@^1.2.3": version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@babel/code-frame@^7.0.0": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz" integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: "@babel/highlight" "^7.22.5" "@babel/helper-validator-identifier@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== "@babel/highlight@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz" integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: "@babel/helper-validator-identifier" "^7.22.5" @@ -30,26 +30,26 @@ "@babel/runtime@^7.21.0": version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz" integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== dependencies: regenerator-runtime "^0.13.11" "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" @@ -58,19 +58,19 @@ "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.1": version "4.6.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz" integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== "@eslint/eslintrc@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz" integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== dependencies: ajv "^6.12.4" @@ -85,17 +85,17 @@ "@eslint/js@8.44.0": version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz" integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.11.10": version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -104,22 +104,22 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@iarna/toml@^2.2.5": version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -131,22 +131,22 @@ "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -154,32 +154,32 @@ "@noble/curves@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz" integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== dependencies: "@noble/hashes" "1.3.1" "@noble/hashes@1.3.1": version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -187,7 +187,7 @@ "@npmcli/arborist@^4.0.4": version "4.3.1" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.3.1.tgz#a08cddce3339882f688c1dea1651f6971e781c44" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-4.3.1.tgz" integrity sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A== dependencies: "@isaacs/string-locale-compare" "^1.1.0" @@ -225,7 +225,7 @@ "@npmcli/arborist@^6.3.0": version "6.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.3.0.tgz#df37c79f7b82a2de8986fb9061b40efb4d188a38" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-6.3.0.tgz" integrity sha512-XrS14qBDhK95RdGhjTSx8AgeZPNah949qp3b0v3GUFOugtPc9Z85rpWid57mONS8gHbuGIHjFzuA+5hSM7BuBA== dependencies: "@isaacs/string-locale-compare" "^1.1.0" @@ -264,7 +264,7 @@ "@npmcli/config@^6.2.1": version "6.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.2.1.tgz#954cc09b727b6bfc087cb1d2a48994dc342e45cc" + resolved "https://registry.npmjs.org/@npmcli/config/-/config-6.2.1.tgz" integrity sha512-Cj/OrSbrLvnwWuzquFCDTwFN8QmR+SWH6qLNCBttUreDkKM5D5p36SeSMbcEUiCGdwjUrVy2yd8C0REwwwDPEw== dependencies: "@npmcli/map-workspaces" "^3.0.2" @@ -278,14 +278,14 @@ "@npmcli/disparity-colors@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz#60ea8c6eb5ba9de2d1950e15b06205b2c3ab7833" + resolved "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz" integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg== dependencies: ansi-styles "^4.3.0" "@npmcli/fs@^1.0.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" @@ -293,7 +293,7 @@ "@npmcli/fs@^2.1.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" @@ -301,14 +301,14 @@ "@npmcli/fs@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== dependencies: semver "^7.3.5" "@npmcli/git@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz" integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== dependencies: "@npmcli/promise-spawn" "^1.3.2" @@ -322,7 +322,7 @@ "@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1", "@npmcli/git@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz" integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== dependencies: "@npmcli/promise-spawn" "^6.0.0" @@ -336,7 +336,7 @@ "@npmcli/installed-package-contents@^1.0.6", "@npmcli/installed-package-contents@^1.0.7": version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== dependencies: npm-bundled "^1.1.1" @@ -344,7 +344,7 @@ "@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": version "2.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz" integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== dependencies: npm-bundled "^3.0.0" @@ -352,7 +352,7 @@ "@npmcli/map-workspaces@^2.0.0": version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz" integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== dependencies: "@npmcli/name-from-folder" "^1.0.1" @@ -362,7 +362,7 @@ "@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4": version "3.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz" integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== dependencies: "@npmcli/name-from-folder" "^2.0.0" @@ -372,7 +372,7 @@ "@npmcli/metavuln-calculator@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz" integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== dependencies: cacache "^15.0.5" @@ -382,7 +382,7 @@ "@npmcli/metavuln-calculator@^5.0.0": version "5.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz" integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== dependencies: cacache "^17.0.0" @@ -392,7 +392,7 @@ "@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: mkdirp "^1.0.4" @@ -400,7 +400,7 @@ "@npmcli/move-file@^2.0.0": version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: mkdirp "^1.0.4" @@ -408,34 +408,34 @@ "@npmcli/name-from-folder@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz" integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== "@npmcli/name-from-folder@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz" integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== "@npmcli/node-gyp@^1.0.2", "@npmcli/node-gyp@^1.0.3": version "1.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== "@npmcli/node-gyp@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz" integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== "@npmcli/package-json@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== dependencies: json-parse-even-better-errors "^2.3.1" "@npmcli/package-json@^4.0.0", "@npmcli/package-json@^4.0.1": version "4.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-4.0.1.tgz#1a07bf0e086b640500791f6bf245ff43cc27fa37" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-4.0.1.tgz" integrity sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q== dependencies: "@npmcli/git" "^4.1.0" @@ -448,28 +448,28 @@ "@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz" integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== dependencies: infer-owner "^1.0.4" "@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1", "@npmcli/promise-spawn@^6.0.2": version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz" integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== dependencies: which "^3.0.0" "@npmcli/query@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" + resolved "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz" integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== dependencies: postcss-selector-parser "^6.0.10" "@npmcli/run-script@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz" integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== dependencies: "@npmcli/node-gyp" "^1.0.2" @@ -479,7 +479,7 @@ "@npmcli/run-script@^6.0.0", "@npmcli/run-script@^6.0.2": version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz" integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== dependencies: "@npmcli/node-gyp" "^3.0.0" @@ -490,7 +490,7 @@ "@oclif/color@^1.0.4", "@oclif/color@^1.0.9": version "1.0.9" - resolved "https://registry.yarnpkg.com/@oclif/color/-/color-1.0.9.tgz#9707f0cd39b3c2eae0eb0c76a90838a594306327" + resolved "https://registry.npmjs.org/@oclif/color/-/color-1.0.9.tgz" integrity sha512-ntc/fZwuf4NRfYbXVoUNFyMB9IxVx/ls/WbSLKbkD9UpsmwY1I3J4DJKKRFRpenmTuxGQW8Lyzm7X3vhzHpDQA== dependencies: ansi-styles "^4.2.1" @@ -499,9 +499,9 @@ supports-color "^8.1.1" tslib "^2" -"@oclif/core@2.10.0", "@oclif/core@^2.8.7", "@oclif/core@^2.9.3", "@oclif/core@^2.9.4": +"@oclif/core@^2.8.7", "@oclif/core@^2.9.3", "@oclif/core@^2.9.4", "@oclif/core@2.10.0": version "2.10.0" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.10.0.tgz#8fd4a46bdea2a45ccf090c1433e913ea454b0607" + resolved "https://registry.npmjs.org/@oclif/core/-/core-2.10.0.tgz" integrity sha512-4csNtXBb+RKrhO2lBAwBvxuyk0B3NB45tAkSHOrJjUo1ufT+qpg9V+g7nHZBMlwoQmjlAjCOKtm6RHar8FrpZg== dependencies: "@types/cli-progress" "^3.11.0" @@ -535,16 +535,16 @@ wordwrap "^1.0.0" wrap-ansi "^7.0.0" -"@oclif/plugin-help@5.2.14", "@oclif/plugin-help@^5.2.14": +"@oclif/plugin-help@^5.2.14", "@oclif/plugin-help@5.2.14": version "5.2.14" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.2.14.tgz#c89f623712fc7d74f01fd2c9d909434b335a2e7b" + resolved "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-5.2.14.tgz" integrity sha512-7hMLc6zqxeRfG4nvHHQPpbaBj60efM3ULFkCpHZkdLms/ezIkNo40F661QuraIjMP/NN+U6VSfBCGuPkRyxVkA== dependencies: "@oclif/core" "^2.9.3" "@oclif/plugin-not-found@^2.3.32": version "2.3.34" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-2.3.34.tgz#08ab78cdd980bdf70d9bd3b9ba294ff7d3f04eca" + resolved "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-2.3.34.tgz" integrity sha512-uXUpw6o2e0aqnNn+XkGL7LbL+Th2rBD1JGtFbb6anmvUvz2skiGz0o23BYmrQW8tvU92ajPOykfClKD75ptZcw== dependencies: "@oclif/color" "^1.0.9" @@ -553,7 +553,7 @@ "@oclif/plugin-plugins@3.1.8": version "3.1.8" - resolved "https://registry.yarnpkg.com/@oclif/plugin-plugins/-/plugin-plugins-3.1.8.tgz#92ebebda1dd01d40e8f85c488bde3495999721a3" + resolved "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-3.1.8.tgz" integrity sha512-514sFBzLcR9QCSMWCHt/1XntfjJEZvb637b9YuV4kwq749pKEPF7fjCxSV1gYQCCP4TjMB5gB4AwPL4cCbe+/A== dependencies: "@oclif/color" "^1.0.4" @@ -573,14 +573,14 @@ "@oclif/plugin-version@1.3.7": version "1.3.7" - resolved "https://registry.yarnpkg.com/@oclif/plugin-version/-/plugin-version-1.3.7.tgz#5a858b66aaba454d2b622c07d6701c8587192704" + resolved "https://registry.npmjs.org/@oclif/plugin-version/-/plugin-version-1.3.7.tgz" integrity sha512-OSap5pWHREaSmAM5ow1e4ukXwZdzKg7/Ezxc2UnxWMTRcT6GVwOpq1+l9nRCR8wj1UWuVW1rttdQXe7LSYWutA== dependencies: "@oclif/core" "^2.9.3" "@oclif/plugin-warn-if-update-available@^2.0.44": version "2.0.45" - resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-2.0.45.tgz#e2d866adad2db27b26b4231d7a007067a56f76ee" + resolved "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-2.0.45.tgz" integrity sha512-MEncCUHW1vCOQdvt1z46jAblwvuGcs3Q1Gjl8IghazGJ0GRHzGOMILABpqVWR5uH/YJ3gfs05Tt7M4LdZ40N3g== dependencies: "@oclif/core" "^2.9.4" @@ -593,7 +593,7 @@ "@oclif/test@2.4.0": version "2.4.0" - resolved "https://registry.yarnpkg.com/@oclif/test/-/test-2.4.0.tgz#138cb846146295350fa38b2f7ee9b15f374b4f53" + resolved "https://registry.npmjs.org/@oclif/test/-/test-2.4.0.tgz" integrity sha512-eC99f81IdAzJdRtOAH5x28vfTk4Nbuqe9nySq6Y8z8MwA6zkDbJFWNj/Zz5LdBGabtsbuTXBku8U+evFrYMTcw== dependencies: "@oclif/core" "^2.9.4" @@ -601,14 +601,14 @@ "@octokit/auth-token@^2.4.4": version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz" integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== dependencies: "@octokit/types" "^6.0.3" -"@octokit/core@^3.5.1": +"@octokit/core@^3.5.1", "@octokit/core@>=2", "@octokit/core@>=3": version "3.6.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" + resolved "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz" integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== dependencies: "@octokit/auth-token" "^2.4.4" @@ -621,7 +621,7 @@ "@octokit/endpoint@^6.0.1": version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz" integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== dependencies: "@octokit/types" "^6.0.3" @@ -630,7 +630,7 @@ "@octokit/graphql@^4.5.8": version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz" integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== dependencies: "@octokit/request" "^5.6.0" @@ -639,24 +639,24 @@ "@octokit/openapi-types@^12.11.0": version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz" integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== "@octokit/plugin-paginate-rest@^2.16.8": version "2.21.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz" integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== dependencies: "@octokit/types" "^6.40.0" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== "@octokit/plugin-rest-endpoint-methods@^5.12.0": version "5.16.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz" integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== dependencies: "@octokit/types" "^6.39.0" @@ -664,7 +664,7 @@ "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz" integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== dependencies: "@octokit/types" "^6.0.3" @@ -673,7 +673,7 @@ "@octokit/request@^5.6.0", "@octokit/request@^5.6.3": version "5.6.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + resolved "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz" integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== dependencies: "@octokit/endpoint" "^6.0.1" @@ -685,7 +685,7 @@ "@octokit/rest@^18.0.6": version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz" integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== dependencies: "@octokit/core" "^3.5.1" @@ -695,19 +695,19 @@ "@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + resolved "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz" integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== dependencies: "@octokit/openapi-types" "^12.11.0" "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pkgr/utils@^2.3.1": version "2.4.2" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" + resolved "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz" integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== dependencies: cross-spawn "^7.0.3" @@ -719,7 +719,7 @@ "@polkadot/api-augment@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-10.9.1.tgz#9fc81b81903229bb23b0b16783e97ec52a5d4f1b" + resolved "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-10.9.1.tgz" integrity sha512-kRZZvCFVcN4hAH4dJ+Qzfdy27/4EEq3oLDf3ihj0LTVrAezSWcKPGE3EVFy+Mn6Lo4SUc7RVyoKvIUhSk2l4Dg== dependencies: "@polkadot/api-base" "10.9.1" @@ -732,7 +732,7 @@ "@polkadot/api-base@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-10.9.1.tgz#27f63c4950814c2f10535f794121fa1384dc2207" + resolved "https://registry.npmjs.org/@polkadot/api-base/-/api-base-10.9.1.tgz" integrity sha512-Q3m2KzlceMK2kX8bhnUZWk3RT6emmijeeFZZQgCePpEcrSeNjnqG4qjuTPgkveaOkUT8MAoDc5Avuzcc2jlW9g== dependencies: "@polkadot/rpc-core" "10.9.1" @@ -743,7 +743,7 @@ "@polkadot/api-contract@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-10.9.1.tgz#6820836df2d0efa10d08d58fd85e3513a5d4c537" + resolved "https://registry.npmjs.org/@polkadot/api-contract/-/api-contract-10.9.1.tgz" integrity sha512-BJjFYSFtsUlClC3mgvPNQ5h/7LZd5gVfexwl+mDgLd/6SN4dUBQjIXhlIL5a1cGYjq3EROuu7t0agG2DIaiZMQ== dependencies: "@polkadot/api" "10.9.1" @@ -758,7 +758,7 @@ "@polkadot/api-derive@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-10.9.1.tgz#04a4ca3285fd215c4cd50cfb3f4791d38dd90050" + resolved "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-10.9.1.tgz" integrity sha512-mRud1UZCFIc4Z63qAoGSIHh/foyUYADfy1RQYCmPpeFKfIdCIrHpd7xFdJXTOMYOS0BwlM6u4qli/ZT4XigezQ== dependencies: "@polkadot/api" "10.9.1" @@ -774,7 +774,7 @@ "@polkadot/api@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-10.9.1.tgz#156b3436f45ef18218960804988c1f552d2c4e46" + resolved "https://registry.npmjs.org/@polkadot/api/-/api-10.9.1.tgz" integrity sha512-ND/2UqZBWvtt4PfV03OStTKg0mxmPk4UpMAgJKutdgsz/wP9CYJ1KbjwFgPNekL9JnzbKQsWyQNPVrcw7kQk8A== dependencies: "@polkadot/api-augment" "10.9.1" @@ -795,18 +795,18 @@ rxjs "^7.8.1" tslib "^2.5.3" -"@polkadot/keyring@12.3.2", "@polkadot/keyring@^12.3.1": +"@polkadot/keyring@^12.3.1", "@polkadot/keyring@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-12.3.2.tgz#112a0c28816a1f47edad6260dc94222c29465a54" + resolved "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.3.2.tgz" integrity sha512-NTdtDeI0DP9l/45hXynNABeP5VB8piw5YR+CbUxK2e36xpJWVXwbcOepzslg5ghE9rs8UKJb30Z/HqTU4sBY0Q== dependencies: "@polkadot/util" "12.3.2" "@polkadot/util-crypto" "12.3.2" tslib "^2.5.3" -"@polkadot/networks@12.3.2", "@polkadot/networks@^12.3.1": +"@polkadot/networks@^12.3.1", "@polkadot/networks@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-12.3.2.tgz#131b0439c481add159814dd2cf0286c6c3fe5b3b" + resolved "https://registry.npmjs.org/@polkadot/networks/-/networks-12.3.2.tgz" integrity sha512-uCkyybKoeEm1daKr0uT/9oNDHDDzCy2/ZdVl346hQqfdR1Ct3BaxMjxqvdmb5N8aCw0cBWSfgsxAYtw8ESmllQ== dependencies: "@polkadot/util" "12.3.2" @@ -815,7 +815,7 @@ "@polkadot/rpc-augment@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-10.9.1.tgz#214ec3ee145d20caa61ea204041a3aadb89c6b0f" + resolved "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-10.9.1.tgz" integrity sha512-MaLHkNlyqN20ZRYr6uNd1BZr1OsrnX9qLAmsl0mcrri1vPGRH6VHjfFH1RBLkikpWD82v17g0l2hLwdV1ZHMcw== dependencies: "@polkadot/rpc-core" "10.9.1" @@ -826,7 +826,7 @@ "@polkadot/rpc-core@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-10.9.1.tgz#798c514dbed6f6c2e43098a494c9f51fb144dc31" + resolved "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-10.9.1.tgz" integrity sha512-ZtA8B8SfXSAwVkBlCcKRHw0eSM7ec/sbiNOM5GasXPeRujUgT7lOwSH2GbUZSqe9RfRDMp6DvO9c2JoGc3LLWw== dependencies: "@polkadot/rpc-augment" "10.9.1" @@ -838,7 +838,7 @@ "@polkadot/rpc-provider@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-10.9.1.tgz#de3a474bbcd26d28d9cd3134acdb3b5ce92b680b" + resolved "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-10.9.1.tgz" integrity sha512-4QzT2QzD+320+eT6b79sGAA85Tt3Bb8fQvse4r5Mom2iiBd2SO81vOhxSAOaIe4GUsw25VzFJmsbe7+OObItdg== dependencies: "@polkadot/keyring" "^12.3.1" @@ -858,7 +858,7 @@ "@polkadot/types-augment@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-10.9.1.tgz#5f1c1225c04ffbfe243629a46087c9c9de25a6b3" + resolved "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-10.9.1.tgz" integrity sha512-OY9/jTMFRFqYdkUnfcGwqMLC64A0Q25bjvCuVQCVjsPFKE3wl0Kt5rNT01eV2UmLXrR6fY0xWbR2w80bLA7CIQ== dependencies: "@polkadot/types" "10.9.1" @@ -868,7 +868,7 @@ "@polkadot/types-codec@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-10.9.1.tgz#f30026d3dfeaa69c07c45fa66d1c39318fd232cc" + resolved "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-10.9.1.tgz" integrity sha512-mJ5OegKGraY1FLvEa8FopRCr3pQrhDkcn5RNOjmgJQozENVeRaxhk0NwxYz7IojFvSDnKnc6lNQfKaaSe5pLHg== dependencies: "@polkadot/util" "^12.3.1" @@ -877,7 +877,7 @@ "@polkadot/types-create@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-10.9.1.tgz#087d7e2af51cce558b67e3859613b932a3bdc0a3" + resolved "https://registry.npmjs.org/@polkadot/types-create/-/types-create-10.9.1.tgz" integrity sha512-OVz50MGTTuiuVnRP/zAx4CTuLioc0hsiwNwqN2lNhmIJGtnQ4Vy/7mQRsIWehiYz6g0Vzzm5B3qWkTXO1NSN5w== dependencies: "@polkadot/types-codec" "10.9.1" @@ -886,7 +886,7 @@ "@polkadot/types-known@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-10.9.1.tgz#fe0c7e55191aa843119edcaf9abb5d2471463a7d" + resolved "https://registry.npmjs.org/@polkadot/types-known/-/types-known-10.9.1.tgz" integrity sha512-zCMVWc4pJtkbMFPu72bD4IhvV/gkHXPX3C5uu92WdmCfnn0vEIEsMKWlVXVVvQQZKAqvs/awpqIfrUtEViOGEA== dependencies: "@polkadot/networks" "^12.3.1" @@ -898,7 +898,7 @@ "@polkadot/types-support@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-10.9.1.tgz#17a861aab8e5a225a4e20cefa2d16076ddd51baf" + resolved "https://registry.npmjs.org/@polkadot/types-support/-/types-support-10.9.1.tgz" integrity sha512-XsieuLDsszvMZQlleacQBfx07i/JkwQV/UxH9q8Hz7Okmaz9pEVEW1h3ka2/cPuC7a4l32JhaORBUYshBZNdJg== dependencies: "@polkadot/util" "^12.3.1" @@ -906,7 +906,7 @@ "@polkadot/types@10.9.1": version "10.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-10.9.1.tgz#f111d00f7278ad3be95deba3d701fafefe080cb2" + resolved "https://registry.npmjs.org/@polkadot/types/-/types-10.9.1.tgz" integrity sha512-AG33i2ZGGfq7u+5rkAdGrXAQHHl844/Yv+junH5ZzX69xiCoWO1bH/yzDUNBdpki2GlACWvF9nLYh3F2tVF93w== dependencies: "@polkadot/keyring" "^12.3.1" @@ -918,9 +918,9 @@ rxjs "^7.8.1" tslib "^2.5.3" -"@polkadot/util-crypto@12.3.2", "@polkadot/util-crypto@^12.3.1": +"@polkadot/util-crypto@^12.3.1", "@polkadot/util-crypto@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-12.3.2.tgz#42d810886904e06fa6e5db254c15f6ef80f4ab72" + resolved "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.3.2.tgz" integrity sha512-pTpx+YxolY0BDT4RcGmgeKbHHD/dI6Ll9xRsqmVdIjpcVVY20uDNTyXs81ZNtfKgyod1y9JQkfNv2Dz9iEpTkQ== dependencies: "@noble/curves" "1.1.0" @@ -934,9 +934,9 @@ "@scure/base" "1.1.1" tslib "^2.5.3" -"@polkadot/util@12.3.2", "@polkadot/util@^12.3.1": +"@polkadot/util@*", "@polkadot/util@^12.3.1", "@polkadot/util@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-12.3.2.tgz#f46e147b0e6a426da5ba59df4ce65de1a3effe4a" + resolved "https://registry.npmjs.org/@polkadot/util/-/util-12.3.2.tgz" integrity sha512-y/JShcGyOamCUiSIg++XZuLHt1ktSKBaSH2K5Nw5NXlgP0+7am+GZzqPB8fQ4qhYLruEOv+YRiz0GC1Zr9S+wg== dependencies: "@polkadot/x-bigint" "12.3.2" @@ -949,7 +949,7 @@ "@polkadot/wasm-bridge@7.2.1": version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.2.1.tgz#8464a96552207d2b49c6f32137b24132534b91ee" + resolved "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.2.1.tgz" integrity sha512-uV/LHREDBGBbHrrv7HTki+Klw0PYZzFomagFWII4lp6Toj/VCvRh5WMzooVC+g/XsBGosAwrvBhoModabyHx+A== dependencies: "@polkadot/wasm-util" "7.2.1" @@ -957,14 +957,14 @@ "@polkadot/wasm-crypto-asmjs@7.2.1": version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.2.1.tgz#3e7a91e2905ab7354bc37b82f3e151a62bb024db" + resolved "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.2.1.tgz" integrity sha512-z/d21bmxyVfkzGsKef/FWswKX02x5lK97f4NPBZ9XBeiFkmzlXhdSnu58/+b1sKsRAGdW/Rn/rTNRDhW0GqCAg== dependencies: tslib "^2.5.0" "@polkadot/wasm-crypto-init@7.2.1": version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.2.1.tgz#9dbba41ed7d382575240f1483cf5a139ff2787bd" + resolved "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.2.1.tgz" integrity sha512-GcEXtwN9LcSf32V9zSaYjHImFw16hCyo2Xzg4GLLDPPeaAAfbFr2oQMgwyDbvBrBjLKHVHjsPZyGhXae831amw== dependencies: "@polkadot/wasm-bridge" "7.2.1" @@ -975,7 +975,7 @@ "@polkadot/wasm-crypto-wasm@7.2.1": version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.2.1.tgz#d2486322c725f6e5d2cc2d6abcb77ecbbaedc738" + resolved "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.2.1.tgz" integrity sha512-DqyXE4rSD0CVlLIw88B58+HHNyrvm+JAnYyuEDYZwCvzUWOCNos/DDg9wi/K39VAIsCCKDmwKqkkfIofuOj/lA== dependencies: "@polkadot/wasm-util" "7.2.1" @@ -983,7 +983,7 @@ "@polkadot/wasm-crypto@^7.2.1": version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.2.1.tgz#db671dcb73f1646dc13478b5ffc3be18c64babe1" + resolved "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.2.1.tgz" integrity sha512-SA2+33S9TAwGhniKgztVN6pxUKpGfN4Tre/eUZGUfpgRkT92wIUT2GpGWQE+fCCqGQgADrNiBcwt6XwdPqMQ4Q== dependencies: "@polkadot/wasm-bridge" "7.2.1" @@ -993,16 +993,16 @@ "@polkadot/wasm-util" "7.2.1" tslib "^2.5.0" -"@polkadot/wasm-util@7.2.1", "@polkadot/wasm-util@^7.2.1": +"@polkadot/wasm-util@*", "@polkadot/wasm-util@^7.2.1", "@polkadot/wasm-util@7.2.1": version "7.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.2.1.tgz#fda233120ec02f77f0d14e4d3c7ad9ce06535fb8" + resolved "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.2.1.tgz" integrity sha512-FBSn/3aYJzhN0sYAYhHB8y9JL8mVgxLy4M1kUXYbyo+8GLRQEN5rns8Vcb8TAlIzBWgVTOOptYBvxo0oj0h7Og== dependencies: tslib "^2.5.0" -"@polkadot/x-bigint@12.3.2", "@polkadot/x-bigint@^12.3.1": +"@polkadot/x-bigint@^12.3.1", "@polkadot/x-bigint@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-12.3.2.tgz#0e99489cc7938bed40762aaaed58ded6850ab54b" + resolved "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.3.2.tgz" integrity sha512-JLqLgfGXe/x+hZJETd5ZqfpVsbwyMsH5Nn1Q20ineMMjXN/ig+kVR8Mc15LXBMuw4g7LldFW6UUrotWnuMI8Yw== dependencies: "@polkadot/x-global" "12.3.2" @@ -1010,23 +1010,23 @@ "@polkadot/x-fetch@^12.3.1": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-12.3.2.tgz#7e8d2113268e792dd5d1b259ef13839c6aa77996" + resolved "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.3.2.tgz" integrity sha512-3IEuZ5S+RI/t33NsdPLIIa5COfDCfpUW2sbaByEczn75aD1jLqJZSEDwiBniJ2osyNd4uUxBf6e5jw7LAZeZJg== dependencies: "@polkadot/x-global" "12.3.2" node-fetch "^3.3.1" tslib "^2.5.3" -"@polkadot/x-global@12.3.2", "@polkadot/x-global@^12.3.1": +"@polkadot/x-global@^12.3.1", "@polkadot/x-global@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-12.3.2.tgz#04ac0b0e559a35107f0b95ff7889fcade3796aa3" + resolved "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.3.2.tgz" integrity sha512-yVZq6oIegjlyh5rUZiTklgu+fL+W/DG1ypEa02683tUCB3avV5cA3PAHKptMSlb6FpweHu37lKKrqfAWrraDxg== dependencies: tslib "^2.5.3" -"@polkadot/x-randomvalues@12.3.2": +"@polkadot/x-randomvalues@*", "@polkadot/x-randomvalues@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-12.3.2.tgz#43ac489a998098bdd40b3f82f28adb5b542db2a5" + resolved "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.3.2.tgz" integrity sha512-ywjIs8CWpvOGmq+3cGCNPOHxAjPHdBUiXyDccftx5BRVdmtbt36gK/V84bKr6Xs73FGu0jprUAOSRRsLZX/3dg== dependencies: "@polkadot/x-global" "12.3.2" @@ -1034,7 +1034,7 @@ "@polkadot/x-textdecoder@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-12.3.2.tgz#bbd5682744f3552ce5d4d792ff48a3ca525eafcf" + resolved "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.3.2.tgz" integrity sha512-lY5bfA5xArJRWEJlYOlQQMJeTjWD8s0yMhchirVgf5xj8Id9vPGeUoneH+VFDEwgXxrqBvDFJ4smN4T/r6a/fg== dependencies: "@polkadot/x-global" "12.3.2" @@ -1042,7 +1042,7 @@ "@polkadot/x-textencoder@12.3.2": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-12.3.2.tgz#223e6f6dd78e2d81c6dcc6f244c76ceae7b08e32" + resolved "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.3.2.tgz" integrity sha512-iP3qEBiHzBckQ9zeY7ZHRWuu7mCEg5SMpOugs6UODRk8sx6KHzGQYlghBbWLit0uppPDVE0ifEwZ2n73djJHWQ== dependencies: "@polkadot/x-global" "12.3.2" @@ -1050,7 +1050,7 @@ "@polkadot/x-ws@^12.3.1": version "12.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-12.3.2.tgz#422559dfbdaac4c965d5e1b406b6cc4529214f94" + resolved "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.3.2.tgz" integrity sha512-yM9Z64pLNlHpJE43+Xtr+iUXmYpFFY5u5hrke2PJt13O48H8f9Vb9cRaIh94appLyICoS0aekGhDkGH+MCspBA== dependencies: "@polkadot/x-global" "12.3.2" @@ -1059,24 +1059,33 @@ "@scure/base@1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== "@sigstore/bundle@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.0.0.tgz#2f2f4867f434760f4bc6f4b4bbccbaecd4143bc3" + resolved "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz" integrity sha512-yLvrWDOh6uMOUlFCTJIZEnwOT9Xte7NPXUqVexEKGSF5XtBAuSg5du0kn3dRR0p47a4ah10Y0mNt8+uyeQXrBQ== dependencies: "@sigstore/protobuf-specs" "^0.2.0" +"@sigstore/protobuf-specs@^0.1.0": + version "0.1.0" + "@sigstore/protobuf-specs@^0.2.0": version "0.2.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz#5801b2a4d10afe1577be6133be6b132b5677c18c" + resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz" integrity sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg== +"@sigstore/tuf@^1.0.1": + version "1.0.2" + dependencies: + "@sigstore/protobuf-specs" "^0.1.0" + tuf-js "^1.1.7" + "@sigstore/tuf@^1.0.3": version "1.0.3" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + resolved "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz" integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== dependencies: "@sigstore/protobuf-specs" "^0.2.0" @@ -1084,17 +1093,17 @@ "@sindresorhus/is@^4.0.0": version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@substrate/connect-extension-protocol@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz#fa5738039586c648013caa6a0c95c43265dbe77d" + resolved "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz" integrity sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg== "@substrate/connect@0.7.26": version "0.7.26" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.7.26.tgz#a0ee5180c9cb2f29250d1219a32f7b7e7dea1196" + resolved "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.26.tgz" integrity sha512-uuGSiroGuKWj1+38n1kY5HReer5iL9bRwPCzuoLtqAOmI1fGI0hsSI2LlNQMAbfRgr7VRHXOk5MTuQf5ulsFRw== dependencies: "@substrate/connect-extension-protocol" "^1.0.1" @@ -1103,54 +1112,54 @@ "@substrate/ss58-registry@^1.40.0": version "1.41.0" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.41.0.tgz#dd18e132f44b73c3cd31cf0db489c10af70bef36" + resolved "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.41.0.tgz" integrity sha512-TLz5VkEaJRNFzf1Oiix9gqknKer3aKbLfjK9XHBFCIhdxlQpI+S6lZGu3wT4DHAGXPakYfXb8+9ZIOtWLcQ/2Q== "@szmarczak/http-timer@^4.0.5": version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@tufjs/canonical-json@1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz" integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== "@tufjs/models@1.0.4": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + resolved "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz" integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== dependencies: "@tufjs/canonical-json" "1.0.0" @@ -1158,14 +1167,14 @@ "@types/bn.js@^5.1.1": version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== dependencies: "@types/node" "*" "@types/cacheable-request@^6.0.1": version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: "@types/http-cache-semantics" "*" @@ -1175,31 +1184,31 @@ "@types/chai@*", "@types/chai@4": version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz" integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== "@types/cli-progress@^3.11.0": version "3.11.0" - resolved "https://registry.yarnpkg.com/@types/cli-progress/-/cli-progress-3.11.0.tgz#ec79df99b26757c3d1c7170af8422e0fc95eef7e" + resolved "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.0.tgz" integrity sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg== dependencies: "@types/node" "*" "@types/decompress@4.2.4": version "4.2.4" - resolved "https://registry.yarnpkg.com/@types/decompress/-/decompress-4.2.4.tgz#dd2715d3ac1f566d03e6e302d1a26ffab59f8c5c" + resolved "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz" integrity sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA== dependencies: "@types/node" "*" "@types/expect@^1.20.4": version "1.20.4" - resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" + resolved "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz" integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== "@types/fs-extra@11.0.1": version "11.0.1" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-11.0.1.tgz#f542ec47810532a8a252127e6e105f487e0a6ea5" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz" integrity sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA== dependencies: "@types/jsonfile" "*" @@ -1207,7 +1216,7 @@ "@types/glob@~7.2.0": version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" @@ -1215,128 +1224,128 @@ "@types/http-cache-semantics@*": version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/iarna__toml@^2.0.2": version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/iarna__toml/-/iarna__toml-2.0.2.tgz#2e61b079e50760b477bc70e4df1fe5b633ef6c63" + resolved "https://registry.npmjs.org/@types/iarna__toml/-/iarna__toml-2.0.2.tgz" integrity sha512-Q3obxKhBLVVbEQ8zsAmsQVobAAZhi8dFFFjF0q5xKXiaHvH8IkSxcbM27e46M9feUMieR03SPpmp5CtaNzpdBg== dependencies: "@types/node" "*" "@types/inquirer-autocomplete-prompt@^2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.0.tgz#8b60cab59bb6b4c2f1885cb86316f0aa82fa24c9" + resolved "https://registry.npmjs.org/@types/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.0.tgz" integrity sha512-KgzR9j7R2hyhnLAdYjZ4EzjspnLENrcqZyKXphBAeN2/9qvHpd4lTxSWKkTuG8aeTPM9/5Fk0IGqSJCTkV+ZVw== dependencies: "@types/inquirer" "^8" "@types/inquirer-fuzzy-path@^2.3.6": version "2.3.6" - resolved "https://registry.yarnpkg.com/@types/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.6.tgz#bc7a1e32c93ac7d60d1bd158b3843948b67a856e" + resolved "https://registry.npmjs.org/@types/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.6.tgz" integrity sha512-O/XTBIu5rcPVO752pfvsIgf2AiZ7RlPjuVGzL9KIexPYAz0N2CD4CbcAebTlfVWsJ55kYOblXjz/7tnQYgi8yQ== dependencies: "@types/inquirer" "^8" "@types/inquirer-autocomplete-prompt" "^2" -"@types/inquirer@9.0.3": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-9.0.3.tgz#dc99da4f2f6de9d26c284b4f6aaab4d98c456db1" - integrity sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw== +"@types/inquirer@^8": + version "8.2.6" + resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.6.tgz" + integrity sha512-3uT88kxg8lNzY8ay2ZjP44DKcRaTGztqeIvN2zHvhzIBH/uAPaL75aBtdNRKbA7xXoMbBt5kX0M00VKAnfOYlA== dependencies: "@types/through" "*" rxjs "^7.2.0" -"@types/inquirer@^8": - version "8.2.6" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.2.6.tgz#abd41a5fb689c7f1acb12933d787d4262a02a0ab" - integrity sha512-3uT88kxg8lNzY8ay2ZjP44DKcRaTGztqeIvN2zHvhzIBH/uAPaL75aBtdNRKbA7xXoMbBt5kX0M00VKAnfOYlA== +"@types/inquirer@9.0.3": + version "9.0.3" + resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz" + integrity sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw== dependencies: "@types/through" "*" rxjs "^7.2.0" "@types/json-schema@^7.0.12": version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/jsonfile@*": version "6.1.1" - resolved "https://registry.yarnpkg.com/@types/jsonfile/-/jsonfile-6.1.1.tgz#ac84e9aefa74a2425a0fb3012bdea44f58970f1b" + resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz" integrity sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png== dependencies: "@types/node" "*" "@types/keyv@^3.1.4": version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" "@types/lodash-es@^4.17.8": version "4.17.8" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.8.tgz#cfffd0969507830c22da18dbb20d2ca126fdaa8b" + resolved "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.8.tgz" integrity sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog== dependencies: "@types/lodash" "*" "@types/lodash@*": version "4.14.196" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.196.tgz#a7c3d6fc52d8d71328b764e28e080b4169ec7a95" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz" integrity sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ== "@types/minimatch@*": version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimatch@^3.0.3": version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/mocha@10.0.1": version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz" integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== "@types/node@*", "@types/node@^20.4.5": version "20.4.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69" + resolved "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz" integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg== "@types/node@^15.6.2": version "15.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + resolved "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz" integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== "@types/normalize-package-data@^2.4.0": version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/responselike@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== dependencies: "@types/node" "*" -"@types/semver@7.5.0", "@types/semver@^7.5.0": +"@types/semver@^7.5.0", "@types/semver@7.5.0": version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== "@types/shelljs@0.8.12": version "0.8.12" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.12.tgz#79dc9632af7d5ca1b5afb65a6bfc1422d79b5fa0" + resolved "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.12.tgz" integrity sha512-ZA8U81/gldY+rR5zl/7HSHrG2KDfEb3lzG6uCUDhW1DTQE9yC/VBQ45fXnXq8f3CgInfhZmjtdu/WOUlrXRQUg== dependencies: "@types/glob" "~7.2.0" @@ -1344,31 +1353,31 @@ "@types/sinon@*": version "10.0.15" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.15.tgz#513fded9c3cf85e589bbfefbf02b2a0541186b48" + resolved "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz" integrity sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ== dependencies: "@types/sinonjs__fake-timers" "*" "@types/sinonjs__fake-timers@*": version "8.1.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" + resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== "@types/through@*": version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" + resolved "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz" integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== dependencies: "@types/node" "*" "@types/triple-beam@^1.3.2": version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz" integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== "@types/vinyl@^2.0.4": version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.7.tgz#9739a9a2afaf9af32761c54a0e82c735279f726c" + resolved "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.7.tgz" integrity sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg== dependencies: "@types/expect" "^1.20.4" @@ -1376,7 +1385,7 @@ "@typescript-eslint/eslint-plugin@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.0.tgz#57047c400be0632d4797ac081af8d399db3ebc3b" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.0.tgz" integrity sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ== dependencies: "@eslint-community/regexpp" "^4.5.1" @@ -1392,9 +1401,9 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@6.2.0": +"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.2.0.tgz#d37c30b0f459c6f39455335d8f4f085919a1c644" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.2.0.tgz" integrity sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g== dependencies: "@typescript-eslint/scope-manager" "6.2.0" @@ -1405,7 +1414,7 @@ "@typescript-eslint/scope-manager@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.2.0.tgz#412a710d8fa20bc045533b3b19f423810b24f87a" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.0.tgz" integrity sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q== dependencies: "@typescript-eslint/types" "6.2.0" @@ -1413,7 +1422,7 @@ "@typescript-eslint/type-utils@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.2.0.tgz#02b27a3eeb41aa5460d6275d12cce5dd72e1c9fc" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.2.0.tgz" integrity sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw== dependencies: "@typescript-eslint/typescript-estree" "6.2.0" @@ -1423,12 +1432,12 @@ "@typescript-eslint/types@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.2.0.tgz#b341a4e6d5f609267306b07afc6f62bcf92b1495" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.0.tgz" integrity sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA== "@typescript-eslint/typescript-estree@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.0.tgz#4969944b831b481996aa4fbd73c7164ca683b8ef" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.0.tgz" integrity sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w== dependencies: "@typescript-eslint/types" "6.2.0" @@ -1441,7 +1450,7 @@ "@typescript-eslint/utils@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.2.0.tgz#606a20e5c13883c2d2bd0538ddc4b96b8d410979" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.2.0.tgz" integrity sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -1454,54 +1463,54 @@ "@typescript-eslint/visitor-keys@6.2.0": version "6.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.0.tgz#71943f42fdaa2ec86dc3222091f41761a49ae71a" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.0.tgz" integrity sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ== dependencies: "@typescript-eslint/types" "6.2.0" eslint-visitor-keys "^3.4.1" -abbrev@1, abbrev@^1.0.0: +abbrev@^1.0.0, abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abbrev@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1, acorn@^8.9.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.9.0: version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== -agent-base@6, agent-base@^6.0.2: +agent-base@^6.0.2, agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== dependencies: debug "^4.1.0" @@ -1510,7 +1519,7 @@ agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -1518,7 +1527,7 @@ aggregate-error@^3.0.0: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1526,92 +1535,111 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + 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.1, ansi-escapes@^4.3.2: +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: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + 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@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz" integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== dependencies: type-fest "^1.0.2" ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== ansi-regex@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^3.0.0, ansi-styles@^3.2.1: +ansi-styles@^3.0.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^3.2.1: + 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== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.1, ansi-styles@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^6.0.0, ansi-styles@^6.1.0: +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: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansicolors@~0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -1619,17 +1647,17 @@ anymatch@~3.1.2: "aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== archy@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== are-we-there-yet@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: delegates "^1.0.0" @@ -1637,90 +1665,88 @@ are-we-there-yet@^2.0.0: are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" readable-stream "^3.6.0" are-we-there-yet@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz#05a6fc0e5f70771b673e82b0f915616e0ace8fd3" - integrity sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA== + version "4.0.0" dependencies: delegates "^1.0.0" readable-stream "^4.1.0" arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-differ@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== arrify@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== asap@^2.0.0: version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== assertion-error@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async@^3.2.3: version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sdk@^2.1231.0: version "2.1424.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1424.0.tgz#74dd3e865b30cc478df188a6520490171ae8bc56" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1424.0.tgz" integrity sha512-F6+wIp/K4UCg4sWQmQuuFReRNA0eYaPTHjt2is5uHE+2Vk2ojBbwatahbUnEB335tRZhndKf4UwyoyuuAdakMw== dependencies: buffer "4.9.2" @@ -1736,27 +1762,27 @@ aws-sdk@^2.1231.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== before-after-hook@^2.2.0: version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== big-integer@^1.6.44: version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== bin-links@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz" integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== dependencies: cmd-shim "^5.0.0" @@ -1768,7 +1794,7 @@ bin-links@^3.0.0: bin-links@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.2.tgz#13321472ea157e9530caded2b7281496d698665b" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-4.0.2.tgz" integrity sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw== dependencies: cmd-shim "^6.0.0" @@ -1776,19 +1802,24 @@ bin-links@^4.0.1: read-cmd-shim "^4.0.0" write-file-atomic "^5.0.0" -binary-extensions@^2.0.0, binary-extensions@^2.2.0: +binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +binary-extensions@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== binaryextensions@^4.15.0, binaryextensions@^4.16.0: version "4.18.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-4.18.0.tgz#22aeada2d14de062c60e8ca59a504a5636a76ceb" + resolved "https://registry.npmjs.org/binaryextensions/-/binaryextensions-4.18.0.tgz" integrity sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw== bl@^1.0.0: version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" @@ -1796,7 +1827,7 @@ bl@^1.0.0: bl@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -1805,28 +1836,28 @@ bl@^4.1.0: bl@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz" integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== dependencies: buffer "^6.0.3" inherits "^2.0.4" readable-stream "^3.4.0" -bn.js@5.2.1, bn.js@^5.2.1: +bn.js@^5.2.1, bn.js@5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== bplist-parser@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + resolved "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz" integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== dependencies: big-integer "^1.6.44" brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1834,31 +1865,31 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browser-stdout@1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== buffer-alloc-unsafe@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== buffer-alloc@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== dependencies: buffer-alloc-unsafe "^1.1.0" @@ -1866,31 +1897,22 @@ buffer-alloc@^1.2.0: buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-fill@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -1898,34 +1920,43 @@ buffer@^5.2.1, buffer@^5.5.0: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" ieee754 "^1.2.1" +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + builtins@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== builtins@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== dependencies: semver "^7.0.0" bundle-name@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz" integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== dependencies: run-applescript "^5.0.0" cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" @@ -1949,7 +1980,7 @@ cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: cacache@^16.1.0: version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" @@ -1973,7 +2004,7 @@ cacache@^16.1.0: cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.3: version "17.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz" integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== dependencies: "@npmcli/fs" "^3.1.0" @@ -1991,12 +2022,12 @@ cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.3: cacheable-lookup@^5.0.3: version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-request@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== dependencies: clone-response "^1.0.2" @@ -2009,7 +2040,7 @@ cacheable-request@^7.0.2: call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -2017,12 +2048,12 @@ call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -2030,12 +2061,12 @@ camel-case@^4.1.2: camelcase@^6.0.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== capital-case@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + resolved "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz" integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== dependencies: no-case "^3.0.4" @@ -2044,7 +2075,7 @@ capital-case@^1.0.4: cardinal@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + resolved "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz" integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== dependencies: ansicolors "~0.3.2" @@ -2052,7 +2083,7 @@ cardinal@^2.1.1: chai@4: version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz" integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== dependencies: assertion-error "^1.1.0" @@ -2063,14 +2094,9 @@ chai@4: pathval "^1.1.1" type-detect "^4.0.5" -chalk@5.3.0, chalk@^5.0.0, chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - chalk@^1.0.0: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" @@ -2079,26 +2105,64 @@ chalk@^1.0.0: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.0.0, chalk@^5.3.0, chalk@5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + change-case@4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz" integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== dependencies: camel-case "^4.1.2" @@ -2116,17 +2180,17 @@ change-case@4.1.2: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== check-error@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -chokidar@3.5.3, chokidar@^3.5.2: +chokidar@^3.5.2, chokidar@3.5.3: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -2141,48 +2205,48 @@ chokidar@3.5.3, chokidar@^3.5.2: chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^3.6.1, ci-info@^3.7.1, ci-info@^3.8.0: version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cidr-regex@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + resolved "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz" integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== dependencies: ip-regex "^4.1.0" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== clean-stack@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz" integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== dependencies: escape-string-regexp "4.0.0" clean-stack@^5.1.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-5.2.0.tgz#c7a0c91939c7caace30a3bf254e8a8ac276d1189" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz" integrity sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ== dependencies: escape-string-regexp "5.0.0" cli-boxes@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz" integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== cli-columns@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + resolved "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz" integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== dependencies: string-width "^4.2.3" @@ -2190,56 +2254,56 @@ cli-columns@^4.0.0: cli-cursor@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== dependencies: restore-cursor "^2.0.0" cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== dependencies: restore-cursor "^4.0.0" cli-progress@^3.12.0: version "3.12.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== dependencies: string-width "^4.2.3" cli-spinners@^2.5.0, cli-spinners@^2.6.1: version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz" integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== +cli-table@^0.3.1: + version "0.3.11" + resolved "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz" + integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== + dependencies: + colors "1.0.3" + cli-table3@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== dependencies: string-width "^4.2.0" optionalDependencies: "@colors/colors" "1.5.0" -cli-table@^0.3.1: - version "0.3.11" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" - integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== - dependencies: - colors "1.0.3" - cli-truncate@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== dependencies: slice-ansi "^5.0.0" @@ -2247,22 +2311,22 @@ cli-truncate@^3.1.0: cli-width@^2.0.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cli-width@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.0.0.tgz#a5622f6a3b0a9e3e711a25f099bf2399f608caf6" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz" integrity sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw== cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -2271,7 +2335,7 @@ cliui@^7.0.2: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -2280,34 +2344,34 @@ cliui@^8.0.1: clone-buffer@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + resolved "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== clone-response@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" clone-stats@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== clone@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== cloneable-readable@^1.0.0: version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + resolved "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== dependencies: inherits "^2.0.1" @@ -2316,48 +2380,48 @@ cloneable-readable@^1.0.0: cmd-shim@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== dependencies: mkdirp-infer-owner "^2.0.0" cmd-shim@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz" integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + 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: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + 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@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-string@^1.6.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -2365,12 +2429,12 @@ color-string@^1.6.0: color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== color@^3.1.3: version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -2378,17 +2442,17 @@ color@^3.1.3: colorette@^2.0.20: version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== colors@1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== colorspace@1.1.x: version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" @@ -2396,40 +2460,40 @@ colorspace@1.1.x: columnify@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== dependencies: strip-ansi "^6.0.1" wcwidth "^1.0.0" -commander@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" - integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== - commander@^2.8.1: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz" + integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== + common-ancestor-path@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concurrently@^7.6.0: version "7.6.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.6.0.tgz#531a6f5f30cf616f355a4afb8f8fcb2bba65a49a" + resolved "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz" integrity sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw== dependencies: chalk "^4.1.0" @@ -2444,12 +2508,12 @@ concurrently@^7.6.0: console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== constant-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz" integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== dependencies: no-case "^3.0.4" @@ -2458,22 +2522,22 @@ constant-case@^3.0.4: content-type@^1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -2482,65 +2546,65 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== dargs@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== data-uri-to-buffer@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== date-fns@^2.29.1: version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== dependencies: "@babel/runtime" "^7.21.0" dateformat@^4.5.0, dateformat@^4.5.1: version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@4, debug@4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== decamelize@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== dependencies: file-type "^5.2.0" @@ -2549,7 +2613,7 @@ decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: decompress-tarbz2@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== dependencies: decompress-tar "^4.1.0" @@ -2560,7 +2624,7 @@ decompress-tarbz2@^4.0.0: decompress-targz@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== dependencies: decompress-tar "^4.1.1" @@ -2569,7 +2633,7 @@ decompress-targz@^4.0.0: decompress-unzip@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== dependencies: file-type "^3.8.0" @@ -2579,7 +2643,7 @@ decompress-unzip@^4.0.1: decompress@4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== dependencies: decompress-tar "^4.0.0" @@ -2593,24 +2657,24 @@ decompress@4.2.1: deep-eql@^4.1.2: version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== default-browser-id@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz" integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== dependencies: bplist-parser "^0.2.0" @@ -2618,7 +2682,7 @@ default-browser-id@^3.0.0: default-browser@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + resolved "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz" integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== dependencies: bundle-name "^3.0.0" @@ -2628,81 +2692,86 @@ default-browser@^4.0.0: defaults@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" defer-to-connect@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== define-lazy-prop@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== depd@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== dezalgo@^1.0.0: version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== dependencies: asap "^2.0.0" wrappy "1" -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - diff@^3.1.0: version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0, diff@^5.1.0: +diff@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + resolved "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +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.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" @@ -2710,48 +2779,48 @@ dot-case@^3.0.4: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ejs@^3.1.8: version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enabled@2.0.x: version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== -encoding@^0.1.12, encoding@^0.1.13: +encoding@^0.1.0, encoding@^0.1.12, encoding@^0.1.13: version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enquirer@^2.3.6: +enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" @@ -2759,36 +2828,36 @@ enquirer@^2.3.6: env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-class-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/error-class-utils/-/error-class-utils-3.0.0.tgz#db9ec6ea56d5ebf8f4884c242f0e7c0de004c310" + resolved "https://registry.npmjs.org/error-class-utils/-/error-class-utils-3.0.0.tgz" integrity sha512-L26cyYkaV6nzbUbmDRNSXAZfcuQy4cvEDvD+WoRF6c6nIEEydfgn7grd+idf2xLVYaTHnn7yYQjaz+Dnx+N1lQ== error-custom-class@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/error-custom-class/-/error-custom-class-9.0.0.tgz#5897959c2fbfa5a1a1da85800358ea98902995c4" + resolved "https://registry.npmjs.org/error-custom-class/-/error-custom-class-9.0.0.tgz" integrity sha512-cfXOxbwRQpXLUSecZctO/GPtKm9auTd2v1eY4CsclMgRkse/h5w59V1u1p7LdStVnw/SCbROcsd5zLenauvlRw== dependencies: error-class-utils "^3.0.0" error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error-serializer@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/error-serializer/-/error-serializer-6.0.1.tgz#710f935290ae36ca639cb773030b6e3b467e3f78" + resolved "https://registry.npmjs.org/error-serializer/-/error-serializer-6.0.1.tgz" integrity sha512-SDEXcpWyys6yd6zLcC+s5bGnfe+xWxBJoC7p+o72c5F+hDdgdWc8LB8EOvcdqs7U+rzInYldFpiqSwmC3VZUeg== dependencies: is-error-instance "^2.0.0" @@ -2799,42 +2868,52 @@ error-serializer@^6.0.1: error@^10.4.0: version "10.4.0" - resolved "https://registry.yarnpkg.com/error/-/error-10.4.0.tgz#6fcf0fd64bceb1e750f8ed9a3dd880f00e46a487" + resolved "https://registry.npmjs.org/error/-/error-10.4.0.tgz" integrity sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw== escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: +escape-string-regexp@^1.0.2, 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: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: +escape-string-regexp@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + 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@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +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" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== eslint-config-prettier@8.9.0: version "8.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.9.0.tgz#094b6254b2804b0544f7cee535f802b6d29ee10b" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.9.0.tgz" integrity sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA== eslint-plugin-prettier@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz" integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w== dependencies: prettier-linter-helpers "^1.0.0" @@ -2842,7 +2921,7 @@ eslint-plugin-prettier@5.0.0: eslint-scope@^7.2.0: version "7.2.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.1.tgz#936821d3462675f25a18ac5fd88a67cc15b393bd" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz" integrity sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA== dependencies: esrecurse "^4.3.0" @@ -2850,12 +2929,12 @@ eslint-scope@^7.2.0: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@8.45.0: +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@>=7.0.0, eslint@>=8.0.0, eslint@8.45.0: version "8.45.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.45.0.tgz#bab660f90d18e1364352c0a6b7c6db8edb458b78" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz" integrity sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -2898,7 +2977,7 @@ eslint@8.45.0: espree@^9.6.0: version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -2907,76 +2986,81 @@ espree@^9.6.0: esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@^4.0.4, eventemitter3@^4.0.7: +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^4.0.7: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== eventemitter3@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - events@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@7.2.0, execa@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== +events@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz" + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" -execa@^5.0.0, execa@^5.1.1: +execa@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2989,14 +3073,29 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^7.1.1, execa@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + exponential-backoff@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -3005,7 +3104,7 @@ external-editor@^3.0.3: fancy-test@^2.0.31: version "2.0.32" - resolved "https://registry.yarnpkg.com/fancy-test/-/fancy-test-2.0.32.tgz#3cbf7ea8a83f9912b02d9ee0782517cca71834f9" + resolved "https://registry.npmjs.org/fancy-test/-/fancy-test-2.0.32.tgz" integrity sha512-yN40FulpMlEDVp/3YbSxVzkdUR/u0ZAk2Wu30vVvv79Dni0LoSz90ZXtLsp6e813ED0SHkaW/zfgDEp8YqF9Lw== dependencies: "@types/chai" "*" @@ -3019,17 +3118,17 @@ fancy-test@^2.0.31: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -3040,48 +3139,53 @@ fast-glob@^3.2.9, fast-glob@^3.3.0: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-levenshtein@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz" integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== dependencies: fastest-levenshtein "^1.0.7" -fastest-levenshtein@^1.0.16, fastest-levenshtein@^1.0.7: +fastest-levenshtein@^1.0.16: version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastest-levenshtein@^1.0.7: + version "1.0.16" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" fecha@^4.2.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== dependencies: node-domexception "^1.0.0" @@ -3089,21 +3193,28 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: figures@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0, figures@^3.2.0: +figures@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" figures@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" + resolved "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz" integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== dependencies: escape-string-regexp "^5.0.0" @@ -3111,86 +3222,94 @@ figures@^5.0.0: file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" file-type@^3.8.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== file-type@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== file-type@^6.1.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== filelist@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" filter-obj@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" + resolved "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz" integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng== -find-up@5.0.0, find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - locate-path "^6.0.0" + locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" -find-yarn-workspace-root2@1.2.16: - version "1.2.16" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" - integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== +find-up@^5.0.0, find-up@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - micromatch "^4.0.2" - pkg-dir "^4.2.0" + locate-path "^6.0.0" + path-exists "^4.0.0" find-yarn-workspace-root@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== dependencies: micromatch "^4.0.2" +find-yarn-workspace-root2@1.2.16: + version "1.2.16" + resolved "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz" + integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== + dependencies: + micromatch "^4.0.2" + pkg-dir "^4.2.0" + first-chunk-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" + resolved "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz" integrity sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg== dependencies: readable-stream "^2.0.2" flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -3198,29 +3317,29 @@ flat-cache@^3.0.4: flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== fn.name@1.x.x: version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" foreground-child@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== dependencies: cross-spawn "^7.0.0" @@ -3228,28 +3347,19 @@ foreground-child@^3.1.0: formdata-polyfill@^4.0.10: version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== dependencies: fetch-blob "^3.1.2" fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -3258,16 +3368,26 @@ fs-extra@^10.0.0: fs-extra@^8.1: version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0, fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.1: version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -3275,48 +3395,62 @@ fs-extra@^9.0, fs-extra@^9.0.1, fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-minipass@^3.0.0, fs-minipass@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz" integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== dependencies: minipass "^5.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + 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.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - fsu@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/fsu/-/fsu-1.1.1.tgz#bd36d3579907c59d85b257a75b836aa9e0c31834" + resolved "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz" integrity sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== fuzzy@^0.1.3: version "0.1.3" - resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" + resolved "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz" integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== gauge@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -3331,7 +3465,7 @@ gauge@^3.0.0: gauge@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -3345,7 +3479,7 @@ gauge@^4.0.3: gauge@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" + resolved "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz" integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -3359,17 +3493,17 @@ gauge@^5.0.0: get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + version "2.0.2" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" @@ -3379,17 +3513,17 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-stdin@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== get-stream@^2.2.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== dependencies: object-assign "^4.0.1" @@ -3397,57 +3531,45 @@ get-stream@^2.2.0: get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== github-slugger@^1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== github-username@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/github-username/-/github-username-6.0.0.tgz#d543eced7295102996cd8e4e19050ebdcbe60658" + resolved "https://registry.npmjs.org/github-username/-/github-username-6.0.0.tgz" integrity sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ== dependencies: "@octokit/rest" "^18.0.6" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^10.2.2, glob@^10.2.7: +glob@^10.2.2: version "10.3.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz" integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw== dependencies: foreground-child "^3.1.0" @@ -3456,9 +3578,18 @@ glob@^10.2.2, glob@^10.2.7: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" +glob@^10.2.7: + version "10.2.7" + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + 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.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -3470,7 +3601,7 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: glob@^8.0.1: version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" @@ -3479,16 +3610,40 @@ 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.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.1.0: +globby@^11.0.1: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -3500,7 +3655,7 @@ globby@^11.0.1, globby@^11.1.0: globby@^13.1.4: version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" @@ -3511,14 +3666,14 @@ globby@^13.1.4: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" got@^11: version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" @@ -3535,22 +3690,22 @@ got@^11: graceful-fs@^4.1.10, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== grouped-queue@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-2.0.0.tgz#a2c6713f2171e45db2c300a3a9d7c119d694dac8" + resolved "https://registry.npmjs.org/grouped-queue/-/grouped-queue-2.0.0.tgz" integrity sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw== handlebars@4.7.7: version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" @@ -3562,58 +3717,58 @@ handlebars@4.7.7: has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" he@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== header-case@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz" integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== dependencies: capital-case "^1.0.4" @@ -3621,31 +3776,31 @@ header-case@^2.0.4: hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz" integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== dependencies: lru-cache "^7.5.1" http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-call@^5.2.2: version "5.3.0" - resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" + resolved "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz" integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== dependencies: content-type "^1.0.4" @@ -3657,7 +3812,7 @@ http-call@^5.2.2: http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -3666,7 +3821,7 @@ http-proxy-agent@^4.0.1: http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -3675,7 +3830,7 @@ http-proxy-agent@^5.0.0: http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== dependencies: quick-lru "^5.1.1" @@ -3683,7 +3838,7 @@ http2-wrapper@^1.0.0-beta.5.2: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3691,77 +3846,82 @@ https-proxy-agent@^5.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== human-signals@^4.3.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" hyperlinker@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + resolved "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +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.2.1: +ieee754@^1.1.4: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + 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.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== ignore-walk@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz" integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== dependencies: minimatch "^3.0.4" ignore-walk@^6.0.0: version "6.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz" integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== dependencies: minimatch "^9.0.0" ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -3769,40 +3929,40 @@ import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^4.1.0, ini@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + resolved "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz" integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== init-package-json@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz" integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== dependencies: npm-package-arg "^10.0.0" @@ -3815,7 +3975,7 @@ init-package-json@^5.0.0: inquirer-autocomplete-prompt@^1.0.2: version "1.4.0" - resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz#e767592f747e3d5bb6336fe71fb4094352e4c317" + resolved "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz" integrity sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw== dependencies: ansi-escapes "^4.3.1" @@ -3826,7 +3986,7 @@ inquirer-autocomplete-prompt@^1.0.2: inquirer-fuzzy-path@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz#9bc51dc47d7d9c7eb53daac7fd7c9e615eb040c5" + resolved "https://registry.npmjs.org/inquirer-fuzzy-path/-/inquirer-fuzzy-path-2.3.0.tgz" integrity sha512-zfHC/97GSkxKKM7IctZM22x1sVi+FYBh9oaHTmI7Er/GKFpNykUgtviTmqqpiFQs5yJoSowxbT0PHy6N+H+QRg== dependencies: ansi-styles "^3.2.1" @@ -3835,30 +3995,9 @@ inquirer-fuzzy-path@^2.3.0: inquirer-autocomplete-prompt "^1.0.2" strip-ansi "^4.0.0" -inquirer@9.2.8: - version "9.2.8" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.2.8.tgz#35481704912c5a15985c380fd5493a8e6651b14e" - integrity sha512-SJ0fVfgIzZL1AD6WvFhivlh5/3hN6WeAvpvPrpPXH/8MOcQHeXhinmSm5CDJNRC2Q+sLh9YJ5k8F8/5APMXSfw== - dependencies: - ansi-escapes "^4.3.2" - chalk "^5.3.0" - cli-cursor "^3.1.0" - cli-width "^4.0.0" - external-editor "^3.0.3" - figures "^5.0.0" - lodash "^4.17.21" - mute-stream "1.0.0" - ora "^5.4.1" - run-async "^3.0.0" - rxjs "^7.8.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - through "^2.3.6" - wrap-ansi "^6.0.1" - -inquirer@^6.0.0: +"inquirer@^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", inquirer@^6.0.0: version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== dependencies: ansi-escapes "^3.2.0" @@ -3877,7 +4016,7 @@ inquirer@^6.0.0: inquirer@^8.0.0: version "8.2.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== dependencies: ansi-escapes "^4.2.1" @@ -3896,24 +4035,45 @@ inquirer@^8.0.0: through "^2.3.6" wrap-ansi "^7.0.0" +inquirer@9.2.8: + version "9.2.8" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.2.8.tgz" + integrity sha512-SJ0fVfgIzZL1AD6WvFhivlh5/3hN6WeAvpvPrpPXH/8MOcQHeXhinmSm5CDJNRC2Q+sLh9YJ5k8F8/5APMXSfw== + dependencies: + ansi-escapes "^4.3.2" + chalk "^5.3.0" + cli-cursor "^3.1.0" + cli-width "^4.0.0" + external-editor "^3.0.3" + figures "^5.0.0" + lodash "^4.17.21" + mute-stream "1.0.0" + ora "^5.4.1" + run-async "^3.0.0" + rxjs "^7.8.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + through "^2.3.6" + wrap-ansi "^6.0.1" + interpret@^1.0.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== ip-regex@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz" integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== ip@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== is-arguments@^1.0.4: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" @@ -3921,227 +4081,237 @@ is-arguments@^1.0.4: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-callable@^1.1.3: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-cidr@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + resolved "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== dependencies: cidr-regex "^3.1.1" is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" is-docker@^2.0.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-docker@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-error-instance@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-error-instance/-/is-error-instance-2.0.0.tgz#dd8ab9ed2a9e4658f3a6e3e857e4963fd733b106" + resolved "https://registry.npmjs.org/is-error-instance/-/is-error-instance-2.0.0.tgz" integrity sha512-5RuM+oFY0P5MRa1nXJo6IcTx9m2VyXYhRtb4h0olsi2GHci4bqZ6akHk+GmCYvDrAR9yInbiYdr2pnoqiOMw/Q== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-fullwidth-code-point@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== is-generator-function@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: has-tostringtag "^1.0.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-inside-container@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== dependencies: is-docker "^3.0.0" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-interactive@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-natural-number@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^2.0.0, is-plain-obj@^2.1.0: +is-plain-obj@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-plain-obj@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-retry-allowed@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-scoped@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-2.1.0.tgz#fef0713772658bdf5bee418608267ddae6d3566d" + resolved "https://registry.npmjs.org/is-scoped/-/is-scoped-2.1.0.tgz" integrity sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ== dependencies: scoped-regex "^2.0.0" is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-typed-array@^1.1.3: version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: which-typed-array "^1.1.11" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + 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, is-unicode-supported@^1.2.0: +is-unicode-supported@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + 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: + 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-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isbinaryfile@^4.0.10: version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== isbinaryfile@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz" integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jackspeak@^2.0.3: version "2.2.2" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.2.tgz#707c62733924b8dc2a0a629dc6248577788b5385" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz" integrity sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg== dependencies: "@isaacs/cliui" "^8.0.2" @@ -4150,7 +4320,7 @@ jackspeak@^2.0.3: jake@^10.8.5: version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz" integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" @@ -4160,86 +4330,94 @@ jake@^10.8.5: jmespath@0.16.0: version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz" integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@^3.13.0: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: - argparse "^2.0.1" + argparse "^1.0.7" + esprima "^4.0.0" -js-yaml@^3.13.0, js-yaml@^3.14.1: +js-yaml@^3.14.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.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== + dependencies: + argparse "^2.0.1" + json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + 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-parse-even-better-errors@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz" integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-nice@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -4248,39 +4426,39 @@ jsonfile@^6.0.1: jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== just-diff-apply@^5.2.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz" integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== just-diff@^5.0.1: version "5.2.0" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz" integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== just-diff@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== keyv@^4.0.0: version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz" integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== dependencies: json-buffer "3.0.1" kuler@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -4288,7 +4466,7 @@ levn@^0.4.1: libnpmaccess@^7.0.2: version "7.0.2" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz" integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== dependencies: npm-package-arg "^10.1.0" @@ -4296,7 +4474,7 @@ libnpmaccess@^7.0.2: libnpmdiff@^5.0.19: version "5.0.19" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.19.tgz#c56a8b1fcd7690f12e527c0ab21dbdbd259c27fe" + resolved "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-5.0.19.tgz" integrity sha512-caqIA7SzPeyqOn55GodejyEJRIXaFnzuqxrO9uyXtH4soom4wjDAkU97L1WrBSuVtDk3IZQD72daVeT2GqHSjA== dependencies: "@npmcli/arborist" "^6.3.0" @@ -4311,7 +4489,7 @@ libnpmdiff@^5.0.19: libnpmexec@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.3.tgz#f7ea9c028443d890297e1bbe2d5605f68b118470" + resolved "https://registry.npmjs.org/libnpmexec/-/libnpmexec-6.0.3.tgz" integrity sha512-E87xEzxChUe0qZgoqht5D5t13B876rPoTD877v9ZUSMztBFpuChQn5UNO3z5NaeBpEwWq/BAnQfMYRWR6sVAZA== dependencies: "@npmcli/arborist" "^6.3.0" @@ -4328,14 +4506,14 @@ libnpmexec@^6.0.3: libnpmfund@^4.0.19: version "4.0.19" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.0.19.tgz#ec615b9a5fb996185fca132420b6be265dc485f1" + resolved "https://registry.npmjs.org/libnpmfund/-/libnpmfund-4.0.19.tgz" integrity sha512-g2XV/oqBLo0Mau/nmqvIoNHRmAQqzSvSjSR9npO0+buEqGmyRHDeQJKDI3RxpLcQgd0IuNNAoTjXXpoKcX90EQ== dependencies: "@npmcli/arborist" "^6.3.0" libnpmhook@^9.0.3: version "9.0.3" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-9.0.3.tgz#5dbd6a146feb7e11993d36a26f750ae2347bb1d9" + resolved "https://registry.npmjs.org/libnpmhook/-/libnpmhook-9.0.3.tgz" integrity sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw== dependencies: aproba "^2.0.0" @@ -4343,7 +4521,7 @@ libnpmhook@^9.0.3: libnpmorg@^5.0.4: version "5.0.4" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-5.0.4.tgz#94eec2b84fbef736457eb27894c972ae6f5cac82" + resolved "https://registry.npmjs.org/libnpmorg/-/libnpmorg-5.0.4.tgz" integrity sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw== dependencies: aproba "^2.0.0" @@ -4351,7 +4529,7 @@ libnpmorg@^5.0.4: libnpmpack@^5.0.19: version "5.0.19" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.19.tgz#e9790ebbcb078469d59dbb7e5ee7defe3039cc22" + resolved "https://registry.npmjs.org/libnpmpack/-/libnpmpack-5.0.19.tgz" integrity sha512-xxkROnxTZF3imCJ9ve+6ELtRYvOBMwvrKlMGJx6JhmvD5lqIPGOJpY8oY+w8XLmLX1N06scYuLonkFpF2ayrjQ== dependencies: "@npmcli/arborist" "^6.3.0" @@ -4361,7 +4539,7 @@ libnpmpack@^5.0.19: libnpmpublish@^7.5.0: version "7.5.0" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.5.0.tgz#a118c8fdc680947c960648ed8b4c94d15e42e0ab" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.5.0.tgz" integrity sha512-zctH6QcTJ093lpxmkufr2zr3AJ9V90hcRilDFNin6n91ODj+S28RdyMFFJpa9NwyztmyV2hlWLyZv0GaOQBDyA== dependencies: ci-info "^3.6.1" @@ -4375,14 +4553,14 @@ libnpmpublish@^7.5.0: libnpmsearch@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-6.0.2.tgz#b6a531a312855dd3bf84dd273b1033dd09b4cbec" + resolved "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-6.0.2.tgz" integrity sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g== dependencies: npm-registry-fetch "^14.0.3" libnpmteam@^5.0.3: version "5.0.3" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-5.0.3.tgz#196657e9d87c0cc914c44fee588ad2b838074a3c" + resolved "https://registry.npmjs.org/libnpmteam/-/libnpmteam-5.0.3.tgz" integrity sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA== dependencies: aproba "^2.0.0" @@ -4390,7 +4568,7 @@ libnpmteam@^5.0.3: libnpmversion@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-4.0.2.tgz#cad9cd1b287fcf9576a64edfe71491b49a65d06f" + resolved "https://registry.npmjs.org/libnpmversion/-/libnpmversion-4.0.2.tgz" integrity sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g== dependencies: "@npmcli/git" "^4.0.1" @@ -4401,12 +4579,12 @@ libnpmversion@^4.0.2: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== listr2@6.6.0: version "6.6.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.0.tgz#cb8a0f45fb93ae50c43fb34f934759f8de9395ce" + resolved "https://registry.npmjs.org/listr2/-/listr2-6.6.0.tgz" integrity sha512-qkLg7IeYcZGkxo5sZzl676xHwQzNZ8qAQLQSDMA88sLM1SDcabwyXD1mXHi/PGQHyt/mu81adJdkqsCSUSuQzQ== dependencies: cli-truncate "^3.1.0" @@ -4418,7 +4596,7 @@ listr2@6.6.0: load-json-file@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz" integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== dependencies: graceful-fs "^4.1.15" @@ -4429,7 +4607,7 @@ load-json-file@^5.3.0: load-yaml-file@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" + resolved "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz" integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== dependencies: graceful-fs "^4.1.5" @@ -4439,56 +4617,56 @@ load-yaml-file@^0.2.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash-es@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.isempty@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" + resolved "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz" integrity sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg== lodash.isfunction@^3.0.9: version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== lodash.isobject@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + resolved "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz" integrity sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0, log-symbols@^4.0.0, log-symbols@^4.1.0: +log-symbols@^4.0.0, log-symbols@^4.1.0, log-symbols@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -4496,7 +4674,7 @@ log-symbols@4.1.0, log-symbols@^4.0.0, log-symbols@^4.1.0: log-symbols@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz" integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== dependencies: chalk "^5.0.0" @@ -4504,7 +4682,7 @@ log-symbols@^5.1.0: log-update@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + resolved "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz" integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== dependencies: ansi-escapes "^5.0.0" @@ -4515,7 +4693,7 @@ log-update@^5.0.1: logform@^2.3.2, logform@^2.4.0, logform@^2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b" + resolved "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz" integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg== dependencies: "@colors/colors" "1.5.0" @@ -4527,62 +4705,65 @@ logform@^2.3.2, logform@^2.4.0, logform@^2.5.1: loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" loupe@^2.3.1: version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz" integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== "lru-cache@^9.1.1 || ^10.0.0": version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz" integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== +lru-cache@^9.1.1: + version "9.1.1" + make-dir@^1.0.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^10.0.1: version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" @@ -4604,7 +4785,7 @@ make-fetch-happen@^10.0.1: make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, make-fetch-happen@^11.1.1: version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== dependencies: agentkeepalive "^4.2.1" @@ -4625,7 +4806,7 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, make-fetch-happen@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== dependencies: agentkeepalive "^4.1.3" @@ -4647,7 +4828,7 @@ make-fetch-happen@^9.1.0: "mem-fs-editor@^8.1.2 || ^9.0.0", mem-fs-editor@^9.0.0: version "9.7.0" - resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-9.7.0.tgz#dbb458b8acb885c84013645e93f71aa267a7fdf6" + resolved "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-9.7.0.tgz" integrity sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg== dependencies: binaryextensions "^4.16.0" @@ -4661,9 +4842,9 @@ make-fetch-happen@^9.1.0: normalize-path "^3.0.0" textextensions "^5.13.0" -"mem-fs@^1.2.0 || ^2.0.0": +"mem-fs@^1.2.0 || ^2.0.0", mem-fs@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-2.3.0.tgz#d38bdd729ab0316bfb56d0d0ff669f91e7078463" + resolved "https://registry.npmjs.org/mem-fs/-/mem-fs-2.3.0.tgz" integrity sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw== dependencies: "@types/node" "^15.6.2" @@ -4673,7 +4854,7 @@ make-fetch-happen@^9.1.0: merge-error-cause@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/merge-error-cause/-/merge-error-cause-4.0.1.tgz#680a9fc87477805127edaca5da2ca1d85ecd06cc" + resolved "https://registry.npmjs.org/merge-error-cause/-/merge-error-cause-4.0.1.tgz" integrity sha512-fTPQshSNjhq6BGvoe5F6xezzcWTn98rog8Ra0gJ0jqgwZXizPNRyg/pjhWX5+pXYanecSPUXa17uEM/RwZfKXw== dependencies: normalize-exception "^3.0.0" @@ -4683,17 +4864,17 @@ merge-error-cause@^4.0.1: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -4701,79 +4882,79 @@ micromatch@^4.0.2, micromatch@^4.0.4: mimic-fn@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== mimic-response@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^7.2.0: version "7.4.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz" integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== dependencies: brace-expansion "^2.0.1" minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== dependencies: minipass "^3.1.0" @@ -4784,7 +4965,7 @@ minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: minipass-fetch@^2.0.3: version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" @@ -4795,7 +4976,7 @@ minipass-fetch@^2.0.3: minipass-fetch@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz" integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== dependencies: minipass "^5.0.0" @@ -4806,14 +4987,14 @@ minipass-fetch@^3.0.0: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-json-stream@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: jsonparse "^1.3.1" @@ -4821,38 +5002,41 @@ minipass-json-stream@^1.0.1: minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "7.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e" + 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" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -4860,7 +5044,7 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: mkdirp-infer-owner@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== dependencies: chownr "^2.0.0" @@ -4869,24 +5053,24 @@ mkdirp-infer-owner@^2.0.0: mkdirp@^0.5.1: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mocha-suppress-logs@0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/mocha-suppress-logs/-/mocha-suppress-logs-0.3.1.tgz#e0fb454daea9e65e4aced488c26e5000691ed598" + resolved "https://registry.npmjs.org/mocha-suppress-logs/-/mocha-suppress-logs-0.3.1.tgz" integrity sha512-Iu6jyTguAtFzmt7l4Agfnve0v+cQNbH92iMau1kjWwom7MNn18/Mzo1EaVhwDrH24cQ87RDKAMse2rDUkuXy8A== -mocha@10.2.0: +"mocha@^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X", mocha@>=7, mocha@10.2.0: version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz" integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: ansi-colors "4.1.1" @@ -4913,7 +5097,7 @@ mocha@10.2.0: mochawesome-report-generator@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz#65a30a11235ba7a68e1cf0ca1df80d764b93ae78" + resolved "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz" integrity sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg== dependencies: chalk "^4.1.2" @@ -4931,7 +5115,7 @@ mochawesome-report-generator@^6.2.0: mochawesome@7.1.3: version "7.1.3" - resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-7.1.3.tgz#07b358138f37f5b07b51a1b255d84babfa36fa83" + resolved "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz" integrity sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ== dependencies: chalk "^4.1.2" @@ -4947,36 +5131,36 @@ mochawesome@7.1.3: mock-socket@^9.2.1: version "9.2.1" - resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.2.1.tgz#cc9c0810aa4d0afe02d721dcb2b7e657c00e2282" + resolved "https://registry.npmjs.org/mock-socket/-/mock-socket-9.2.1.tgz" integrity sha512-aw9F9T9G2zpGipLLhSNh6ZpgUyUl4frcVmRN08uE1NWPWg43Wx6+sGPDbQ7E5iFZZDJW5b5bypMeAEHqTbIFag== mock-stdin@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/mock-stdin/-/mock-stdin-1.0.0.tgz#efcfaf4b18077e14541742fd758b9cae4e5365ea" + resolved "https://registry.npmjs.org/mock-stdin/-/mock-stdin-1.0.0.tgz" integrity sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q== modern-errors-bugs@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/modern-errors-bugs/-/modern-errors-bugs-4.0.0.tgz#ffec6556becb3c044094674c8583bb39cad8929f" + resolved "https://registry.npmjs.org/modern-errors-bugs/-/modern-errors-bugs-4.0.0.tgz" integrity sha512-kFKGiT1JtXreUOs6lQTTElIx1g/ZRZOsnI+vfZWCC7GRCgZQysmhXwN+7ypKqM/j3LNJbbSub2NI71ZZAUlkjw== modern-errors-clean@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/modern-errors-clean/-/modern-errors-clean-5.0.0.tgz#999336e369d347b90f7b0c7d428c1a6cf887f8c2" + resolved "https://registry.npmjs.org/modern-errors-clean/-/modern-errors-clean-5.0.0.tgz" integrity sha512-rlU1Ii02QO4f7+4Tq4t2Zm7KRfs6zrMDJUgI5FlgNyX0ZADZ45ItJzVBUALRCPcQGQYLDUBNm82u78+Qvxx0BQ== dependencies: clean-stack "^5.1.0" modern-errors-winston@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/modern-errors-winston/-/modern-errors-winston-4.0.0.tgz#e2ec4a3323376a912a28c7a07b32c810a4842436" + resolved "https://registry.npmjs.org/modern-errors-winston/-/modern-errors-winston-4.0.0.tgz" integrity sha512-dXpOZkoCaPjypN9kjzPpAr4xEJvNkNMUytmJJaQwqBeWMsToB8mIkngsOAnrJqeXOOIgh/JrUMw5/TBhbaeO7A== dependencies: winston-error-format "^2.0.0" modern-errors@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/modern-errors/-/modern-errors-6.0.0.tgz#f94da0948cc04af32c4557d1247af23773002c08" + resolved "https://registry.npmjs.org/modern-errors/-/modern-errors-6.0.0.tgz" integrity sha512-IgtbY9ITQfbtZUdoIiqOwReV+Z2iL82OtwWTNV9cusKT/SvNivIAXKyGjEGcoCpLc+32UZp0DuqXViIDAG44Zg== dependencies: error-class-utils "^3.0.0" @@ -4989,19 +5173,19 @@ 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: + 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.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multimatch@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" @@ -5010,54 +5194,59 @@ multimatch@^5.0.0: arrify "^2.0.1" minimatch "^3.0.4" +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + mute-stream@0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@1.0.0, mute-stream@~1.0.0: +mute-stream@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== nanoid@3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== natural-orderby@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" + resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz" integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== negotiator@^0.6.2, negotiator@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.6.0: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" @@ -5065,7 +5254,7 @@ no-case@^3.0.4: nock@^13.3.1, nock@^13.3.2: version "13.3.2" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.3.2.tgz#bfa6be92d37f744b1b758ea89b1105cdaf5c8b3f" + resolved "https://registry.npmjs.org/nock/-/nock-13.3.2.tgz" integrity sha512-CwbljitiWJhF1gL83NbanhoKs1l23TDlRioNraPTZrzZIEooPemrHRj5m0FZCPkB1ecdYCSWWGcHysJgX/ngnQ== dependencies: debug "^4.1.0" @@ -5075,24 +5264,24 @@ nock@^13.3.1, nock@^13.3.2: node-domexception@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-downloader-helper@2.1.9: version "2.1.9" - resolved "https://registry.yarnpkg.com/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz#a59ee7276b2bf708bbac2cc5872ad28fc7cd1b0e" + resolved "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz" integrity sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA== node-fetch@^2.6.7: version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz" integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== dependencies: whatwg-url "^5.0.0" node-fetch@^3.3.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz" integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: data-uri-to-buffer "^4.0.0" @@ -5101,7 +5290,7 @@ node-fetch@^3.3.1: node-gyp@^8.2.0: version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: env-paths "^2.2.0" @@ -5117,7 +5306,7 @@ node-gyp@^8.2.0: node-gyp@^9.0.0, node-gyp@^9.4.0: version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz" integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== dependencies: env-paths "^2.2.0" @@ -5134,7 +5323,7 @@ node-gyp@^9.0.0, node-gyp@^9.4.0: nodemon@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.0.1.tgz#affe822a2c5f21354466b2fc8ae83277d27dadc7" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz" integrity sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw== dependencies: chokidar "^3.5.2" @@ -5150,35 +5339,35 @@ nodemon@^3.0.1: nopt@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" nopt@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: abbrev "^1.0.0" nopt@^7.0.0, nopt@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz" integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== dependencies: abbrev "^2.0.0" nopt@~1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" normalize-exception@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-exception/-/normalize-exception-3.0.0.tgz#dd91f5a15fe2807c0c1f59c5942b91b439767c4b" + resolved "https://registry.npmjs.org/normalize-exception/-/normalize-exception-3.0.0.tgz" integrity sha512-SMZtWSLjls45KBgwvS2jWyXLtOI9j90JyQ6tJstl91Gti4W7QwZyF/nWwlFRz/Cx4Gy70DAtLT0EzXYXcPJJUw== dependencies: is-error-instance "^2.0.0" @@ -5186,7 +5375,7 @@ normalize-exception@^3.0.0: normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -5196,7 +5385,7 @@ normalize-package-data@^2.5.0: normalize-package-data@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -5206,7 +5395,7 @@ normalize-package-data@^3.0.3: normalize-package-data@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz" integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== dependencies: hosted-git-info "^6.0.0" @@ -5216,65 +5405,65 @@ normalize-package-data@^5.0.0: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== npm-audit-report@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95" + resolved "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-5.0.0.tgz" integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw== npm-bundled@^1.1.1: version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" npm-bundled@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz" integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== dependencies: npm-normalize-package-bin "^3.0.0" npm-install-checks@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz" integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== dependencies: semver "^7.1.1" npm-install-checks@^6.0.0, npm-install-checks@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz" integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== dependencies: semver "^7.1.1" npm-normalize-package-bin@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-normalize-package-bin@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== npm-normalize-package-bin@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== dependencies: hosted-git-info "^6.0.0" @@ -5284,7 +5473,7 @@ npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== dependencies: hosted-git-info "^4.0.1" @@ -5293,7 +5482,7 @@ npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: npm-packlist@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz" integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== dependencies: glob "^7.1.6" @@ -5303,14 +5492,14 @@ npm-packlist@^3.0.0: npm-packlist@^7.0.0: version "7.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz" integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: ignore-walk "^6.0.0" npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== dependencies: npm-install-checks "^4.0.0" @@ -5318,9 +5507,9 @@ 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, npm-pick-manifest@^8.0.1: +npm-pick-manifest@^8.0.0: version "8.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + 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" @@ -5328,9 +5517,17 @@ npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: npm-package-arg "^10.0.0" semver "^7.3.5" +npm-pick-manifest@^8.0.1: + version "8.0.1" + 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-profile@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663" + resolved "https://registry.npmjs.org/npm-profile/-/npm-profile-7.0.1.tgz" integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ== dependencies: npm-registry-fetch "^14.0.0" @@ -5338,7 +5535,7 @@ npm-profile@^7.0.1: npm-registry-fetch@^12.0.0, npm-registry-fetch@^12.0.1: version "12.0.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz#ae583bb3c902a60dae43675b5e33b5b1f6159f1e" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz" integrity sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA== dependencies: make-fetch-happen "^10.0.1" @@ -5350,7 +5547,7 @@ npm-registry-fetch@^12.0.0, npm-registry-fetch@^12.0.1: npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: version "14.0.5" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz" integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== dependencies: make-fetch-happen "^11.0.0" @@ -5363,26 +5560,26 @@ npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0 npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npm-run-path@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== dependencies: path-key "^4.0.0" npm-user-validate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6" + resolved "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.0.tgz" integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== npm@^9.7.2: version "9.8.1" - resolved "https://registry.yarnpkg.com/npm/-/npm-9.8.1.tgz#b8f070cc770128b38017160491504184863329f0" + resolved "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz" integrity sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" @@ -5456,7 +5653,7 @@ npm@^9.7.2: npmlog@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== dependencies: are-we-there-yet "^2.0.0" @@ -5466,7 +5663,7 @@ npmlog@^5.0.1: npmlog@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -5476,7 +5673,7 @@ npmlog@^6.0.0: npmlog@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz" integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== dependencies: are-we-there-yet "^4.0.0" @@ -5486,22 +5683,22 @@ npmlog@^7.0.1: number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-treeify@^1.1.33: version "1.1.33" - resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" + resolved "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz" integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== oclif@3.10.0: version "3.10.0" - resolved "https://registry.yarnpkg.com/oclif/-/oclif-3.10.0.tgz#edfe473d5195603f1a689eb9aefead236c302ae1" + resolved "https://registry.npmjs.org/oclif/-/oclif-3.10.0.tgz" integrity sha512-Kf/nL7GrfezePsZGQytbPJG1EGNFRAG+lC6NhYqPOgeBIGppLuQDg6vO9wz0QRoijSJv/Yf4wCe2URMoCFtBNw== dependencies: "@oclif/core" "^2.9.4" @@ -5526,42 +5723,42 @@ oclif@3.10.0: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" onetime@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== dependencies: mimic-fn "^1.0.0" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" onetime@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" open@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + resolved "https://registry.npmjs.org/open/-/open-9.1.0.tgz" integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== dependencies: default-browser "^4.0.0" @@ -5571,12 +5768,12 @@ open@^9.1.0: opener@^1.5.2: version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== optionator@^0.9.3: version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: "@aashutoshrathi/word-wrap" "^1.2.3" @@ -5586,24 +5783,9 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -ora@6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-6.3.1.tgz#a4e9e5c2cf5ee73c259e8b410273e706a2ad3ed6" - integrity sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ== - dependencies: - chalk "^5.0.0" - cli-cursor "^4.0.0" - cli-spinners "^2.6.1" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.1.0" - stdin-discarder "^0.1.0" - strip-ansi "^7.0.1" - wcwidth "^1.0.1" - ora@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -5616,59 +5798,74 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" +ora@6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz" + integrity sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ== + dependencies: + chalk "^5.0.0" + cli-cursor "^4.0.0" + cli-spinners "^2.6.1" + is-interactive "^2.0.0" + is-unicode-supported "^1.1.0" + log-symbols "^5.1.0" + stdin-discarder "^0.1.0" + strip-ansi "^7.0.1" + wcwidth "^1.0.1" + os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-cancelable@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-queue@^6.6.2: version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" @@ -5676,14 +5873,14 @@ p-queue@^6.6.2: p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" p-transform@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/p-transform/-/p-transform-1.3.0.tgz#2da960ba92c6a56efbe75cbd1edf3ea7b3191049" + resolved "https://registry.npmjs.org/p-transform/-/p-transform-1.3.0.tgz" integrity sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg== dependencies: debug "^4.3.2" @@ -5691,12 +5888,12 @@ p-transform@^1.3.0: p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pacote@^12.0.0, pacote@^12.0.2: version "12.0.3" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.3.tgz#b6f25868deb810e7e0ddf001be88da2bcaca57c7" + resolved "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz" integrity sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow== dependencies: "@npmcli/git" "^2.1.0" @@ -5721,7 +5918,7 @@ pacote@^12.0.0, pacote@^12.0.2: pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: version "15.2.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + resolved "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz" integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== dependencies: "@npmcli/git" "^4.0.0" @@ -5745,17 +5942,17 @@ pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: pad-component@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac" + resolved "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz" integrity sha512-8EKVBxCRSvLnsX1p2LlSFSH3c2/wuhY9/BXXWu8boL78FbVKqn2L5SpURt1x5iw6Gq8PTqJ7MdPoe5nCtX3I+g== pako@^2.0.4: version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== param-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -5763,14 +5960,14 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-conflict-json@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== dependencies: json-parse-even-better-errors "^2.3.1" @@ -5779,7 +5976,7 @@ parse-conflict-json@^2.0.1: parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz" integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== dependencies: json-parse-even-better-errors "^3.0.0" @@ -5788,7 +5985,7 @@ parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" @@ -5796,7 +5993,7 @@ parse-json@^4.0.0: parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -5806,7 +6003,7 @@ parse-json@^5.0.0: pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -5814,7 +6011,7 @@ pascal-case@^3.1.2: password-prompt@^1.1.2: version "1.1.3" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" + resolved "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz" integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== dependencies: ansi-escapes "^4.3.2" @@ -5822,7 +6019,7 @@ password-prompt@^1.1.2: path-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + resolved "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz" integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== dependencies: dot-case "^3.0.4" @@ -5830,99 +6027,105 @@ path-case@^3.0.4: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.10.1: version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== dependencies: lru-cache "^9.1.1 || ^10.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-scurry@^1.7.0: + version "1.9.2" + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pathval@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== pend@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" postcss-selector-parser@^6.0.10: version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" @@ -5930,7 +6133,7 @@ postcss-selector-parser@^6.0.10: preferred-pm@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" + resolved "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz" integrity sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ== dependencies: find-up "^5.0.0" @@ -5940,64 +6143,69 @@ preferred-pm@^3.0.3: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" -prettier@3.0.0: +prettier@>=3.0.0, prettier@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz" integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== pretty-bytes@^5.3.0: version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== proc-log@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-1.0.0.tgz#0d927307401f69ed79341e83a0b2c9a13395eb77" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz" integrity sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg== proc-log@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz" integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.10: version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-all-reject-late@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== -promise-call-limit@^1.0.1, promise-call-limit@^1.0.2: +promise-call-limit@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz" + integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== + +promise-call-limit@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz" integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -6005,14 +6213,14 @@ promise-retry@^2.0.1: promzard@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + resolved "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz" integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== dependencies: read "^2.0.0" prop-types@^15.7.2: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -6021,77 +6229,77 @@ prop-types@^15.7.2: propagate@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + resolved "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - punycode@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + qrcode-terminal@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + resolved "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== querystring@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== read-cmd-shim@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== read-cmd-shim@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz" integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== dependencies: json-parse-even-better-errors "^2.3.0" @@ -6099,7 +6307,7 @@ read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json- read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: json-parse-even-better-errors "^3.0.0" @@ -6107,7 +6315,7 @@ read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: read-package-json@^6.0.0: version "6.0.4" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz" integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== dependencies: glob "^10.2.2" @@ -6117,7 +6325,7 @@ read-package-json@^6.0.0: read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -6126,7 +6334,7 @@ read-pkg-up@^7.0.1: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -6136,14 +6344,27 @@ read-pkg@^5.2.0: read@^2.0.0, read@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + resolved "https://registry.npmjs.org/read/-/read-2.1.0.tgz" integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== dependencies: mute-stream "~1.0.0" -readable-stream@^2.0.2, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.0.2: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^2.3.0, readable-stream@^2.3.5: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -6156,16 +6377,24 @@ readable-stream@^2.0.2, readable-stream@^2.3.0, readable-stream@^2.3.5: readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^4.1.0, readable-stream@^4.3.0: +readable-stream@^4.1.0: + version "4.4.0" + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + +readable-stream@^4.3.0: version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz" integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== dependencies: abort-controller "^3.0.0" @@ -6176,7 +6405,7 @@ readable-stream@^4.1.0, readable-stream@^4.3.0: readdir-scoped-modules@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== dependencies: debuglog "^1.0.1" @@ -6186,65 +6415,65 @@ readdir-scoped-modules@^1.1.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" rechoir@^0.6.2: version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" redefine-property@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/redefine-property/-/redefine-property-2.0.0.tgz#69adbaab3c98b149d5b2e1c397ba947112fbf498" + resolved "https://registry.npmjs.org/redefine-property/-/redefine-property-2.0.0.tgz" integrity sha512-7UfHFiHkePd9mb/vYMPYuAPjAa/77xGQ1S6laaWNQkz5gVJAtYpoWYQ5iFL/ZcDxXZVqnD7N4aFFnIn4T36Sbw== dependencies: is-plain-obj "^4.1.0" redeyed@~2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + resolved "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz" integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== dependencies: esprima "~4.0.0" regenerator-runtime@^0.13.11: version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== remove-trailing-separator@^1.0.1: version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== replace-ext@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== resolve-alpn@^1.0.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.1.6, resolve@^1.10.0: version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: is-core-module "^2.11.0" @@ -6253,14 +6482,14 @@ resolve@^1.1.6, resolve@^1.10.0: responselike@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" restore-cursor@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== dependencies: onetime "^2.0.0" @@ -6268,7 +6497,7 @@ restore-cursor@^2.0.0: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -6276,7 +6505,7 @@ restore-cursor@^3.1.0: restore-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: onetime "^5.1.0" @@ -6284,77 +6513,77 @@ restore-cursor@^4.0.0: retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" run-applescript@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz" integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== dependencies: execa "^5.0.0" run-async@^2.0.0, run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-async@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz" integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^6.4.0, rxjs@^6.6.2: version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" rxjs@^7.0.0, rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== 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: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + 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: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-value@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/safe-json-value/-/safe-json-value-2.0.1.tgz#05f133cedfe4ba72febb312379ee0fc2896c3846" + resolved "https://registry.npmjs.org/safe-json-value/-/safe-json-value-2.0.1.tgz" integrity sha512-vvoBxKVyksxwqzNDoD2vLVkcvbjYBFXS/CghUrFDsrP0wgTaw+/gIyOADNYa1vyPmICLUWH7RNh0FtwmFsEQCQ== dependencies: is-plain-obj "^4.1.0" @@ -6362,51 +6591,51 @@ safe-json-value@^2.0.1: safe-stable-stringify@^2.3.1: version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== - sax@>=0.6.0: version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +sax@1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" + integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== + scoped-regex@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-2.1.0.tgz#7b9be845d81fd9d21d1ec97c61a0b7cf86d2015f" + resolved "https://registry.npmjs.org/scoped-regex/-/scoped-regex-2.1.0.tgz" integrity sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ== seek-bzip@^1.0.5: version "1.0.6" - resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz" integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== dependencies: commander "^2.8.1" -"semver@2 || 3 || 4 || 5": - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.5.4, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@7.5.4: version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + sentence-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== dependencies: no-case "^3.0.4" @@ -6415,33 +6644,33 @@ sentence-case@^3.0.4: serialize-javascript@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-error-class@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-error-class/-/set-error-class-2.0.0.tgz#d05a0690677c21f646340683a03ebfb6f1e5e33e" + resolved "https://registry.npmjs.org/set-error-class/-/set-error-class-2.0.0.tgz" integrity sha512-ZBXDmoj+bWd+vJbA8VZE/aVQ6NL5iu2AVMtUyVIVXVMEi4oozCGPZAPjaJJZ4k8koLYb0OAFcyIRb0T6XiCuXg== dependencies: normalize-exception "^3.0.0" set-error-message@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/set-error-message/-/set-error-message-2.0.1.tgz#da99f3c17310bebd22c1c7fa59c8634cf4bddd03" + resolved "https://registry.npmjs.org/set-error-message/-/set-error-message-2.0.1.tgz" integrity sha512-s/eeP0f4ed1S3fl0KbxZoy5Pbeg5D6Nbple9nut4VPwHTvEIk5r7vKq0FwjNjszdUPdlTrs4GJCOkWUqWeTeWg== dependencies: normalize-exception "^3.0.0" set-error-props@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/set-error-props/-/set-error-props-5.0.0.tgz#be822fe5006cbfafb1c277c1de36142b067c4fc5" + resolved "https://registry.npmjs.org/set-error-props/-/set-error-props-5.0.0.tgz" integrity sha512-AKeNtJ7f9HUzB9Vw9KWiKKe6NR5b8hJoVVnXGN+ZkEj0jTfM0ggL+I2O/14zfJn9lgUqGgMgyjjRhldp7eTpeA== dependencies: is-error-instance "^2.0.0" @@ -6450,31 +6679,31 @@ set-error-props@^5.0.0: set-error-stack@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-error-stack/-/set-error-stack-2.0.0.tgz#522dd8214af88a1dd718869261470e6f61788079" + resolved "https://registry.npmjs.org/set-error-stack/-/set-error-stack-2.0.0.tgz" integrity sha512-mABWr7mmaY1EVBMXWo32t6byRkKclJ3gipglE2+XGBZxDEk0+zVumRfWyAK3s/EB/TbbUm1Gp0H8VvqlFkMa+g== dependencies: normalize-exception "^3.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -shelljs@0.8.5, shelljs@^0.8.5: +shelljs@^0.8.5, shelljs@0.8.5: version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" @@ -6483,7 +6712,7 @@ shelljs@0.8.5, shelljs@^0.8.5: shx@0.3.4: version "0.3.4" - resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.4.tgz#74289230b4b663979167f94e1935901406e40f02" + resolved "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz" integrity sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g== dependencies: minimist "^1.2.3" @@ -6491,17 +6720,17 @@ shx@0.3.4: signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz" integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== -sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.7.0: +sigstore@^1.3.0: version "1.8.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.8.0.tgz#f790120697fa7c89f4418598ce59e638ff680aa5" + resolved "https://registry.npmjs.org/sigstore/-/sigstore-1.8.0.tgz" integrity sha512-ogU8qtQ3VFBawRJ8wjsBEX/vIFeHuGs1fm4jZtjWQwjo8pfAt7T/rh+udlAN4+QUe0IzA8qRSc/YZ7dHP6kh+w== dependencies: "@sigstore/bundle" "^1.0.0" @@ -6509,33 +6738,40 @@ sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.7.0: "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" +sigstore@^1.4.0, sigstore@^1.7.0: + version "1.7.0" + dependencies: + "@sigstore/protobuf-specs" "^0.1.0" + "@sigstore/tuf" "^1.0.1" + make-fetch-happen "^11.0.1" + simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" simple-update-notifier@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz" integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: semver "^7.5.3" slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -6544,7 +6780,7 @@ slice-ansi@^4.0.0: slice-ansi@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: ansi-styles "^6.0.0" @@ -6552,12 +6788,12 @@ slice-ansi@^5.0.0: smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== smoldot@1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-1.0.4.tgz#e4c38cedad68d699a11b5b9ce72bb75c891bfd98" + resolved "https://registry.npmjs.org/smoldot/-/smoldot-1.0.4.tgz" integrity sha512-N3TazI1C4GGrseFH/piWyZCCCRJTRx2QhDfrUKRT4SzILlW5m8ayZ3QTKICcz1C/536T9cbHHJyP7afxI6Mi1A== dependencies: pako "^2.0.4" @@ -6565,7 +6801,7 @@ smoldot@1.0.4: snake-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: dot-case "^3.0.4" @@ -6573,7 +6809,7 @@ snake-case@^3.0.4: socks-proxy-agent@^6.0.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== dependencies: agent-base "^6.0.2" @@ -6582,7 +6818,7 @@ socks-proxy-agent@^6.0.0: socks-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" @@ -6591,7 +6827,7 @@ socks-proxy-agent@^7.0.0: socks@^2.6.2: version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" @@ -6599,14 +6835,14 @@ socks@^2.6.2: sort-keys@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== dependencies: is-plain-obj "^2.0.0" source-map-support@^0.5.6: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -6614,17 +6850,17 @@ source-map-support@^0.5.6: source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spawn-command@^0.0.2-1: version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" @@ -6632,12 +6868,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -6645,58 +6881,72 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz" integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.4: version "10.0.4" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" + resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz" integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== dependencies: minipass "^5.0.0" ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" ssri@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== dependencies: minipass "^3.1.1" stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== stdin-discarder@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" + resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz" integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== dependencies: bl "^5.0.0" stdout-stderr@^0.1.9: version "0.1.13" - resolved "https://registry.yarnpkg.com/stdout-stderr/-/stdout-stderr-0.1.13.tgz#54e3450f3d4c54086a49c0c7f8786a44d1844b6f" + resolved "https://registry.npmjs.org/stdout-stderr/-/stdout-stderr-0.1.13.tgz" integrity sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA== dependencies: debug "^4.1.1" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -6705,89 +6955,108 @@ stdout-stderr@^0.1.9: string-width@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: +string-width@^5.0.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - safe-buffer "~5.1.0" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" strip-ansi@^5.1.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom-buf@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572" + resolved "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz" integrity sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ== dependencies: is-utf8 "^0.2.1" strip-bom-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" + resolved "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz" integrity sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w== dependencies: first-chunk-stream "^2.0.0" @@ -6795,72 +7064,86 @@ strip-bom-stream@^2.0.0: strip-bom@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== dependencies: is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-dirs@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== dependencies: is-natural-number "^4.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-json-comments@3.1.1, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1, strip-json-comments@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@8.1.1, supports-color@^8.1.0, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.0.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-color@^8.1.0, supports-color@^8.1.1, supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^9.4.0: version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== supports-hyperlinks@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" @@ -6868,12 +7151,12 @@ supports-hyperlinks@^2.2.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== synckit@^0.8.5: version "0.8.5" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + resolved "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz" integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== dependencies: "@pkgr/utils" "^2.3.1" @@ -6881,7 +7164,7 @@ synckit@^0.8.5: taketalk@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/taketalk/-/taketalk-1.0.0.tgz#b4d4f0deed206ae7df775b129ea2ca6de52f26dd" + resolved "https://registry.npmjs.org/taketalk/-/taketalk-1.0.0.tgz" integrity sha512-kS7E53It6HA8S1FVFBWP7HDwgTiJtkmYk7TsowGlizzVrivR1Mf9mgjXHY1k7rOfozRVMZSfwjB3bevO4QEqpg== dependencies: get-stdin "^4.0.1" @@ -6889,7 +7172,7 @@ taketalk@^1.0.0: tar-stream@^1.5.2: version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: bl "^1.0.0" @@ -6902,7 +7185,7 @@ tar-stream@^1.5.2: tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.13, tar@^6.1.15, tar@^6.1.2: version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== dependencies: chownr "^2.0.0" @@ -6914,114 +7197,119 @@ tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.13, tar@^6.1.15, tar@^6.1.2: tcomb-validation@^3.3.0: version "3.4.1" - resolved "https://registry.yarnpkg.com/tcomb-validation/-/tcomb-validation-3.4.1.tgz#a7696ec176ce56a081d9e019f8b732a5a8894b65" + resolved "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz" integrity sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA== dependencies: tcomb "^3.0.0" tcomb@^3.0.0, tcomb@^3.2.17: version "3.2.29" - resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-3.2.29.tgz#32404fe9456d90c2cf4798682d37439f1ccc386c" + resolved "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz" integrity sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ== text-hex@1.0.x: version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== textextensions@^5.12.0, textextensions@^5.13.0: version "5.16.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-5.16.0.tgz#57dd60c305019bba321e848b1fdf0f99bfa59ec1" + resolved "https://registry.npmjs.org/textextensions/-/textextensions-5.16.0.tgz" integrity sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw== through@^2.3.6, through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tiny-relative-date@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== titleize@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + resolved "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz" integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-buffer@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" touch@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== dependencies: nopt "~1.0.10" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== treeverse@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== treeverse@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz" integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== triple-beam@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== ts-api-utils@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz" integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== ts-mocha@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.0.0.tgz#41a8d099ac90dbbc64b06976c5025ffaebc53cb9" + resolved "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz" integrity sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw== dependencies: ts-node "7.0.1" optionalDependencies: tsconfig-paths "^3.5.0" -ts-node@10.9.1, ts-node@^10.9.1: +ts-node@^10.9.1, ts-node@10.9.1: version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -7040,7 +7328,7 @@ ts-node@10.9.1, ts-node@^10.9.1: ts-node@7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz" integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== dependencies: arrify "^1.0.0" @@ -7054,7 +7342,7 @@ ts-node@7.0.1: tsconfig-paths@^3.5.0: version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" @@ -7062,19 +7350,19 @@ tsconfig-paths@^3.5.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.6.1, tslib@^2, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.5.0, tslib@^2.5.3, tslib@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" - integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== - tslib@^1.9.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.5.0, tslib@^2.5.3, tslib@^2.6.0, tslib@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + tuf-js@^1.1.7: version "1.1.7" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + resolved "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz" integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== dependencies: "@tufjs/models" "1.0.4" @@ -7083,66 +7371,66 @@ tuf-js@^1.1.7: tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.3.0: version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-fest@^1.0.2: version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -typescript@5.1.6: +typescript@>=2.7, typescript@>=4.2.0, typescript@5.1.6: version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz" integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== uglify-js@^3.1.4: version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbzip2-stream@^1.0.9: version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== dependencies: buffer "^5.2.1" @@ -7150,95 +7438,95 @@ unbzip2-stream@^1.0.9: undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-filename@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== dependencies: unique-slug "^3.0.0" unique-filename@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: unique-slug "^4.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" unique-slug@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== dependencies: imurmurhash "^0.1.4" unique-slug@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: imurmurhash "^0.1.4" universal-user-agent@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== untildify@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== upper-case-first@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz" integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== dependencies: tslib "^2.0.3" upper-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz" integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== dependencies: tslib "^2.0.3" uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url@0.10.3: version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + resolved "https://registry.npmjs.org/url/-/url-0.10.3.tgz" integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== dependencies: punycode "1.3.2" @@ -7246,12 +7534,12 @@ url@0.10.3: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@^0.12.4: version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -7260,24 +7548,24 @@ util@^0.12.4: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - uuid@^8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== + v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -7285,26 +7573,26 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: validate-npm-package-name@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== dependencies: builtins "^1.0.3" validate-npm-package-name@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== dependencies: builtins "^5.0.0" validator@^13.6.0: version "13.9.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" + resolved "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz" integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== vinyl-file@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-3.0.0.tgz#b104d9e4409ffa325faadd520642d0a3b488b365" + resolved "https://registry.npmjs.org/vinyl-file/-/vinyl-file-3.0.0.tgz" integrity sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg== dependencies: graceful-fs "^4.1.2" @@ -7315,7 +7603,7 @@ vinyl-file@^3.0.0: vinyl@^2.0.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" + resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz" integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== dependencies: clone "^2.1.1" @@ -7327,34 +7615,41 @@ vinyl@^2.0.1: walk-up-path@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== walk-up-path@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz" integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== -wcwidth@^1.0.0, wcwidth@^1.0.1: +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" web-streams-polyfill@^3.0.3: version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -7362,7 +7657,7 @@ whatwg-url@^5.0.0: which-pm@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" + resolved "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz" integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== dependencies: load-yaml-file "^0.2.0" @@ -7370,7 +7665,7 @@ which-pm@2.0.0: which-typed-array@^1.1.11, which-typed-array@^1.1.2: version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz" integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" @@ -7381,35 +7676,35 @@ which-typed-array@^1.1.11, which-typed-array@^1.1.2: which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" which@^3.0.0, which@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + resolved "https://registry.npmjs.org/which/-/which-3.0.1.tgz" integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== dependencies: isexe "^2.0.0" wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" widest-line@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" winston-error-format@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/winston-error-format/-/winston-error-format-2.0.0.tgz#ad2b33520b8d1a77b6daf02667a31b3f48966eda" + resolved "https://registry.npmjs.org/winston-error-format/-/winston-error-format-2.0.0.tgz" integrity sha512-1/x1VfKXef/6wFFeMsrdbjz44lJGHJHzy/VQe89oDE4CikRQ5Y31ewNt4u9g4+lpEbacPOtNAF2MPS0vxc+ZRQ== dependencies: error-serializer "^6.0.1" @@ -7422,16 +7717,16 @@ winston-error-format@^2.0.0: winston-transport@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz" integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== dependencies: logform "^2.3.2" readable-stream "^3.6.0" triple-beam "^1.3.0" -winston@^3.10.0: +winston@^3.10.0, winston@^3.8.2: version "3.10.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.10.0.tgz#d033cb7bd3ced026fed13bf9d92c55b903116803" + resolved "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz" integrity sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g== dependencies: "@colors/colors" "1.5.0" @@ -7448,17 +7743,17 @@ winston@^3.10.0: wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== workerpool@6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -7467,7 +7762,7 @@ workerpool@6.2.1: wrap-ansi@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== dependencies: string-width "^1.0.1" @@ -7475,16 +7770,34 @@ wrap-ansi@^2.0.0: wrap-ansi@^6.0.1: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -7493,7 +7806,7 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: wrap-error-message@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/wrap-error-message/-/wrap-error-message-2.0.1.tgz#07809f302d9ad36ca93c20999bdbf63effb80d97" + resolved "https://registry.npmjs.org/wrap-error-message/-/wrap-error-message-2.0.1.tgz" integrity sha512-LrBMsWJ85HKjLs5ABjhZeW7mWpwsAoV16iqmhEXUf4Y2GvdLwrqK4FPGNNoAi7a20wy4wHU2ci61wQfcOgz/Kw== dependencies: normalize-exception "^3.0.0" @@ -7501,12 +7814,12 @@ wrap-error-message@^2.0.1: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" @@ -7514,7 +7827,7 @@ write-file-atomic@^4.0.0: write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: imurmurhash "^0.1.4" @@ -7522,12 +7835,12 @@ write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: ws@^8.13.0, ws@^8.8.1: version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== xml2js@0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz" integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== dependencies: sax ">=0.6.0" @@ -7535,42 +7848,42 @@ xml2js@0.5.0: xmlbuilder@~11.0.0: version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xtend@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + 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.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -7578,22 +7891,9 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yargs@^17.2.1, yargs@^17.3.1: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -7604,22 +7904,35 @@ yargs@^17.2.1, yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yarn@^1.22.18: version "1.22.19" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== yauzl@^2.4.2: version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -yeoman-environment@^3.15.1: +yeoman-environment@^3.15.1, yeoman-environment@^3.2.0: version "3.19.3" - resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-3.19.3.tgz#49c2339805fdf695fac42c88334a1daa94ee8b6c" + resolved "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-3.19.3.tgz" integrity sha512-/+ODrTUHtlDPRH9qIC0JREH8+7nsRcjDl3Bxn2Xo/rvAaVvixH5275jHwg0C85g4QsF4P6M2ojfScPPAl+pLAg== dependencies: "@npmcli/arborist" "^4.0.4" @@ -7662,7 +7975,7 @@ yeoman-environment@^3.15.1: yeoman-generator@^5.8.0: version "5.9.0" - resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-5.9.0.tgz#a83c9e391b0b3442536da677bc204cfa3f81f2c7" + resolved "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-5.9.0.tgz" integrity sha512-sN1e01Db4fdd8P/n/yYvizfy77HdbwzvXmPxps9Gwz2D24slegrkSn+qyj+0nmZhtFwGX2i/cH29QDrvAFT9Aw== dependencies: chalk "^4.1.0" @@ -7681,24 +7994,24 @@ yeoman-generator@^5.8.0: sort-keys "^4.2.0" text-table "^0.2.0" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - yn@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" + resolved "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz" integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yosay@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/yosay/-/yosay-2.0.2.tgz#a7017e764cd88d64a1ae64812201de5b157adf6d" + resolved "https://registry.npmjs.org/yosay/-/yosay-2.0.2.tgz" integrity sha512-avX6nz2esp7IMXGag4gu6OyQBsMh/SEn+ZybGu3yKPlOTE6z9qJrzG/0X5vCq/e0rPFy0CUYCze0G5hL310ibA== dependencies: ansi-regex "^2.0.0" From 0914aed04d0239be6c9b377001f07c26b28b7814 Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Mon, 12 Feb 2024 22:18:33 +0200 Subject: [PATCH 04/19] feat: Add faucet for Swanky node (#60) Co-authored-by: Igor Papandinas --- src/commands/account/balance.ts | 63 +++++++++++++++++++ src/commands/account/create.ts | 9 ++- src/commands/account/faucet.ts | 23 +++++++ src/commands/account/swankyAccountCommands.ts | 45 +++++++++++++ src/commands/contract/deploy.ts | 10 +-- src/commands/init/index.ts | 9 +-- src/lib/account.ts | 3 +- src/lib/consts.ts | 7 ++- src/lib/contractCall.ts | 10 +-- src/lib/substrate-api.ts | 34 +++++++++- src/lib/swankyCommand.ts | 15 ++++- 11 files changed, 199 insertions(+), 29 deletions(-) create mode 100644 src/commands/account/balance.ts create mode 100644 src/commands/account/faucet.ts create mode 100644 src/commands/account/swankyAccountCommands.ts diff --git a/src/commands/account/balance.ts b/src/commands/account/balance.ts new file mode 100644 index 00000000..4a9caf85 --- /dev/null +++ b/src/commands/account/balance.ts @@ -0,0 +1,63 @@ +import { Args } from "@oclif/core"; +import { ApiPromise } from "@polkadot/api"; +import type { AccountInfo, Balance as BalanceType } from "@polkadot/types/interfaces"; +import { ChainApi, resolveNetworkUrl } from "../../lib/index.js"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { InputError } from "../../lib/errors.js"; +import { formatBalance } from "@polkadot/util"; + +export class Balance extends SwankyCommand { + static description = "Balance of an account"; + + static args = { + alias: Args.string({ + name: "alias", + description: "Alias of account to be used", + }), + }; + async run(): Promise { + const { args } = await this.parse(Balance); + + if (!args.alias) { + throw new InputError( + "Missing argument! Please provide an alias account to get the balance from. Example usage: `swanky account balance `" + ); + } + + const accountData = this.findAccountByAlias(args.alias); + const networkUrl = resolveNetworkUrl(this.swankyConfig, ""); + + const api = (await this.spinner.runCommand(async () => { + const api = await ChainApi.create(networkUrl); + await api.start(); + return api.apiInst; + }, "Connecting to node")) as ApiPromise; + + const decimals = api.registry.chainDecimals[0]; + formatBalance.setDefaults({ unit: "UNIT", decimals }); + + const { nonce, data: balance } = await api.query.system.account( + accountData.address + ); + const { free, reserved, miscFrozen, feeFrozen } = balance; + + let frozen: BalanceType; + if (feeFrozen.gt(miscFrozen)) { + frozen = feeFrozen; + } else { + frozen = miscFrozen; + } + + const transferrableBalance = free.sub(frozen); + const totalBalance = free.add(reserved); + + console.log("Transferrable Balance:", formatBalance(transferrableBalance)); + if (!transferrableBalance.eq(totalBalance)) { + console.log("Total Balance:", formatBalance(totalBalance)); + console.log("Raw Balances:", balance.toHuman()); + } + console.log("Account Nonce:", nonce.toHuman()); + + await api.disconnect(); + } +} diff --git a/src/commands/account/create.ts b/src/commands/account/create.ts index 5c4fc4c4..a9000c4a 100644 --- a/src/commands/account/create.ts +++ b/src/commands/account/create.ts @@ -3,8 +3,9 @@ import chalk from "chalk"; import { ChainAccount, encrypt } from "../../lib/index.js"; import { AccountData } from "../../types/index.js"; import inquirer from "inquirer"; -import { SwankyCommand } from "../../lib/swankyCommand.js"; -export class CreateAccount extends SwankyCommand { +import { SwankyAccountCommand } from "./swankyAccountCommands.js"; + +export class CreateAccount extends SwankyAccountCommand { static description = "Create a new dev account in config"; static flags = { @@ -35,7 +36,7 @@ export class CreateAccount extends SwankyCommand { ); } - let tmpMnemonic = ""; + let tmpMnemonic: string; if (flags.generate) { tmpMnemonic = ChainAccount.generate(); console.log( @@ -84,5 +85,7 @@ export class CreateAccount extends SwankyCommand { accountData.alias )} stored to config` ); + + await this.performFaucetTransfer(accountData, true); } } diff --git a/src/commands/account/faucet.ts b/src/commands/account/faucet.ts new file mode 100644 index 00000000..02b6b965 --- /dev/null +++ b/src/commands/account/faucet.ts @@ -0,0 +1,23 @@ +import { Args } from "@oclif/core"; +import { SwankyAccountCommand } from "./swankyAccountCommands.js"; + +export class Faucet extends SwankyAccountCommand { + static description = "Transfer some tokens from faucet to an account"; + + static aliases = [`account:faucet`]; + + static args = { + alias: Args.string({ + name: "alias", + required: true, + description: "Alias of account to be used", + }), + }; + + async run(): Promise { + const { args } = await this.parse(Faucet); + + const accountData = this.findAccountByAlias(args.alias); + await this.performFaucetTransfer(accountData); + } +} diff --git a/src/commands/account/swankyAccountCommands.ts b/src/commands/account/swankyAccountCommands.ts new file mode 100644 index 00000000..b884f203 --- /dev/null +++ b/src/commands/account/swankyAccountCommands.ts @@ -0,0 +1,45 @@ +import { Command } from "@oclif/core"; +import chalk from "chalk"; +import { AccountData, ChainApi, resolveNetworkUrl } from "../../index.js"; +import { LOCAL_FAUCET_AMOUNT } from "../../lib/consts.js"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { ApiError } from "../../lib/errors.js"; + +export abstract class SwankyAccountCommand extends SwankyCommand { + async performFaucetTransfer(accountData: AccountData, canBeSkipped = false) { + let api: ChainApi | null = null; + try { + api = (await this.spinner.runCommand(async () => { + const networkUrl = resolveNetworkUrl(this.swankyConfig, ""); + const api = await ChainApi.create(networkUrl); + await api.start(); + return api; + }, "Connecting to node")) as ChainApi; + + if (api) + await this.spinner.runCommand( + async () => { + if (api) await api.faucet(accountData); + }, + `Transferring ${LOCAL_FAUCET_AMOUNT} units from faucet account to ${accountData.alias}`, + `Transferred ${LOCAL_FAUCET_AMOUNT} units from faucet account to ${accountData.alias}`, + `Failed to transfer ${LOCAL_FAUCET_AMOUNT} units from faucet account to ${accountData.alias}`, + true + ); + } catch (cause) { + if (cause instanceof Error) { + if (cause.message.includes('ECONNREFUSED') && canBeSkipped) { + this.warn(`Unable to connect to the node. Skipping faucet transfer for ${chalk.yellowBright(accountData.alias)}.`); + } else { + throw new ApiError("Error transferring tokens from faucet account", { cause }); + } + } else { + throw new ApiError("An unknown error occurred during faucet transfer", { cause: new Error(String(cause)) }); + } + } finally { + if (api) { + await api.disconnect(); + } + } + } +} diff --git a/src/commands/contract/deploy.ts b/src/commands/contract/deploy.ts index 7b2e5482..a0b2ca0a 100644 --- a/src/commands/contract/deploy.ts +++ b/src/commands/contract/deploy.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { writeJSON } from "fs-extra/esm"; import { cryptoWaitReady } from "@polkadot/util-crypto/crypto"; import { resolveNetworkUrl, ChainApi, ChainAccount, decrypt, AbiType } from "../../lib/index.js"; -import { AccountData, Encrypted } from "../../types/index.js"; +import { Encrypted } from "../../types/index.js"; import inquirer from "inquirer"; import chalk from "chalk"; import { Contract } from "../../lib/contract.js"; @@ -70,13 +70,7 @@ export class DeployContract extends SwankyCommand { ); } - const accountData = this.swankyConfig.accounts.find( - (account: AccountData) => account.alias === flags.account - ); - if (!accountData) { - throw new ConfigError("Provided account alias not found in swanky.config.json"); - } - + const accountData = this.findAccountByAlias(flags.account); const mnemonic = accountData.isDev ? (accountData.mnemonic as string) : decrypt( diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index e7141b40..21712eba 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -18,6 +18,7 @@ import { getTemplates, swankyNodeVersions, } from "../../lib/index.js"; import { + ALICE_URI, BOB_URI, DEFAULT_ASTAR_NETWORK_URL, DEFAULT_NETWORK_URL, DEFAULT_NODE_INFO, DEFAULT_SHIBUYA_NETWORK_URL, @@ -191,15 +192,15 @@ export class Init extends SwankyCommand { this.configBuilder.accounts = [ { alias: "alice", - mnemonic: "//Alice", + mnemonic: ALICE_URI, isDev: true, - address: new ChainAccount("//Alice").pair.address, + address: new ChainAccount(ALICE_URI).pair.address, }, { alias: "bob", - mnemonic: "//Bob", + mnemonic: BOB_URI, isDev: true, - address: new ChainAccount("//Bob").pair.address, + address: new ChainAccount(BOB_URI).pair.address, }, ]; diff --git a/src/lib/account.ts b/src/lib/account.ts index 04897451..dc529cb0 100644 --- a/src/lib/account.ts +++ b/src/lib/account.ts @@ -2,6 +2,7 @@ import { mnemonicGenerate } from "@polkadot/util-crypto"; import { Keyring } from "@polkadot/keyring"; import { KeyringPair } from "@polkadot/keyring/types"; import { ChainProperty, KeypairType } from "../types/index.js"; +import { KEYPAIR_TYPE } from "./consts.js"; interface IChainAccount { pair: KeyringPair; @@ -17,7 +18,7 @@ export class ChainAccount implements IChainAccount { return mnemonicGenerate(); } - constructor(mnemonic: string, type: KeypairType = "sr25519") { + constructor(mnemonic: string, type: KeypairType = KEYPAIR_TYPE) { this._keyringType = type; this._keyring = new Keyring({ type: type }); this._mnemonic = mnemonic; diff --git a/src/lib/consts.ts b/src/lib/consts.ts index ed9e063b..b9391283 100644 --- a/src/lib/consts.ts +++ b/src/lib/consts.ts @@ -1,5 +1,7 @@ import { swankyNodeVersions } from "./nodeInfo.js"; +export const DEFAULT_NODE_INFO = swankyNodeVersions.get("1.6.0")!; + export const DEFAULT_NETWORK_URL = "ws://127.0.0.1:9944"; export const DEFAULT_ASTAR_NETWORK_URL = "wss://rpc.astar.network"; export const DEFAULT_SHIDEN_NETWORK_URL = "wss://rpc.shiden.astar.network"; @@ -8,4 +10,7 @@ export const DEFAULT_SHIBUYA_NETWORK_URL = "wss://shibuya.public.blastapi.io"; export const ARTIFACTS_PATH = "artifacts"; export const TYPED_CONTRACTS_PATH = "typedContracts"; -export const DEFAULT_NODE_INFO = swankyNodeVersions.get("1.6.0")!; +export const LOCAL_FAUCET_AMOUNT = 100; +export const KEYPAIR_TYPE = "sr25519"; +export const ALICE_URI = "//Alice"; +export const BOB_URI = "//Bob"; diff --git a/src/lib/contractCall.ts b/src/lib/contractCall.ts index 246e97d0..9c9e0b2f 100644 --- a/src/lib/contractCall.ts +++ b/src/lib/contractCall.ts @@ -1,5 +1,5 @@ import { AbiType, ChainAccount, ChainApi, decrypt, resolveNetworkUrl } from "./index.js"; -import { AccountData, ContractData, DeploymentData, Encrypted } from "../types/index.js"; +import { ContractData, DeploymentData, Encrypted } from "../types/index.js"; import { Args, Command, Flags, Interfaces } from "@oclif/core"; import inquirer from "inquirer"; import chalk from "chalk"; @@ -77,13 +77,7 @@ export abstract class ContractCall extends SwankyComma this.deploymentInfo = deploymentData; - const accountData = this.swankyConfig.accounts.find( - (account: AccountData) => account.alias === flags.account || "alice" - ); - if (!accountData) { - throw new ConfigError("Provided account alias not found in swanky.config.json"); - } - + const accountData = this.findAccountByAlias(flags.account || "alice"); const networkUrl = resolveNetworkUrl(this.swankyConfig, flags.network ?? ""); const api = await ChainApi.create(networkUrl); this.api = api; diff --git a/src/lib/substrate-api.ts b/src/lib/substrate-api.ts index 343d35f4..42bef37c 100644 --- a/src/lib/substrate-api.ts +++ b/src/lib/substrate-api.ts @@ -1,5 +1,5 @@ import { ApiPromise } from "@polkadot/api/promise"; -import { WsProvider } from "@polkadot/api"; +import { Keyring, WsProvider } from "@polkadot/api"; import { SignerOptions } from "@polkadot/api/types"; import { Codec, ITuple } from "@polkadot/types-codec/types"; import { ISubmittableResult } from "@polkadot/types/types"; @@ -7,11 +7,13 @@ import { TypeRegistry } from "@polkadot/types"; import { DispatchError, BlockHash } from "@polkadot/types/interfaces"; import { ChainAccount } from "./account.js"; import BN from "bn.js"; -import { ChainProperty, ExtrinsicPayload } from "../types/index.js"; +import { ChainProperty, ExtrinsicPayload, AccountData } from "../types/index.js"; import { KeyringPair } from "@polkadot/keyring/types"; import { Abi, CodePromise } from "@polkadot/api-contract"; import { ApiError, UnknownError } from "./errors.js"; +import { ALICE_URI, KEYPAIR_TYPE, LOCAL_FAUCET_AMOUNT } from "./consts.js"; +import { BN_TEN } from "@polkadot/util"; export type AbiType = Abi; // const AUTO_CONNECT_MS = 10_000; // [ms] @@ -101,6 +103,10 @@ export class ChainApi { return this._registry; } + public async disconnect(): Promise { + await this._provider.disconnect(); + } + public async start(): Promise { const chainProperties = await this._api.rpc.system.properties(); @@ -210,7 +216,6 @@ export class ChainApi { if (handler) handler(result); }); } - public async deploy( abi: Abi, wasm: Buffer, @@ -247,4 +252,27 @@ export class ChainApi { }); }); } + + public async faucet(accountData: AccountData): Promise { + const keyring = new Keyring({ type: KEYPAIR_TYPE }); + const alicePair = keyring.addFromUri(ALICE_URI); + + const chainDecimals = this._api.registry.chainDecimals[0]; + const amount = new BN(LOCAL_FAUCET_AMOUNT).mul(BN_TEN.pow(new BN(chainDecimals))); + + const tx = this._api.tx.balances.transfer(accountData.address, amount); + + return new Promise((resolve, reject) => { + this.signAndSend(alicePair, tx, {}, ({ status, events }) => { + if (status.isInBlock || status.isFinalized) { + const transferEvent = events.find(({ event }) => event?.method === "Transfer"); + if (!transferEvent) { + reject(); + return; + } + resolve(); + } + }).catch((error) => reject(error)); + }); + } } diff --git a/src/lib/swankyCommand.ts b/src/lib/swankyCommand.ts index b2d6c625..4f2b5a73 100644 --- a/src/lib/swankyCommand.ts +++ b/src/lib/swankyCommand.ts @@ -1,6 +1,7 @@ import { Command, Flags, Interfaces } from "@oclif/core"; +import chalk from "chalk"; import { getSwankyConfig, Spinner } from "./index.js"; -import { SwankyConfig } from "../types/index.js"; +import { AccountData, SwankyConfig } from "../types/index.js"; import { writeJSON } from "fs-extra/esm"; import { BaseError, ConfigError, UnknownError } from "./errors.js"; import { swankyLogger } from "./logger.js"; @@ -51,6 +52,18 @@ export abstract class SwankyCommand extends Command { Full command: ${JSON.stringify(process.argv)}`); } + protected findAccountByAlias(alias: string): AccountData { + const accountData = this.swankyConfig.accounts.find( + (account: AccountData) => account.alias === alias + ); + + if (!accountData) { + throw new ConfigError(`Provided account alias ${chalk.yellowBright(alias)} not found in swanky.config.json`); + } + + return accountData; + } + protected async storeConfig() { await writeJSON("swanky.config.json", this.swankyConfig, { spaces: 2 }); } From 44da31ce5fdf629bf1155c2968f388253b131650 Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:44:31 +0200 Subject: [PATCH 05/19] feat: Add ink! e2e-tests (#127) Co-authored-by: Igor Papandinas --- src/commands/contract/compile.ts | 8 +- src/commands/contract/new.ts | 16 +- src/commands/contract/test.ts | 165 +++++++++++++----- src/commands/generate/tests.ts | 162 +++++++++++++++++ .../typegen.ts => generate/types.ts} | 4 +- src/commands/init/index.ts | 40 +++-- src/lib/contract.ts | 13 ++ src/lib/tasks.ts | 43 ++++- .../contracts/flipper/contract/Cargo.toml.hbs | 4 + .../contracts/flipper/contract/src/lib.rs.hbs | 85 ++++++++- .../contracts/psp22/contract/Cargo.toml.hbs | 7 +- .../contracts/psp22/contract/src/lib.rs.hbs | 85 +++++++++ .../contracts/psp22/test/index.test.ts.hbs | 45 +---- src/templates/test_helpers/Cargo.toml.hbs | 12 ++ src/templates/test_helpers/lib.rs.hbs | 18 ++ src/types/index.ts | 2 + 16 files changed, 579 insertions(+), 130 deletions(-) create mode 100644 src/commands/generate/tests.ts rename src/commands/{contract/typegen.ts => generate/types.ts} (91%) create mode 100644 src/templates/test_helpers/Cargo.toml.hbs create mode 100644 src/templates/test_helpers/lib.rs.hbs diff --git a/src/commands/contract/compile.ts b/src/commands/contract/compile.ts index 56129c01..e56f1638 100644 --- a/src/commands/contract/compile.ts +++ b/src/commands/contract/compile.ts @@ -1,9 +1,9 @@ import { Args, Flags } from "@oclif/core"; import path from "node:path"; -import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, generateTypes, Spinner, storeArtifacts } from "../../lib/index.js"; import { spawn } from "node:child_process"; import { pathExists } from "fs-extra/esm"; import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, Spinner, storeArtifacts } from "../../lib/index.js"; import { ConfigError, InputError, ProcessError } from "../../lib/errors.js"; export class CompileContract extends SwankyCommand { @@ -126,12 +126,6 @@ export class CompileContract extends SwankyCommand { return storeArtifacts(artifactsPath, contractInfo.name, contractInfo.moduleName); }, "Moving artifacts"); - await spinner.runCommand( - async () => await generateTypes(contractInfo.name), - `Generating ${contractName} contract ts types`, - `${contractName} contract's TS types Generated successfully`, - ); - this.swankyConfig.contracts[contractName].build = { timestamp: Date.now(), artifactsPath, diff --git a/src/commands/contract/new.ts b/src/commands/contract/new.ts index 0936663f..c671886f 100644 --- a/src/commands/contract/new.ts +++ b/src/commands/contract/new.ts @@ -1,11 +1,12 @@ import { Args, Flags } from "@oclif/core"; import path from "node:path"; -import { ensureDir, pathExists, writeJSON } from "fs-extra/esm"; +import { ensureDir, pathExists, pathExistsSync, writeJSON } from "fs-extra/esm"; import { checkCliDependencies, copyContractTemplateFiles, processTemplates, getTemplates, + prepareTestFiles, } from "../../lib/index.js"; import { email, name, pickTemplate } from "../../lib/prompts.js"; import { paramCase, pascalCase, snakeCase } from "change-case"; @@ -78,6 +79,18 @@ export class NewContract extends SwankyCommand { "Copying contract template files" ); + if (contractTemplate === "psp22") { + const e2eTestHelpersPath = path.resolve(projectPath, "tests", "test_helpers"); + if (!pathExistsSync(e2eTestHelpersPath)) { + await this.spinner.runCommand( + () => prepareTestFiles("e2e", path.resolve(templates.templatesPath), projectPath), + "Copying e2e test helpers" + ); + } else { + console.log("e2e test helpers already exist. No files were copied."); + } + } + await this.spinner.runCommand( () => processTemplates(projectPath, { @@ -93,7 +106,6 @@ export class NewContract extends SwankyCommand { ); await ensureDir(path.resolve(projectPath, "artifacts", args.contractName)); - await ensureDir(path.resolve(projectPath, "tests", args.contractName)); await this.spinner.runCommand(async () => { this.swankyConfig.contracts[args.contractName] = { diff --git a/src/commands/contract/test.ts b/src/commands/contract/test.ts index 216eb6b0..3ef72bfe 100644 --- a/src/commands/contract/test.ts +++ b/src/commands/contract/test.ts @@ -3,11 +3,13 @@ import { Flags, Args } from "@oclif/core"; import path from "node:path"; import { globby } from "globby"; import Mocha from "mocha"; -import { emptyDir } from "fs-extra/esm"; +import { emptyDir, pathExistsSync } from "fs-extra/esm"; import shell from "shelljs"; import { Contract } from "../../lib/contract.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; -import { ConfigError, FileError, InputError, TestError } from "../../lib/errors.js"; +import { ConfigError, FileError, InputError, ProcessError, TestError } from "../../lib/errors.js"; +import { spawn } from "node:child_process"; +import { Spinner } from "../../lib/index.js"; declare global { var contractTypesPath: string; // eslint-disable-line no-var @@ -20,7 +22,11 @@ export class TestContract extends SwankyCommand { all: Flags.boolean({ default: false, char: "a", - description: "Set all to true to compile all contracts", + description: "Run tests for all contracts", + }), + mocha: Flags.boolean({ + default: false, + description: "Run tests with mocha", }), }; @@ -43,7 +49,7 @@ export class TestContract extends SwankyCommand { ? Object.keys(this.swankyConfig.contracts) : [args.contractName]; - const testDir = path.resolve("tests"); + const spinner = new Spinner(); for (const contractName of contractNames) { const contractRecord = this.swankyConfig.contracts[contractName]; @@ -61,54 +67,119 @@ export class TestContract extends SwankyCommand { ); } - const artifactsCheck = await contract.artifactsExist(); + console.log(`Testing contract: ${contractName}`); - if (!artifactsCheck.result) { - throw new FileError( - `No artifact file found at path: ${artifactsCheck.missingPaths.toString()}` + if (!flags.mocha) { + await spinner.runCommand( + async () => { + return new Promise((resolve, reject) => { + const compileArgs = [ + "test", + "--features", + "e2e-tests", + "--manifest-path", + `contracts/${contractName}/Cargo.toml`, + "--release" + ]; + + const compile = spawn("cargo", compileArgs); + this.logger.info(`Running e2e-tests command: [${JSON.stringify(compile.spawnargs)}]`); + let outputBuffer = ""; + let errorBuffer = ""; + + compile.stdout.on("data", (data) => { + outputBuffer += data.toString(); + spinner.ora.clear(); + }); + compile.stdout.pipe(process.stdout); + + compile.stderr.on("data", (data) => { + errorBuffer += data; + }); + + compile.on("exit", (code) => { + if (code === 0) { + const regex = /test result: (.*)/; + const match = outputBuffer.match(regex); + if (match) { + this.logger.info(`Contract ${contractName} e2e-testing done.`); + resolve(match[1]); + } + } else { + reject(new ProcessError(errorBuffer)); + } + }); + }); + }, + `Testing ${contractName} contract`, + `${contractName} testing finished successfully` ); - } + } else { - console.log(`Testing contract: ${contractName}`); + const testDir = path.resolve("tests"); - const reportDir = path.resolve(testDir, contract.name, "testReports"); - - await emptyDir(reportDir); - - const mocha = new Mocha({ - timeout: 200000, - reporter: "mochawesome", - reporterOptions: { - reportDir, - charts: true, - reportTitle: `${contractName} test report`, - quiet: true, - json: false, - }, - }); - - const tests = await globby(`${path.resolve(testDir, contractName)}/*.test.ts`); - - tests.forEach((test) => { - mocha.addFile(test); - }); - - global.contractTypesPath = path.resolve(testDir, contractName, "typedContract"); - - shell.cd(`${testDir}/${contractName}`); - try { - await new Promise((resolve, reject) => { - mocha.run((failures) => { - if (failures) { - reject(`At least one of the tests failed. Check report for details: ${reportDir}`); - } else { - this.log(`All tests passing. Check the report for details: ${reportDir}`); - resolve(); - } - }); + if (!pathExistsSync(testDir)) { + throw new FileError(`Tests folder does not exist: ${testDir}`); + } + + const artifactsCheck = await contract.artifactsExist(); + + if (!artifactsCheck.result) { + throw new FileError( + `No artifact file found at path: ${artifactsCheck.missingPaths.toString()}` + ); + } + + const artifactPath = path.resolve("typedContracts", `${contractName}`); + const typedContractCheck = await contract.typedContractExists(contractName); + + this.log(`artifactPath: ${artifactPath}`); + + if (!typedContractCheck.result) { + throw new FileError( + `No typed contract found at path: ${typedContractCheck.missingPaths.toString()}` + ); + } + + const reportDir = path.resolve(testDir, contract.name, "testReports"); + + await emptyDir(reportDir); + + const mocha = new Mocha({ + timeout: 200000, + reporter: "mochawesome", + reporterOptions: { + reportDir, + charts: true, + reportTitle: `${contractName} test report`, + quiet: true, + json: false, + }, }); - } catch (cause) { - throw new TestError("Error in test", { cause }); + + const tests = await globby(`${path.resolve(testDir, contractName)}/*.test.ts`); + + tests.forEach((test) => { + mocha.addFile(test); + }); + + global.contractTypesPath = path.resolve(testDir, contractName, "typedContract"); + + shell.cd(`${testDir}/${contractName}`); + try { + await new Promise((resolve, reject) => { + mocha.run((failures) => { + if (failures) { + reject(`At least one of the tests failed. Check report for details: ${reportDir}`); + } else { + this.log(`All tests passing. Check the report for details: ${reportDir}`); + resolve(); + } + }); + }); + } catch (cause) { + throw new TestError("Error in test", { cause }); + } } } } diff --git a/src/commands/generate/tests.ts b/src/commands/generate/tests.ts new file mode 100644 index 00000000..09af4ead --- /dev/null +++ b/src/commands/generate/tests.ts @@ -0,0 +1,162 @@ +import { Args, Flags } from "@oclif/core"; +import { getTemplates, prepareTestFiles, processTemplates } from "../../lib/index.js"; +import { Contract } from "../../lib/contract.js"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { ConfigError, FileError, InputError } from "../../lib/errors.js"; +import path from "node:path"; +import { existsSync } from "node:fs"; +import inquirer from "inquirer"; +import { paramCase, pascalCase } from "change-case"; +import { TestType } from "../../index.js"; + +export class GenerateTests extends SwankyCommand { + static description = "Generate test files for the specified contract"; + + static args = { + contractName: Args.string({ + name: "contractName", + required: false, + description: "Name of the contract", + }), + }; + + static flags = { + template: Flags.string({ + options: getTemplates().contractTemplatesList, + }), + mocha: Flags.boolean({ + default: false, + description: "Generate mocha test files", + }), + }; + + async run(): Promise { + const { args, flags } = await this.parse(GenerateTests); + + if (flags.mocha) { + if (!args.contractName) { + throw new InputError("The 'contractName' argument is required to generate mocha tests."); + } + + await this.checkContract(args.contractName) + } + + const testType: TestType = flags.mocha ? "mocha" : "e2e"; + const testsFolderPath = path.resolve("tests"); + const testPath = this.getTestPath(testType, testsFolderPath, args.contractName); + + const templates = getTemplates(); + const templateName = await this.resolveTemplateName(flags, templates.contractTemplatesList); + + const overwrite = await this.checkOverwrite(testPath, testType, args.contractName); + if (!overwrite) return; + + await this.generateTests( + testType, + templates.templatesPath, + process.cwd(), + args.contractName, + templateName + ); + } + + async checkContract(name: string) { + const contractRecord = this.swankyConfig.contracts[name]; + if (!contractRecord) { + throw new ConfigError( + `Cannot find a contract named ${name} in swanky.config.json` + ); + } + + const contract = new Contract(contractRecord); + if (!(await contract.pathExists())) { + throw new FileError( + `Path to contract ${name} does not exist: ${contract.contractPath}` + ); + } + + const artifactsCheck = await contract.artifactsExist(); + if (!artifactsCheck.result) { + throw new FileError( + `No artifact file found at path: ${artifactsCheck.missingPaths.toString()}` + ); + } + } + + async checkOverwrite( + testPath: string, + testType: TestType, + contractName?: string + ): Promise { + if (!existsSync(testPath)) return true; // No need to overwrite + const message = + testType === "e2e" + ? "Test helpers already exist. Overwrite?" + : `Mocha tests for ${contractName} already exist. Overwrite?`; + + const { overwrite } = await inquirer.prompt({ + type: "confirm", + name: "overwrite", + message, + default: false, + }); + + return overwrite; + } + + getTestPath(testType: TestType, testsPath: string, contractName?: string): string { + if (testType === "e2e") { + return path.resolve(testsPath, "test_helpers"); + } else if (testType === "mocha" && contractName) { + return path.resolve(testsPath, contractName, "index.test.ts"); + } else { + throw new InputError("The 'contractName' argument is required to generate mocha tests."); + } + } + + async resolveTemplateName(flags: any, templates: any): Promise { + if (flags.mocha && !flags.template) { + if (!templates?.length) throw new ConfigError("Template list is empty!"); + const response = await inquirer.prompt([ + { + type: "list", + name: "template", + message: "Choose a contract template:", + choices: templates, + }, + ]); + return response.template; + } + return flags.template; + } + + async generateTests( + testType: TestType, + templatesPath: string, + projectPath: string, + contractName?: string, + templateName?: string + ): Promise { + if (testType === "e2e") { + await this.spinner.runCommand( + () => prepareTestFiles("e2e", templatesPath, projectPath), + "Generating e2e test helpers" + ); + } else { + await this.spinner.runCommand( + () => prepareTestFiles("mocha", templatesPath, projectPath, templateName, contractName), + `Generating tests for ${contractName} with mocha` + ); + } + await this.spinner.runCommand( + () => + processTemplates(projectPath, { + project_name: paramCase(this.config.pjson.name), + swanky_version: this.config.pjson.version, + contract_name: contractName ?? "", + contract_name_pascal: contractName ? pascalCase(contractName) : "", + }), + "Processing templates" + ); + } +} diff --git a/src/commands/contract/typegen.ts b/src/commands/generate/types.ts similarity index 91% rename from src/commands/contract/typegen.ts rename to src/commands/generate/types.ts index 391e0a3c..79cf6134 100644 --- a/src/commands/contract/typegen.ts +++ b/src/commands/generate/types.ts @@ -4,7 +4,7 @@ import { Contract } from "../../lib/contract.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { ConfigError, FileError } from "../../lib/errors.js"; -export class TypegenCommand extends SwankyCommand { +export class GenerateTypes extends SwankyCommand { static description = "Generate types from compiled contract metadata"; static args = { @@ -16,7 +16,7 @@ export class TypegenCommand extends SwankyCommand { }; async run(): Promise { - const { args } = await this.parse(TypegenCommand); + const { args } = await this.parse(GenerateTypes); const contractRecord = this.swankyConfig.contracts[args.contractName]; if (!contractRecord) { diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index 21712eba..226cdacf 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -1,21 +1,23 @@ import { Args, Flags } from "@oclif/core"; import path from "node:path"; -import { ensureDir, writeJSON, pathExists, copy, outputFile, readJSON, remove } from "fs-extra/esm"; -import { stat, readdir, readFile } from "fs/promises"; +import { copy, ensureDir, outputFile, pathExists, readJSON, remove, writeJSON } from "fs-extra/esm"; +import { readdir, readFile, stat } from "fs/promises"; import { execaCommand, execaCommandSync } from "execa"; import { paramCase, pascalCase, snakeCase } from "change-case"; import inquirer from "inquirer"; import TOML from "@iarna/toml"; import { choice, email, name, pickNodeVersion, pickTemplate } from "../../lib/prompts.js"; import { + ChainAccount, checkCliDependencies, copyCommonTemplateFiles, copyContractTemplateFiles, downloadNode, + getTemplates, installDeps, - ChainAccount, + prepareTestFiles, processTemplates, - getTemplates, swankyNodeVersions, + swankyNodeVersions } from "../../lib/index.js"; import { ALICE_URI, BOB_URI, @@ -26,7 +28,7 @@ import { } from "../../lib/consts.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { InputError, UnknownError } from "../../lib/errors.js"; -import { GlobEntry, globby } from "globby"; +import { globby, GlobEntry } from "globby"; import { merge } from "lodash-es"; import inquirerFuzzyPath from "inquirer-fuzzy-path"; import { SwankyConfig } from "../../types/index.js"; @@ -91,6 +93,7 @@ export class Init extends SwankyCommand { super(argv, config); (this.constructor as typeof SwankyCommand).ENSURE_SWANKY_CONFIG = false; } + projectPath = ""; @@ -206,7 +209,6 @@ export class Init extends SwankyCommand { Object.keys(this.configBuilder.contracts!).forEach(async (contractName) => { await ensureDir(path.resolve(this.projectPath, "artifacts", contractName)); - await ensureDir(path.resolve(this.projectPath, "tests", contractName)); }); this.taskQueue.push({ @@ -232,7 +234,7 @@ export class Init extends SwankyCommand { runningMessage, successMessage, failMessage, - shouldExitOnError + shouldExitOnError, ); if (result && callback) { callback(result as string); @@ -287,6 +289,14 @@ export class Init extends SwankyCommand { runningMessage: "Copying contract template files", }); + if (contractTemplate === "psp22") { + this.taskQueue.push({ + task: prepareTestFiles, + args: ["e2e", path.resolve(templates.templatesPath), this.projectPath], + runningMessage: "Copying test helpers", + }); + } + this.taskQueue.push({ task: processTemplates, args: [ @@ -324,7 +334,7 @@ export class Init extends SwankyCommand { } catch (cause) { throw new InputError( `Error reading target directory [${chalk.yellowBright(pathToExistingProject)}]`, - { cause } + { cause }, ); } @@ -344,7 +354,7 @@ export class Init extends SwankyCommand { const candidatesList: CopyCandidates = await getCopyCandidatesList( pathToExistingProject, - copyGlobsList + copyGlobsList, ); const testDir = await detectTests(pathToExistingProject); @@ -512,10 +522,10 @@ async function confirmCopyList(candidatesList: CopyCandidates) { ( item: PathEntry & { group: "contracts" | "crates" | "tests"; - } + }, ) => { resultingList[item.group]?.push(item); - } + }, ); return resultingList; } @@ -542,7 +552,7 @@ async function detectTests(pathToExistingProject: string): Promise { const { selectedDirectory } = await inquirer.prompt([ { @@ -613,7 +623,7 @@ async function getCopyCandidatesList( pathsToCopy: { contractsDirectories: string[]; cratesDirectories: string[]; - } + }, ) { const detectedPaths = { contracts: await getDirsAndFiles(projectPath, pathsToCopy.contractsDirectories), @@ -634,7 +644,7 @@ async function getGlobPaths(projectPath: string, globList: string[], isDirOnly: onlyDirectories: isDirOnly, deep: 1, objectMode: true, - } + }, ); } diff --git a/src/lib/contract.ts b/src/lib/contract.ts index 7d9d85ab..fb102450 100644 --- a/src/lib/contract.ts +++ b/src/lib/contract.ts @@ -41,6 +41,19 @@ export class Contract { return result; } + async typedContractExists(contractName: string) { + const result: { result: boolean; missingPaths: string[] } = { + result: true, + missingPaths: [], + }; + const artifactPath = path.resolve("typedContracts", `${contractName}`); + if(!(await pathExists(artifactPath))) { + result.result = false; + result.missingPaths.push(artifactPath); + } + return result; + } + async getABI(): Promise { const check = await this.artifactsExist(); if (!check.result && check.missingTypes.includes(".json")) { diff --git a/src/lib/tasks.ts b/src/lib/tasks.ts index 2705ac42..b3eb3a1f 100644 --- a/src/lib/tasks.ts +++ b/src/lib/tasks.ts @@ -6,12 +6,12 @@ import { globby } from "globby"; import handlebars from "handlebars"; import { DownloadEndedStats, DownloaderHelper } from "node-downloader-helper"; import process from "node:process"; +import semver from "semver"; import { nodeInfo } from "./nodeInfo.js"; import decompress from "decompress"; import { Spinner } from "./spinner.js"; -import { SupportedPlatforms, SupportedArch } from "../types/index.js"; +import { SupportedPlatforms, SupportedArch, TestType } from "../types/index.js"; import { ConfigError, NetworkError, ProcessError } from "./errors.js"; -import semver from "semver"; import { commandStdoutOrNull } from "./command-utils.js"; export async function checkCliDependencies(spinner: Spinner) { @@ -55,10 +55,41 @@ export async function copyContractTemplateFiles( path.resolve(contractTemplatePath, "contract"), path.resolve(projectPath, "contracts", contractName) ); - await copy( - path.resolve(contractTemplatePath, "test"), - path.resolve(projectPath, "tests", contractName) - ); +} + +export async function prepareTestFiles( + testType: TestType, + templatePath: string, + projectPath: string, + templateName?: string, + contractName?: string +) { + switch (testType) { + case "e2e": { + await copy( + path.resolve(templatePath, "test_helpers"), + path.resolve(projectPath, "tests", "test_helpers") + ); + break; + } + case "mocha": { + if (!templateName) { + throw new ProcessError("'templateName' argument is required for mocha tests"); + } + if (!contractName) { + throw new ProcessError("'contractName' argument is required for mocha tests"); + } + await copy( + path.resolve(templatePath, "contracts", templateName, "test"), + path.resolve(projectPath, "tests", contractName) + ); + break; + } + default: { + // This case will make the switch exhaustive + throw new ProcessError("Unhandled test type"); + } + } } export async function processTemplates(projectPath: string, templateData: Record) { diff --git a/src/templates/contracts/flipper/contract/Cargo.toml.hbs b/src/templates/contracts/flipper/contract/Cargo.toml.hbs index de90dba7..2de5449d 100644 --- a/src/templates/contracts/flipper/contract/Cargo.toml.hbs +++ b/src/templates/contracts/flipper/contract/Cargo.toml.hbs @@ -10,6 +10,9 @@ ink = { version = "4.2.1", default-features = false } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } scale-info = { version = "2.6", default-features = false, features = ["derive"], optional = true } +[dev-dependencies] +ink_e2e = "4.2.1" + [lib] name = "{{contract_name_snake}}" path = "src/lib.rs" @@ -22,3 +25,4 @@ std = [ "scale-info/std", ] ink-as-dependency = [] +e2e-tests = [] diff --git a/src/templates/contracts/flipper/contract/src/lib.rs.hbs b/src/templates/contracts/flipper/contract/src/lib.rs.hbs index a5137e64..0681c362 100644 --- a/src/templates/contracts/flipper/contract/src/lib.rs.hbs +++ b/src/templates/contracts/flipper/contract/src/lib.rs.hbs @@ -57,17 +57,90 @@ mod {{contract_name_snake}} { /// We test if the default constructor does its job. #[ink::test] fn default_works() { - let {{contract_name_snake}} = {{contract_name_pascal}}::default(); - assert_eq!({{contract_name_snake}}.get(), false); + let flipper = {{contract_name_pascal}}::default(); + assert_eq!(flipper.get(), false); } /// We test a simple use case of our contract. #[ink::test] fn it_works() { - let mut {{contract_name_snake}} = {{contract_name_pascal}}::new(false); - assert_eq!({{contract_name_snake}}.get(), false); - {{contract_name_snake}}.flip(); - assert_eq!({{contract_name_snake}}.get(), true); + let mut flipper = {{contract_name_pascal}}::new(false); + assert_eq!(flipper.get(), false); + flipper.flip(); + assert_eq!(flipper.get(), true); + } + } + + + /// This is how you'd write end-to-end (E2E) or integration tests for ink! contracts. + /// + /// When running these you need to make sure that you: + /// - Compile the tests with the `e2e-tests` feature flag enabled (`--features e2e-tests`) + /// - Are running a Substrate node which contains `pallet-contracts` in the background + #[cfg(all(test, feature = "e2e-tests"))] + mod e2e_tests { + /// Imports all the definitions from the outer scope so we can use them here. + use super::*; + + /// A helper function used for calling contract messages. + use ink_e2e::build_message; + + /// The End-to-End test `Result` type. + type E2EResult = std::result::Result>; + + /// We test that we can upload and instantiate the contract using its default constructor. + #[ink_e2e::test] + async fn default_works(mut client: ink_e2e::Client) -> E2EResult<()> { + // Given + let constructor = {{contract_name_pascal}}Ref::default(); + + // When + let contract_account_id = client + .instantiate("{{contract_name_snake}}", &ink_e2e::alice(), constructor, 0, None) + .await + .expect("instantiate failed") + .account_id; + + // Then + let get = build_message::<{{contract_name_pascal}}Ref>(contract_account_id.clone()) + .call(|flipper| flipper.get()); + let get_result = client.call_dry_run(&ink_e2e::alice(), &get, 0, None).await; + assert!(matches!(get_result.return_value(), false)); + + Ok(()) + } + + /// We test that we can read and write a value from the on-chain contract contract. + #[ink_e2e::test] + async fn it_works(mut client: ink_e2e::Client) -> E2EResult<()> { + // Given + let constructor = {{contract_name_pascal}}Ref::new(false); + let contract_account_id = client + .instantiate("{{contract_name_snake}}", &ink_e2e::bob(), constructor, 0, None) + .await + .expect("instantiate failed") + .account_id; + + let get = build_message::<{{contract_name_pascal}}Ref>(contract_account_id.clone()) + .call(|flipper| flipper.get()); + let get_result = client.call_dry_run(&ink_e2e::bob(), &get, 0, None).await; + assert!(matches!(get_result.return_value(), false)); + + // When + let flip = build_message::<{{contract_name_pascal}}Ref>(contract_account_id.clone()) + .call(|flipper| flipper.flip()); + let _flip_result = client + .call(&ink_e2e::bob(), flip, 0, None) + .await + .expect("flip failed"); + + // Then + let get = build_message::<{{contract_name_pascal}}Ref>(contract_account_id.clone()) + .call(|flipper| flipper.get()); + let get_result = client.call_dry_run(&ink_e2e::bob(), &get, 0, None).await; + assert!(matches!(get_result.return_value(), true)); + + Ok(()) } } } diff --git a/src/templates/contracts/psp22/contract/Cargo.toml.hbs b/src/templates/contracts/psp22/contract/Cargo.toml.hbs index a2c880f3..0cf1e1d6 100644 --- a/src/templates/contracts/psp22/contract/Cargo.toml.hbs +++ b/src/templates/contracts/psp22/contract/Cargo.toml.hbs @@ -10,7 +10,11 @@ ink = { version = "4.2.1", default-features = false} scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } scale-info = { version = "2.6", default-features = false, features = ["derive"], optional = true } -openbrush = { git = "https://github.com/Brushfam/openbrush-contracts", tag = "4.0.0-beta", default-features = false, features = ["psp22"] } +openbrush = { git = "https://github.com/Brushfam/openbrush-contracts", tag = "4.0.0", default-features = false, features = ["psp22"] } + +[dev-dependencies] +ink_e2e = "4.2.1" +test_helpers = { path = "../../tests/test_helpers", default-features = false } [lib] name = "{{contract_name_snake}}" @@ -25,6 +29,7 @@ std = [ "openbrush/std", ] ink-as-dependency = [] +e2e-tests = [] [profile.dev] codegen-units = 16 diff --git a/src/templates/contracts/psp22/contract/src/lib.rs.hbs b/src/templates/contracts/psp22/contract/src/lib.rs.hbs index 4b85fb96..88b50918 100644 --- a/src/templates/contracts/psp22/contract/src/lib.rs.hbs +++ b/src/templates/contracts/psp22/contract/src/lib.rs.hbs @@ -69,4 +69,89 @@ pub mod {{contract_name_snake}} { PSP22::total_supply(self) } } + + #[cfg(all(test, feature = "e2e-tests"))] + pub mod tests { + use super::*; + use ink_e2e::{ + build_message, + }; + use openbrush::contracts::psp22::psp22_external::PSP22; + use test_helpers::{ + address_of, + balance_of, + }; + + type E2EResult = Result>; + + #[ink_e2e::test] + async fn assigns_initial_balance(mut client: ink_e2e::Client) -> E2EResult<()> { + let constructor = {{contract_name_pascal}}Ref::new(100); + let address = client + .instantiate("{{contract_name_snake}}", &ink_e2e::alice(), constructor, 0, None) + .await + .expect("instantiate failed") + .account_id; + + let result = { + let _msg = build_message::<{{contract_name_pascal}}Ref>(address.clone()) + .call(|contract| contract.balance_of(address_of!(Alice))); + client.call_dry_run(&ink_e2e::alice(), &_msg, 0, None).await + }; + + assert!(matches!(result.return_value(), 100)); + + Ok(()) + } + + #[ink_e2e::test] + async fn transfer_adds_amount_to_destination_account(mut client: ink_e2e::Client) -> E2EResult<()> { + let constructor = {{contract_name_pascal}}Ref::new(100); + let address = client + .instantiate("{{contract_name_snake}}", &ink_e2e::alice(), constructor, 0, None) + .await + .expect("instantiate failed") + .account_id; + + let result = { + let _msg = build_message::<{{contract_name_pascal}}Ref>(address.clone()) + .call(|contract| contract.transfer(address_of!(Bob), 50, vec![])); + client + .call(&ink_e2e::alice(), _msg, 0, None) + .await + .expect("transfer failed") + }; + + assert!(matches!(result.return_value(), Ok(()))); + + let balance_of_alice = balance_of!({{contract_name_pascal}}Ref, client, address, Alice); + + let balance_of_bob = balance_of!({{contract_name_pascal}}Ref, client, address, Bob); + + assert_eq!(balance_of_bob, 50, "Bob should have 50 tokens"); + assert_eq!(balance_of_alice, 50, "Alice should have 50 tokens"); + + Ok(()) + } + + #[ink_e2e::test] + async fn cannot_transfer_above_the_amount(mut client: ink_e2e::Client) -> E2EResult<()> { + let constructor = {{contract_name_pascal}}Ref::new(100); + let address = client + .instantiate("{{contract_name_snake}}", &ink_e2e::alice(), constructor, 0, None) + .await + .expect("instantiate failed") + .account_id; + + let result = { + let _msg = build_message::<{{contract_name_pascal}}Ref>(address.clone()) + .call(|contract| contract.transfer(address_of!(Bob), 101, vec![])); + client.call_dry_run(&ink_e2e::alice(), &_msg, 0, None).await + }; + + assert!(matches!(result.return_value(), Err(PSP22Error::InsufficientBalance))); + + Ok(()) + } + } } diff --git a/src/templates/contracts/psp22/test/index.test.ts.hbs b/src/templates/contracts/psp22/test/index.test.ts.hbs index 5e018a64..c17776a3 100644 --- a/src/templates/contracts/psp22/test/index.test.ts.hbs +++ b/src/templates/contracts/psp22/test/index.test.ts.hbs @@ -79,47 +79,4 @@ describe("{{contract_name}} test", () => { }) ).to.eventually.be.rejected; }); - - it("Can not transfer to hated account", async () => { - const hated_account = wallet2; - const transferredAmount = 10; - const { gasRequired } = await contract - .withSigner(deployer) - .query.transfer(wallet1.address, transferredAmount, []); - // Check that we can transfer money while account is not hated - await expect( - contract.tx.transfer(hated_account.address, 10, [], { - gasLimit: gasRequired, - }) - ).to.eventually.be.fulfilled; - - const result = await contract.query.balanceOf(hated_account.address); - expect(result.value.ok?.toNumber()).to.equal(transferredAmount); - - expect((await contract.query.getHatedAccount()).value.ok).to.equal( - EMPTY_ADDRESS - ); - - // Hate account - await expect( - contract.tx.setHatedAccount(hated_account.address, { - gasLimit: gasRequired, - }) - ).to.eventually.be.ok; - expect((await contract.query.getHatedAccount()).value.ok).to.equal( - hated_account.address - ); - - // Transfer must fail - expect( - contract.tx.transfer(hated_account.address, 10, [], { - gasLimit: gasRequired, - }) - ).to.eventually.be.rejected; - - // Amount of tokens must be the same - expect( - (await contract.query.balanceOf(hated_account.address)).value.ok?.toNumber() - ).to.equal(10); - }); -}); +}); \ No newline at end of file diff --git a/src/templates/test_helpers/Cargo.toml.hbs b/src/templates/test_helpers/Cargo.toml.hbs new file mode 100644 index 00000000..e0724a21 --- /dev/null +++ b/src/templates/test_helpers/Cargo.toml.hbs @@ -0,0 +1,12 @@ +[package] +name = "test_helpers" +version= "0.1.0" +authors = ["{{author_name}}"] +edition = "2021" + +[lib] +name = "test_helpers" +path = "lib.rs" + +[profile.dev] +codegen-units = 16 \ No newline at end of file diff --git a/src/templates/test_helpers/lib.rs.hbs b/src/templates/test_helpers/lib.rs.hbs new file mode 100644 index 00000000..b45d2688 --- /dev/null +++ b/src/templates/test_helpers/lib.rs.hbs @@ -0,0 +1,18 @@ +#[macro_export] +macro_rules! address_of { + ($account:ident) => { + ::ink_e2e::account_id(::ink_e2e::AccountKeyring::$account) + }; +} + +#[macro_export] +macro_rules! balance_of { + ($contract_ref:ident, $client:ident, $address:ident, $account:ident) => \{{ + let _msg = + build_message::<$contract_ref>($address.clone()).call(|contract| contract.balance_of(address_of!($account))); + $client + .call_dry_run(&::ink_e2e::alice(), &_msg, 0, None) + .await + .return_value() + }}; +} \ No newline at end of file diff --git a/src/types/index.ts b/src/types/index.ts index 542a1d7f..aa574dda 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -53,3 +53,5 @@ export interface SwankyConfig { export type SupportedPlatforms = "darwin" | "linux"; export type SupportedArch = "arm64" | "x64"; + +export type TestType = "e2e" | "mocha"; From e28c7c6a54275eed88f9ab4d9d6fc5a896403035 Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:47:14 +0200 Subject: [PATCH 06/19] feat: Detect build mode on deploy (#104) Co-authored-by: Igor Papandinas --- src/commands/contract/compile.ts | 5 ++++ src/commands/contract/deploy.ts | 33 +++++++++++++++++++-- src/commands/init/index.ts | 4 +-- src/lib/contract.ts | 51 ++++++++++++++++---------------- src/types/index.ts | 7 +++++ 5 files changed, 70 insertions(+), 30 deletions(-) diff --git a/src/commands/contract/compile.ts b/src/commands/contract/compile.ts index e56f1638..56d87283 100644 --- a/src/commands/contract/compile.ts +++ b/src/commands/contract/compile.ts @@ -5,6 +5,7 @@ import { pathExists } from "fs-extra/esm"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, Spinner, storeArtifacts } from "../../lib/index.js"; import { ConfigError, InputError, ProcessError } from "../../lib/errors.js"; +import { BuildMode } from "../../index.js"; export class CompileContract extends SwankyCommand { static description = "Compile the smart contract(s) in your contracts directory"; @@ -63,6 +64,7 @@ export class CompileContract extends SwankyCommand { throw new InputError(`Contract folder not found at expected path`); } + let buildMode = BuildMode.Debug; const compilationResult = await spinner.runCommand( async () => { return new Promise((resolve, reject) => { @@ -73,9 +75,11 @@ export class CompileContract extends SwankyCommand { `contracts/${contractName}/Cargo.toml`, ]; if (flags.release && !flags.verifiable) { + buildMode = BuildMode.Release; compileArgs.push("--release"); } if (flags.verifiable) { + buildMode = BuildMode.Verifiable; const cargoContractVersion = extractCargoContractVersion(); if (cargoContractVersion === null) throw new InputError( @@ -129,6 +133,7 @@ export class CompileContract extends SwankyCommand { this.swankyConfig.contracts[contractName].build = { timestamp: Date.now(), artifactsPath, + buildMode, isVerified: false, }; diff --git a/src/commands/contract/deploy.ts b/src/commands/contract/deploy.ts index a0b2ca0a..ac3489b4 100644 --- a/src/commands/contract/deploy.ts +++ b/src/commands/contract/deploy.ts @@ -2,13 +2,13 @@ import { Args, Flags } from "@oclif/core"; import path from "node:path"; import { writeJSON } from "fs-extra/esm"; import { cryptoWaitReady } from "@polkadot/util-crypto/crypto"; -import { resolveNetworkUrl, ChainApi, ChainAccount, decrypt, AbiType } from "../../lib/index.js"; -import { Encrypted } from "../../types/index.js"; +import { AbiType, ChainAccount, ChainApi, decrypt, resolveNetworkUrl } from "../../lib/index.js"; +import { BuildMode, Encrypted } from "../../types/index.js"; import inquirer from "inquirer"; import chalk from "chalk"; import { Contract } from "../../lib/contract.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; -import { ApiError, ConfigError, FileError } from "../../lib/errors.js"; +import { ApiError, ConfigError, FileError, ProcessError } from "../../lib/errors.js"; export class DeployContract extends SwankyCommand { static description = "Deploy contract to a running node"; @@ -70,6 +70,33 @@ export class DeployContract extends SwankyCommand { ); } + if (contract.buildMode === undefined) { + throw new ProcessError( + `Build mode is undefined for contract ${args.contractName}. Please ensure the contract is correctly compiled.` + ); + } else if (contract.buildMode !== BuildMode.Verifiable) { + await inquirer + .prompt([ + { + type: "confirm", + message: `You are deploying a not verified contract in ${ + contract.buildMode === BuildMode.Release ? "release" : "debug" + } mode. Are you sure you want to continue?`, + name: "confirm", + }, + ]) + .then((answers) => { + if (!answers.confirm) { + this.log( + `${chalk.redBright("✖")} Aborted deployment of ${chalk.yellowBright( + args.contractName + )}` + ); + process.exit(0); + } + }); + } + const accountData = this.findAccountByAlias(flags.account); const mnemonic = accountData.isDev ? (accountData.mnemonic as string) diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index 226cdacf..a8915be3 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -463,7 +463,7 @@ async function detectModuleNames(copyList: CopyCandidates): Promise { + const missingPaths: string[] = []; + let result = true; + for (const artifactType of Contract.artifactTypes) { const artifactPath = path.resolve(this.artifactsPath, `${this.moduleName}${artifactType}`); - if (!(await pathExists(artifactPath))) { - result.result = false; - result.missingPaths.push(artifactPath); - result.missingTypes.push(artifactType); + result = false; + missingPaths.push(artifactPath); } } - return result; + + return { result, missingPaths }; } async typedContractExists(contractName: string) { @@ -55,27 +56,20 @@ export class Contract { } async getABI(): Promise { - const check = await this.artifactsExist(); - if (!check.result && check.missingTypes.includes(".json")) { - throw new FileError(`Cannot read ABI, path not found: ${check.missingPaths.toString()}`); - } - return readJSON(path.resolve(this.artifactsPath, `${this.moduleName}.json`)); + const jsonArtifactPath = `${this.moduleName}.json`; + await this.ensureArtifactExists(jsonArtifactPath); + return readJSON(path.resolve(this.artifactsPath, jsonArtifactPath)); } async getBundle() { - const check = await this.artifactsExist(); - if (!check.result && check.missingTypes.includes(".contract")) { - throw new FileError( - `Cannot read .contract bundle, path not found: ${check.missingPaths.toString()}` - ); - } - return readJSON(path.resolve(this.artifactsPath, `${this.moduleName}.contract`), 'utf-8'); + const contractArtifactPath = `${this.moduleName}.contract`; + await this.ensureArtifactExists(contractArtifactPath); + return readJSON(path.resolve(this.artifactsPath, contractArtifactPath), 'utf8'); } async getWasm(): Promise { const bundle = await this.getBundle(); if (bundle.source?.wasm) return bundle.source.wasm; - throw new FileError(`Cannot find wasm field in the .contract bundle!`); } @@ -83,4 +77,11 @@ export class Contract { const abi = await this.getABI(); printContractInfo(abi); } + + private async ensureArtifactExists(artifactFileName: string): Promise { + const artifactPath = path.resolve(this.artifactsPath, artifactFileName); + if (!(await pathExists(artifactPath))) { + throw new FileError(`Artifact file not found at path: ${artifactPath}`); + } + } } diff --git a/src/types/index.ts b/src/types/index.ts index aa574dda..0dab9358 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -30,6 +30,7 @@ export interface ContractData { export interface BuildData { timestamp: number; artifactsPath: string; + buildMode: BuildMode; isVerified: boolean; } @@ -51,6 +52,12 @@ export interface SwankyConfig { networks: Record } +export enum BuildMode { + Debug = "Debug", + Release = "Release", + Verifiable = "Verifiable", +} + export type SupportedPlatforms = "darwin" | "linux"; export type SupportedArch = "arm64" | "x64"; From e3157166e888d8d86fe5ad6959510b90cef20e53 Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Tue, 27 Feb 2024 12:43:39 +0200 Subject: [PATCH 07/19] feat: Implement system/local config + support default/dev account (#62) Co-authored-by: Igor Papandinas --- src/commands/account/create.ts | 40 +++++++++-- src/commands/account/default.ts | 82 ++++++++++++++++++++++ src/commands/account/list.ts | 31 ++++++++- src/commands/check/index.ts | 20 +++--- src/commands/contract/compile.ts | 29 +++++--- src/commands/contract/deploy.ts | 58 +++++++++------- src/commands/contract/explain.ts | 3 +- src/commands/contract/new.ts | 15 ++-- src/commands/contract/query.ts | 6 +- src/commands/contract/test.ts | 4 +- src/commands/contract/tx.ts | 6 +- src/commands/contract/verify.ts | 21 ++++-- src/commands/generate/types.ts | 8 +-- src/commands/init/index.ts | 79 ++++----------------- src/commands/node/install.ts | 32 ++++----- src/commands/node/start.ts | 5 +- src/lib/command-utils.ts | 107 ++++++++++++++++++++++++++--- src/lib/config-builder.ts | 70 +++++++++++++++++++ src/lib/consts.ts | 4 ++ src/lib/contractCall.ts | 55 +++++++++------ src/lib/swankyCommand.ts | 114 ++++++++++++++++++++++++++----- src/types/index.ts | 10 ++- 22 files changed, 589 insertions(+), 210 deletions(-) create mode 100644 src/commands/account/default.ts create mode 100644 src/lib/config-builder.ts diff --git a/src/commands/account/create.ts b/src/commands/account/create.ts index a9000c4a..8972f8af 100644 --- a/src/commands/account/create.ts +++ b/src/commands/account/create.ts @@ -1,22 +1,37 @@ import { Flags } from "@oclif/core"; import chalk from "chalk"; -import { ChainAccount, encrypt } from "../../lib/index.js"; +import { ChainAccount, encrypt, getSwankyConfig, isLocalConfigCheck } from "../../lib/index.js"; import { AccountData } from "../../types/index.js"; import inquirer from "inquirer"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { FileError } from "../../lib/errors.js"; +import { ConfigBuilder } from "../../lib/config-builder.js"; import { SwankyAccountCommand } from "./swankyAccountCommands.js"; export class CreateAccount extends SwankyAccountCommand { static description = "Create a new dev account in config"; static flags = { - generate: Flags.boolean({ + global: Flags.boolean({ char: "g", + description: "Create account globally stored in Swanky system config.", + + }), + new: Flags.boolean({ + char: "n", + description: "Generate a brand new account.", }), dev: Flags.boolean({ char: "d", + description: "Make this account a dev account for local network usage.", }), }; + constructor(argv: string[], baseConfig: any) { + super(argv, baseConfig); + (this.constructor as typeof SwankyCommand).ENSURE_SWANKY_CONFIG = false; + } + async run(): Promise { const { flags } = await this.parse(CreateAccount); @@ -36,8 +51,8 @@ export class CreateAccount extends SwankyAccountCommand { ); } - let tmpMnemonic: string; - if (flags.generate) { + let tmpMnemonic = ""; + if (flags.new) { tmpMnemonic = ChainAccount.generate(); console.log( `${ @@ -76,9 +91,22 @@ export class CreateAccount extends SwankyAccountCommand { accountData.mnemonic = tmpMnemonic; } - this.swankyConfig.accounts.push(accountData); + const configType = flags.global ? "global" : isLocalConfigCheck() ? "local" : "global"; + const config = configType === "global" ? getSwankyConfig("global") : getSwankyConfig("local"); + + const configBuilder = new ConfigBuilder(config).addAccount(accountData); - await this.storeConfig(); + if (config.defaultAccount === null) { + configBuilder.setDefaultAccount(accountData.alias); + } + + try { + await this.storeConfig(configBuilder.build(), configType); + } catch (cause) { + throw new FileError(`Error storing created account in ${configType} config`, { + cause, + }); + } this.log( `${chalk.greenBright("✔")} Account with alias ${chalk.yellowBright( diff --git a/src/commands/account/default.ts b/src/commands/account/default.ts new file mode 100644 index 00000000..7ffdb422 --- /dev/null +++ b/src/commands/account/default.ts @@ -0,0 +1,82 @@ +import { Args, Flags } from "@oclif/core"; +import chalk from "chalk"; +import { SwankySystemConfig } from "../../types/index.js"; +import inquirer from "inquirer"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { ConfigError, FileError } from "../../lib/errors.js"; +import { getSwankyConfig, isLocalConfigCheck } from "../../lib/index.js"; +import { ConfigBuilder } from "../../lib/config-builder.js"; + +export class DefaultAccount extends SwankyCommand { + static description = "Set default account to use"; + + static flags = { + global: Flags.boolean({ + char: "g", + description: "Set default account globally in Swanky system config.", + }), + }; + + static args = { + accountAlias: Args.string({ + name: "accountAlias", + required: false, + description: "Alias of account to be used as default", + }), + }; + + constructor(argv: string[], baseConfig: any) { + super(argv, baseConfig); + (this.constructor as typeof SwankyCommand).ENSURE_SWANKY_CONFIG = false; + } + + async run(): Promise { + const { args, flags } = await this.parse(DefaultAccount); + + const configType = flags.global ? "global" : isLocalConfigCheck() ? "local" : "global"; + const config = configType === "global" ? getSwankyConfig("global") : getSwankyConfig("local"); + + const accountAlias = args.accountAlias ?? (await this.promptForAccountAlias(config)); + this.ensureAccountExists(config, accountAlias); + + const newConfig = new ConfigBuilder(config).setDefaultAccount(accountAlias).build(); + + try { + await this.storeConfig(newConfig, configType); + } catch (cause) { + throw new FileError(`Error storing default account in ${configType} config`, { + cause, + }); + } + + this.log( + `${chalk.greenBright("✔")} Account with alias ${chalk.yellowBright( + accountAlias + )} set as default in ${configType} config` + ); + } + + private async promptForAccountAlias(config: SwankySystemConfig): Promise { + const choices = config.accounts.map((account) => ({ + name: `${account.alias} (${account.address})`, + value: account.alias, + })); + + const answer = await inquirer.prompt([ + { + type: "list", + name: "defaultAccount", + message: "Select default account", + choices: choices, + }, + ]); + + return answer.defaultAccount; + } + + private ensureAccountExists(config: SwankySystemConfig, alias: string) { + const isSomeAccount = config.accounts.some((account) => account.alias === alias); + if (!isSomeAccount) + throw new ConfigError(`Provided account alias ${chalk.yellowBright(alias)} not found`); + } +} diff --git a/src/commands/account/list.ts b/src/commands/account/list.ts index a7c294bd..67f05ecd 100644 --- a/src/commands/account/list.ts +++ b/src/commands/account/list.ts @@ -5,11 +5,36 @@ export class ListAccounts extends SwankyCommand { static description = "List dev accounts stored in config"; static aliases = [`account:ls`]; + constructor(argv: string[], baseConfig: any) { + super(argv, baseConfig); + (this.constructor as typeof SwankyCommand).ENSURE_SWANKY_CONFIG = false; + } + async run(): Promise { - this.log(`${chalk.greenBright("✔")} Stored dev accounts:`); + const countOfDevAccounts = this.swankyConfig.accounts.filter((account) => account.isDev).length; + + if(countOfDevAccounts !== 0) { + this.log(`${chalk.greenBright("✔")} Stored dev accounts:`); + + for (const account of this.swankyConfig.accounts) { + if(account.isDev){ + this.log(`\t${chalk.yellowBright("Alias: ")} ${account.alias} \ +${chalk.yellowBright("Address: ")} ${account.address} ${this.swankyConfig.defaultAccount === account.alias ? chalk.greenBright("<- Default") : ""}`); + } + } + } + + const countOfProdAccounts = this.swankyConfig.accounts.length - countOfDevAccounts; + + if(countOfProdAccounts !== 0) { + this.log(`${chalk.greenBright("✔")} Stored prod accounts:`); - for (const account of this.swankyConfig.accounts) { - this.log(`\t${chalk.yellowBright("Alias: ")} ${account.alias}`); + for (const account of this.swankyConfig.accounts) { + if(!account.isDev){ + this.log(`\t${chalk.yellowBright("Alias: ")} ${account.alias} \ +${chalk.yellowBright("Address: ")} ${account.address} ${this.swankyConfig.defaultAccount === account.alias ? chalk.greenBright("<- Default") : ""}`); + } + } } } } diff --git a/src/commands/check/index.ts b/src/commands/check/index.ts index 1875a8eb..eaa169fe 100644 --- a/src/commands/check/index.ts +++ b/src/commands/check/index.ts @@ -1,7 +1,7 @@ import { Listr } from "listr2"; import { commandStdoutOrNull, extractCargoContractVersion } from "../../lib/index.js"; import { SwankyConfig } from "../../types/index.js"; -import { pathExistsSync, readJSON, writeJson } from "fs-extra/esm"; +import { pathExistsSync, writeJson } from "fs-extra/esm"; import { readFileSync } from "fs"; import path from "node:path"; import TOML from "@iarna/toml"; @@ -31,7 +31,7 @@ interface Ctx { contracts: Record>; swankyNode: string | null; }; - swankyConfig?: SwankyConfig; + swankyConfig: SwankyConfig; mismatchedVersions: Record; looseDefinitionDetected: boolean; } @@ -46,11 +46,16 @@ export default class Check extends SwankyCommand { }), }; + constructor(argv: string[], baseConfig: any) { + super(argv, baseConfig); + (this.constructor as typeof SwankyCommand).ENSURE_SWANKY_CONFIG = false; + } + public async run(): Promise { const { flags } = await this.parse(Check); const swankyNodeVersion = this.swankyConfig.node.version; const isSwankyNodeInstalled = !!swankyNodeVersion; - const anyContracts = Object.keys(this.swankyConfig?.contracts).length > 0; + const anyContracts = Object.keys(this.swankyConfig.contracts ?? {}).length > 0; const tasks = new Listr([ { title: "Check OS", @@ -136,11 +141,9 @@ export default class Check extends SwankyCommand { { title: "Read ink dependencies", enabled: anyContracts, + skip: (ctx) => Object.keys(ctx.swankyConfig.contracts).length == 0, task: async (ctx) => { - const swankyConfig = await readJSON("swanky.config.json"); - ctx.swankyConfig = swankyConfig; - - for (const contract in swankyConfig.contracts) { + for (const contract in ctx.swankyConfig.contracts) { const tomlPath = path.resolve(`contracts/${contract}/Cargo.toml`); const doesCargoTomlExist = pathExistsSync(tomlPath); if (!doesCargoTomlExist) { @@ -168,7 +171,7 @@ export default class Check extends SwankyCommand { skip: (ctx) => Object.keys(ctx.versions.contracts).length === 0, enabled: anyContracts && isSwankyNodeInstalled, task: async (ctx) => { - const supportedInk = ctx.swankyConfig!.node.supportedInk; + const supportedInk = ctx.swankyConfig.node.supportedInk; const mismatched: Record = {}; Object.entries(ctx.versions.contracts).forEach(([contract, inkDependencies]) => { Object.entries(inkDependencies).forEach(([depName, version]) => { @@ -256,6 +259,7 @@ export default class Check extends SwankyCommand { contracts: {}, swankyNode: swankyNodeVersion || null, }, + swankyConfig: this.swankyConfig, looseDefinitionDetected: false, mismatchedVersions: {} }); diff --git a/src/commands/contract/compile.ts b/src/commands/contract/compile.ts index 56d87283..93a00538 100644 --- a/src/commands/contract/compile.ts +++ b/src/commands/contract/compile.ts @@ -3,9 +3,10 @@ import path from "node:path"; import { spawn } from "node:child_process"; import { pathExists } from "fs-extra/esm"; import { SwankyCommand } from "../../lib/swankyCommand.js"; -import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, Spinner, storeArtifacts } from "../../lib/index.js"; +import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, Spinner, storeArtifacts, configName, getSwankyConfig } from "../../lib/index.js"; import { ConfigError, InputError, ProcessError } from "../../lib/errors.js"; -import { BuildMode } from "../../index.js"; +import { BuildMode, SwankyConfig } from "../../index.js"; +import { ConfigBuilder } from "../../lib/config-builder.js"; export class CompileContract extends SwankyCommand { static description = "Compile the smart contract(s) in your contracts directory"; @@ -41,6 +42,8 @@ export class CompileContract extends SwankyCommand { async run(): Promise { const { args, flags } = await this.parse(CompileContract); + const localConfig = getSwankyConfig("local") as SwankyConfig; + if (args.contractName === undefined && !flags.all) { throw new InputError("No contracts were selected to compile", { winston: { stack: true } }); } @@ -55,7 +58,7 @@ export class CompileContract extends SwankyCommand { const contractInfo = this.swankyConfig.contracts[contractName]; if (!contractInfo) { throw new ConfigError( - `Cannot find contract info for ${contractName} contract in swanky.config.json`, + `Cannot find contract info for ${contractName} contract in "${configName()}"` ); } const contractPath = path.resolve("contracts", contractInfo.name); @@ -130,14 +133,18 @@ export class CompileContract extends SwankyCommand { return storeArtifacts(artifactsPath, contractInfo.name, contractInfo.moduleName); }, "Moving artifacts"); - this.swankyConfig.contracts[contractName].build = { - timestamp: Date.now(), - artifactsPath, - buildMode, - isVerified: false, - }; - - await this.storeConfig(); + await this.spinner.runCommand(async () => { + const buildData = { + timestamp: Date.now(), + artifactsPath, + buildMode, + isVerified: false, + }; + const newLocalConfig = new ConfigBuilder(localConfig) + .addContractBuild(args.contractName, buildData) + .build(); + await this.storeConfig(newLocalConfig, "local"); + }, "Writing config"); } } } diff --git a/src/commands/contract/deploy.ts b/src/commands/contract/deploy.ts index ac3489b4..44d3cd8d 100644 --- a/src/commands/contract/deploy.ts +++ b/src/commands/contract/deploy.ts @@ -1,22 +1,20 @@ import { Args, Flags } from "@oclif/core"; -import path from "node:path"; -import { writeJSON } from "fs-extra/esm"; import { cryptoWaitReady } from "@polkadot/util-crypto/crypto"; -import { AbiType, ChainAccount, ChainApi, decrypt, resolveNetworkUrl } from "../../lib/index.js"; -import { BuildMode, Encrypted } from "../../types/index.js"; +import { AbiType, ChainAccount, ChainApi, decrypt, resolveNetworkUrl, ensureAccountIsSet, configName, getSwankyConfig } from "../../lib/index.js"; +import { BuildMode, Encrypted, SwankyConfig } from "../../types/index.js"; import inquirer from "inquirer"; import chalk from "chalk"; import { Contract } from "../../lib/contract.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; -import { ApiError, ConfigError, FileError, ProcessError } from "../../lib/errors.js"; +import { ApiError, ConfigError, FileError, InputError, ProcessError } from "../../lib/errors.js"; +import { ConfigBuilder } from "../../lib/config-builder.js"; export class DeployContract extends SwankyCommand { static description = "Deploy contract to a running node"; static flags = { account: Flags.string({ - required: true, - description: "Alias of account to be used", + description: "Account alias to deploy contract with", }), gas: Flags.integer({ char: "g", @@ -32,6 +30,7 @@ export class DeployContract extends SwankyCommand { }), network: Flags.string({ char: "n", + default: "local", description: "Network name to connect to", }), }; @@ -47,10 +46,11 @@ export class DeployContract extends SwankyCommand { async run(): Promise { const { args, flags } = await this.parse(DeployContract); - const contractRecord = this.swankyConfig.contracts[args.contractName]; + const localConfig = getSwankyConfig("local") as SwankyConfig; + const contractRecord = localConfig.contracts[args.contractName]; if (!contractRecord) { throw new ConfigError( - `Cannot find a contract named ${args.contractName} in swanky.config.json` + `Cannot find a contract named ${args.contractName} in "${configName()}"` ); } @@ -97,7 +97,22 @@ export class DeployContract extends SwankyCommand { }); } - const accountData = this.findAccountByAlias(flags.account); + ensureAccountIsSet(flags.account, this.swankyConfig); + + const accountAlias = flags.account ?? this.swankyConfig.defaultAccount; + + if (accountAlias === null) { + throw new InputError(`An account is required to deploy ${args.contractName}`); + } + + const accountData = this.findAccountByAlias(accountAlias); + + if (accountData.isDev && flags.network !== "local") { + throw new ConfigError( + `Account ${accountAlias} is a DEV account and can only be used with local network` + ); + } + const mnemonic = accountData.isDev ? (accountData.mnemonic as string) : decrypt( @@ -149,19 +164,16 @@ export class DeployContract extends SwankyCommand { }, "Deploying")) as string; await this.spinner.runCommand(async () => { - contractRecord.deployments = [ - ...contractRecord.deployments, - { - timestamp: Date.now(), - address: contractAddress, - networkUrl, - deployerAlias: flags.account, - }, - ]; - - await writeJSON(path.resolve("swanky.config.json"), this.swankyConfig, { - spaces: 2, - }); + const deploymentData = { + timestamp: Date.now(), + address: contractAddress, + networkUrl, + deployerAlias: accountAlias, + }; + const newLocalConfig = new ConfigBuilder(localConfig) + .addContractDeployment(args.contractName, deploymentData) + .build(); + await this.storeConfig(newLocalConfig, "local"); }, "Writing config"); this.log(`Contract deployed!`); diff --git a/src/commands/contract/explain.ts b/src/commands/contract/explain.ts index b171338d..3efba84e 100644 --- a/src/commands/contract/explain.ts +++ b/src/commands/contract/explain.ts @@ -2,6 +2,7 @@ import { SwankyCommand } from "../../lib/swankyCommand.js"; import { Args } from "@oclif/core"; import { Contract } from "../../lib/contract.js"; import { ConfigError, FileError } from "../../lib/errors.js"; +import { configName } from "../../lib/index.js"; export class ExplainContract extends SwankyCommand { static description = "Explain contract messages based on the contracts' metadata"; @@ -20,7 +21,7 @@ export class ExplainContract extends SwankyCommand { const contractRecord = this.swankyConfig.contracts[args.contractName]; if (!contractRecord) { throw new ConfigError( - `Cannot find a contract named ${args.contractName} in swanky.config.json` + `Cannot find a contract named ${args.contractName} in "${configName()}"` ); } diff --git a/src/commands/contract/new.ts b/src/commands/contract/new.ts index c671886f..0547f2eb 100644 --- a/src/commands/contract/new.ts +++ b/src/commands/contract/new.ts @@ -1,12 +1,13 @@ import { Args, Flags } from "@oclif/core"; import path from "node:path"; -import { ensureDir, pathExists, pathExistsSync, writeJSON } from "fs-extra/esm"; +import { ensureDir, pathExists, pathExistsSync } from "fs-extra/esm"; import { checkCliDependencies, copyContractTemplateFiles, processTemplates, getTemplates, prepareTestFiles, + getSwankyConfig, } from "../../lib/index.js"; import { email, name, pickTemplate } from "../../lib/prompts.js"; import { paramCase, pascalCase, snakeCase } from "change-case"; @@ -14,6 +15,7 @@ import { execaCommandSync } from "execa"; import inquirer from "inquirer"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { InputError } from "../../lib/errors.js"; +import { ConfigBuilder } from "../../lib/config-builder.js"; export class NewContract extends SwankyCommand { static description = "Generate a new smart contract template inside a project"; @@ -108,13 +110,10 @@ export class NewContract extends SwankyCommand { await ensureDir(path.resolve(projectPath, "artifacts", args.contractName)); await this.spinner.runCommand(async () => { - this.swankyConfig.contracts[args.contractName] = { - name: args.contractName, - moduleName: snakeCase(args.contractName), - deployments: [], - }; - - await writeJSON(path.resolve("swanky.config.json"), this.swankyConfig, { spaces: 2 }); + const newLocalConfig = new ConfigBuilder(getSwankyConfig("local")) + .addContract(args.contractName) + .build(); + await this.storeConfig(newLocalConfig, "local"); }, "Writing config"); this.log("😎 New contract successfully generated! 😎"); diff --git a/src/commands/contract/query.ts b/src/commands/contract/query.ts index b094103c..0442c1e5 100644 --- a/src/commands/contract/query.ts +++ b/src/commands/contract/query.ts @@ -6,13 +6,15 @@ export class Query extends ContractCall { static args = { ...ContractCall.callArgs }; + static flags = { ...ContractCall.callFlags }; + public async run(): Promise { const { flags, args } = await this.parse(Query); const contract = new ContractPromise( this.api.apiInst, this.metadata, - this.deploymentInfo.address + this.deploymentInfo.address, ); const storageDepositLimit = null; @@ -27,7 +29,7 @@ export class Query extends ContractCall { gasLimit, storageDepositLimit, }, - ...flags.params + ...flags.params, ); await this.api.apiInst.disconnect(); diff --git a/src/commands/contract/test.ts b/src/commands/contract/test.ts index 3ef72bfe..29bd6e6a 100644 --- a/src/commands/contract/test.ts +++ b/src/commands/contract/test.ts @@ -9,7 +9,7 @@ import { Contract } from "../../lib/contract.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { ConfigError, FileError, InputError, ProcessError, TestError } from "../../lib/errors.js"; import { spawn } from "node:child_process"; -import { Spinner } from "../../lib/index.js"; +import { configName, Spinner } from "../../lib/index.js"; declare global { var contractTypesPath: string; // eslint-disable-line no-var @@ -55,7 +55,7 @@ export class TestContract extends SwankyCommand { const contractRecord = this.swankyConfig.contracts[contractName]; if (!contractRecord) { throw new ConfigError( - `Cannot find a contract named ${args.contractName} in swanky.config.json` + `Cannot find a contract named ${args.contractName} in "${configName()}"` ); } diff --git a/src/commands/contract/tx.ts b/src/commands/contract/tx.ts index b7153789..dbe13ce0 100644 --- a/src/commands/contract/tx.ts +++ b/src/commands/contract/tx.ts @@ -12,11 +12,7 @@ export class Tx extends ContractCall { char: "d", description: "Do a dry run, without signing the transaction", }), - account: Flags.string({ - required: true, - char: "a", - description: "Account to sign the transaction with", - }), + ...ContractCall.callFlags, }; static args = { ...ContractCall.callArgs }; diff --git a/src/commands/contract/verify.ts b/src/commands/contract/verify.ts index e6ea3991..a0d4b85f 100644 --- a/src/commands/contract/verify.ts +++ b/src/commands/contract/verify.ts @@ -1,10 +1,12 @@ import { Args, Flags } from "@oclif/core"; import path from "node:path"; -import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, Spinner } from "../../lib/index.js"; +import { ensureCargoContractVersionCompatibility, extractCargoContractVersion, getSwankyConfig, Spinner } from "../../lib/index.js"; import { pathExists } from "fs-extra/esm"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { ConfigError, InputError, ProcessError } from "../../lib/errors.js"; import { spawn } from "node:child_process"; +import { ConfigBuilder } from "../../lib/config-builder.js"; +import { BuildData, SwankyConfig } from "../../index.js"; export class VerifyContract extends SwankyCommand { static description = "Verify the smart contract(s) in your contracts directory"; @@ -29,6 +31,8 @@ export class VerifyContract extends SwankyCommand { async run(): Promise { const { args, flags } = await this.parse(VerifyContract); + const localConfig = getSwankyConfig("local") as SwankyConfig; + const cargoContractVersion = extractCargoContractVersion(); if (cargoContractVersion === null) throw new InputError( @@ -112,11 +116,20 @@ export class VerifyContract extends SwankyCommand { `Verifying ${contractName} contract`, `${contractName} Contract verified successfully` ); - contractInfo.build.isVerified = true; - this.swankyConfig.contracts[contractName] = contractInfo; + await this.spinner.runCommand(async () => { + const buildData = { + ...contractInfo.build, + isVerified: true + } as BuildData; + + const newLocalConfig = new ConfigBuilder(localConfig) + .addContractBuild(args.contractName, buildData) + .build(); + + await this.storeConfig(newLocalConfig, "local"); + }, "Writing config"); - await this.storeConfig(); } } } diff --git a/src/commands/generate/types.ts b/src/commands/generate/types.ts index 79cf6134..a6c0ed24 100644 --- a/src/commands/generate/types.ts +++ b/src/commands/generate/types.ts @@ -1,5 +1,5 @@ import { Args } from "@oclif/core"; -import { generateTypes } from "../../lib/index.js"; +import { configName, generateTypes } from "../../lib/index.js"; import { Contract } from "../../lib/contract.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { ConfigError, FileError } from "../../lib/errors.js"; @@ -21,7 +21,7 @@ export class GenerateTypes extends SwankyCommand { const contractRecord = this.swankyConfig.contracts[args.contractName]; if (!contractRecord) { throw new ConfigError( - `Cannot find a contract named ${args.contractName} in swanky.config.json` + `Cannot find a contract named ${args.contractName} in "${configName()}"`, ); } @@ -29,7 +29,7 @@ export class GenerateTypes extends SwankyCommand { if (!(await contract.pathExists())) { throw new FileError( - `Path to contract ${args.contractName} does not exist: ${contract.contractPath}` + `Path to contract ${args.contractName} does not exist: ${contract.contractPath}`, ); } @@ -37,7 +37,7 @@ export class GenerateTypes extends SwankyCommand { if (!artifactsCheck.result) { throw new FileError( - `No artifact file found at path: ${artifactsCheck.missingPaths.toString()}` + `No artifact file found at path: ${artifactsCheck.missingPaths.toString()}`, ); } diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index a8915be3..6a2ed7a7 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -8,7 +8,7 @@ import inquirer from "inquirer"; import TOML from "@iarna/toml"; import { choice, email, name, pickNodeVersion, pickTemplate } from "../../lib/prompts.js"; import { - ChainAccount, + buildSwankyConfig, checkCliDependencies, copyCommonTemplateFiles, copyContractTemplateFiles, @@ -19,20 +19,14 @@ import { processTemplates, swankyNodeVersions } from "../../lib/index.js"; -import { - ALICE_URI, BOB_URI, - DEFAULT_ASTAR_NETWORK_URL, - DEFAULT_NETWORK_URL, DEFAULT_NODE_INFO, - DEFAULT_SHIBUYA_NETWORK_URL, - DEFAULT_SHIDEN_NETWORK_URL, -} from "../../lib/consts.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { InputError, UnknownError } from "../../lib/errors.js"; import { globby, GlobEntry } from "globby"; import { merge } from "lodash-es"; import inquirerFuzzyPath from "inquirer-fuzzy-path"; -import { SwankyConfig } from "../../types/index.js"; import chalk from "chalk"; +import { ConfigBuilder } from "../../lib/config-builder.js"; +import { DEFAULT_NODE_INFO } from "../../lib/consts.js"; type TaskFunction = (...args: any[]) => any; @@ -96,26 +90,10 @@ export class Init extends SwankyCommand { projectPath = ""; - - configBuilder: Partial = { - node: { - localPath: "", - polkadotPalletVersions: "", - supportedInk: "", - version: "", - }, - accounts: [], - networks: { - local: { url: DEFAULT_NETWORK_URL }, - astar: { url: DEFAULT_ASTAR_NETWORK_URL }, - shiden: { url: DEFAULT_SHIDEN_NETWORK_URL }, - shibuya: { url: DEFAULT_SHIBUYA_NETWORK_URL }, - }, - contracts: {}, - }; - taskQueue: Task[] = []; + configBuilder = new ConfigBuilder(buildSwankyConfig()); + async run(): Promise { const { args, flags } = await this.parse(Init); @@ -180,44 +158,23 @@ export class Init extends SwankyCommand { task: downloadNode, args: [this.projectPath, nodeInfo, this.spinner], runningMessage: "Downloading Swanky node", - callback: (result) => { - this.configBuilder.node = { - supportedInk: nodeInfo.supportedInk, - polkadotPalletVersions: nodeInfo.polkadotPalletVersions, - version: nodeInfo.version, - localPath: result, - }; - } + callback: (localPath) => this.configBuilder.updateNodeSettings({ supportedInk: nodeInfo.supportedInk, + polkadotPalletVersions: nodeInfo.polkadotPalletVersions, + version: nodeInfo.version, localPath }), }); } } - this.configBuilder.accounts = [ - { - alias: "alice", - mnemonic: ALICE_URI, - isDev: true, - address: new ChainAccount(ALICE_URI).pair.address, - }, - { - alias: "bob", - mnemonic: BOB_URI, - isDev: true, - address: new ChainAccount(BOB_URI).pair.address, - }, - ]; - - Object.keys(this.configBuilder.contracts!).forEach(async (contractName) => { + Object.keys(this.swankyConfig.contracts).forEach(async (contractName) => { await ensureDir(path.resolve(this.projectPath, "artifacts", contractName)); }); this.taskQueue.push({ - task: () => - writeJSON(path.resolve(this.projectPath, "swanky.config.json"), this.configBuilder, { - spaces: 2, - }), + task: async () => + await this.storeConfig(this.configBuilder.build(), "local", this.projectPath), args: [], runningMessage: "Writing config", + shouldExitOnError: true, }); for (const { @@ -314,13 +271,13 @@ export class Init extends SwankyCommand { runningMessage: "Processing templates", }); - this.configBuilder.contracts = { + this.configBuilder.updateContracts( { [contractName as string]: { name: contractName, moduleName: snakeCase(contractName), deployments: [], }, - }; + }); } async convert(pathToExistingProject: string, projectName: string) { @@ -390,14 +347,8 @@ export class Init extends SwankyCommand { }, }); - if (!this.configBuilder.contracts) this.configBuilder.contracts = {}; - for (const contract of confirmedCopyList.contracts) { - this.configBuilder.contracts[contract.name] = { - name: contract.name, - moduleName: contract.moduleName!, - deployments: [], - }; + this.configBuilder.addContract(contract.name, contract.moduleName); } let rootToml = await readRootCargoToml(pathToExistingProject); diff --git a/src/commands/node/install.ts b/src/commands/node/install.ts index 79beab3e..9af510e1 100644 --- a/src/commands/node/install.ts +++ b/src/commands/node/install.ts @@ -1,9 +1,9 @@ import { SwankyCommand } from "../../lib/swankyCommand.js"; import { Flags } from "@oclif/core"; -import { downloadNode, swankyNodeVersions } from "../../lib/index.js"; +import { downloadNode, getSwankyConfig, swankyNodeVersions } from "../../lib/index.js"; import path from "node:path"; -import { writeJSON } from "fs-extra/esm"; import inquirer from "inquirer"; +import { ConfigBuilder } from "../../lib/config-builder.js"; import { DEFAULT_NODE_INFO } from "../../lib/consts.js"; import { choice, pickNodeVersion } from "../../lib/prompts.js"; import { InputError } from "../../lib/errors.js"; @@ -55,23 +55,19 @@ export class InstallNode extends SwankyCommand { () => downloadNode(projectPath, nodeInfo, this.spinner), "Downloading Swanky node" )) as string; - const nodePath = path.relative(projectPath, taskResult); + const nodePath = path.resolve(projectPath, taskResult); - - this.swankyConfig.node = { - localPath: nodePath, - polkadotPalletVersions: nodeInfo.polkadotPalletVersions, - supportedInk: nodeInfo.supportedInk, - version: nodeInfo.version, - }; - - await this.spinner.runCommand( - () => - writeJSON(path.resolve(projectPath, "swanky.config.json"), this.swankyConfig, { - spaces: 2, - }), - "Updating swanky config" - ); + await this.spinner.runCommand(async () => { + const newLocalConfig = new ConfigBuilder(getSwankyConfig("local")) + .updateNodeSettings({ + localPath: nodePath, + polkadotPalletVersions: nodeInfo.polkadotPalletVersions, + supportedInk: nodeInfo.supportedInk, + version: nodeInfo.version, + }) + .build(); + await this.storeConfig(newLocalConfig, "local"); + }, "Updating swanky config"); this.log("Swanky Node Installed successfully"); } diff --git a/src/commands/node/start.ts b/src/commands/node/start.ts index e92e65e6..53a85590 100644 --- a/src/commands/node/start.ts +++ b/src/commands/node/start.ts @@ -29,9 +29,8 @@ export class StartNode extends SwankyCommand { async run(): Promise { const { flags } = await this.parse(StartNode); - if (this.swankyConfig.node.version === "") { - this.log("Node is not installed"); - return; + if(this.swankyConfig.node.localPath === "") { + this.error("Swanky node is not installed. Please run `swanky node:install` first."); } // Run persistent mode by default. non-persistent mode in case flag is provided. // Non-Persistent mode (`--dev`) allows all CORS origin, without `--dev`, users need to specify origins by `--rpc-cors`. diff --git a/src/lib/command-utils.ts b/src/lib/command-utils.ts index 4478b6ee..270ea732 100644 --- a/src/lib/command-utils.ts +++ b/src/lib/command-utils.ts @@ -1,9 +1,22 @@ import { execaCommand, execaCommandSync } from "execa"; -import { copy, emptyDir, ensureDir, readJSON } from "fs-extra/esm"; +import { copy, emptyDir, ensureDir, readJSONSync } from "fs-extra/esm"; import path from "node:path"; -import { DEFAULT_NETWORK_URL, ARTIFACTS_PATH, TYPED_CONTRACTS_PATH } from "./consts.js"; -import { SwankyConfig } from "../types/index.js"; -import { ConfigError, FileError, InputError } from "./errors.js"; +import { + DEFAULT_NETWORK_URL, + ARTIFACTS_PATH, + TYPED_CONTRACTS_PATH, + DEFAULT_SHIBUYA_NETWORK_URL, + DEFAULT_SHIDEN_NETWORK_URL, + DEFAULT_ASTAR_NETWORK_URL, + DEFAULT_ACCOUNT, + DEFAULT_CONFIG_NAME, + DEFAULT_CONFIG_FOLDER_NAME, + DEFAULT_NODE_INFO, +} from "./consts.js"; +import { SwankyConfig, SwankySystemConfig } from "../types/index.js"; +import { ConfigError, FileError } from "./errors.js"; +import { userInfo } from "os"; +import { existsSync } from "fs"; export function commandStdoutOrNull(command: string): string | null { try { @@ -14,13 +27,24 @@ export function commandStdoutOrNull(command: string): string | null { } } -export async function getSwankyConfig(): Promise { - try { - const config = await readJSON("swanky.config.json"); - return config; - } catch (cause) { - throw new InputError("Error reading swanky.config.json in the current directory!", { cause }); +export function getSwankyConfig(configType: "local" | "global"): SwankyConfig | SwankySystemConfig { + let configPath: string; + + if (configType === "global") { + configPath = getSystemConfigDirectoryPath() + `/${DEFAULT_CONFIG_NAME}`; + } else { + configPath = isEnvConfigCheck() ? process.env.SWANKY_CONFIG! : DEFAULT_CONFIG_NAME; } + + const config = readJSONSync(configPath); + return config; +} + + +export function getSystemConfigDirectoryPath(): string { + const homeDir = userInfo().homedir; + const configPath = homeDir + `/${DEFAULT_CONFIG_FOLDER_NAME}`; + return configPath; } export function resolveNetworkUrl(config: SwankyConfig, networkName: string): string { @@ -120,3 +144,66 @@ export async function generateTypes(contractName: string) { `npx typechain-polkadot --in ${relativeInputPath} --out ${relativeOutputPath}` ); } +export function ensureAccountIsSet(account: string | undefined, config: SwankyConfig) { + if(!account && config.defaultAccount === null) { + throw new ConfigError("No default account set. Please set one or provide an account alias with --account"); + } +} + +export function buildSwankyConfig() { + return { + node: { + localPath: "", + polkadotPalletVersions: DEFAULT_NODE_INFO.polkadotPalletVersions, + supportedInk: DEFAULT_NODE_INFO.supportedInk, + version: DEFAULT_NODE_INFO.version, + }, + defaultAccount: DEFAULT_ACCOUNT, + accounts: [ + { + "alias": "alice", + "mnemonic": "//Alice", + "isDev": true, + "address": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + }, + { + "alias": "bob", + "mnemonic": "//Bob", + "isDev": true, + "address": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" + }, + ], + networks: { + local: { url: DEFAULT_NETWORK_URL }, + astar: { url: DEFAULT_ASTAR_NETWORK_URL }, + shiden: { url: DEFAULT_SHIDEN_NETWORK_URL }, + shibuya: { url: DEFAULT_SHIBUYA_NETWORK_URL }, + }, + contracts: {}, + }; +} + +export function isEnvConfigCheck(): boolean { + if (process.env.SWANKY_CONFIG === undefined) { + return false; + } else if (existsSync(process.env.SWANKY_CONFIG)) { + return true; + } else { + throw new ConfigError(`Provided config path ${process.env.SWANKY_CONFIG} does not exist`); + } +} + +export function isLocalConfigCheck(): boolean { + const defaultLocalConfigPath = process.cwd() + `/${DEFAULT_CONFIG_NAME}`; + return process.env.SWANKY_CONFIG === undefined + ? existsSync(defaultLocalConfigPath) + : existsSync(process.env.SWANKY_CONFIG); +} + +export function configName(): string { + if (!isLocalConfigCheck()) { + return DEFAULT_CONFIG_NAME + " [system config]"; + } + + return process.env.SWANKY_CONFIG?.split("/").pop() ?? DEFAULT_CONFIG_NAME; +} \ No newline at end of file diff --git a/src/lib/config-builder.ts b/src/lib/config-builder.ts new file mode 100644 index 00000000..ace3fccd --- /dev/null +++ b/src/lib/config-builder.ts @@ -0,0 +1,70 @@ +import { AccountData, BuildData, DeploymentData, SwankyConfig, SwankySystemConfig } from "../index.js"; +import { snakeCase } from "change-case"; + +export class ConfigBuilder { + private config: T; + + constructor(existingConfig: T) { + this.config = { ...existingConfig }; + } + + setDefaultAccount(account: string): ConfigBuilder { + this.config.defaultAccount = account; + return this; + } + + addAccount(account: AccountData): ConfigBuilder { + this.config.accounts.push(account); + return this; + } + + updateNetwork(name: string, url: string): ConfigBuilder { + if (this.config.networks?.[name]) { + this.config.networks[name].url = url; + } + return this; + } + + updateNodeSettings(nodeSettings: Partial): ConfigBuilder { + if ("node" in this.config) { + this.config.node = { ...this.config.node, ...nodeSettings }; + } + return this; + } + + updateContracts(contracts: SwankyConfig["contracts"]): ConfigBuilder { + if ("contracts" in this.config) { + this.config.contracts = { ...contracts }; + } + return this; + } + + addContract(name: string, moduleName?: string): ConfigBuilder { + if ("contracts" in this.config) { + this.config.contracts[name] = { + name: name, + moduleName: moduleName ?? snakeCase(name), + deployments: [], + }; + } + return this; + } + + addContractDeployment(name: string, data: DeploymentData): ConfigBuilder { + if ("contracts" in this.config) { + this.config.contracts[name].deployments.push(data); + } + return this; + } + + addContractBuild(name: string, data: BuildData): ConfigBuilder { + if ("contracts" in this.config) { + this.config.contracts[name].build = data; + } + return this; + } + + build(): T { + return this.config; + } +} diff --git a/src/lib/consts.ts b/src/lib/consts.ts index b9391283..8883913b 100644 --- a/src/lib/consts.ts +++ b/src/lib/consts.ts @@ -7,6 +7,10 @@ export const DEFAULT_ASTAR_NETWORK_URL = "wss://rpc.astar.network"; export const DEFAULT_SHIDEN_NETWORK_URL = "wss://rpc.shiden.astar.network"; export const DEFAULT_SHIBUYA_NETWORK_URL = "wss://shibuya.public.blastapi.io"; +export const DEFAULT_ACCOUNT = "alice"; +export const DEFAULT_CONFIG_FOLDER_NAME = "swanky"; +export const DEFAULT_CONFIG_NAME = "swanky.config.json"; + export const ARTIFACTS_PATH = "artifacts"; export const TYPED_CONTRACTS_PATH = "typedContracts"; diff --git a/src/lib/contractCall.ts b/src/lib/contractCall.ts index 9c9e0b2f..a65f4894 100644 --- a/src/lib/contractCall.ts +++ b/src/lib/contractCall.ts @@ -1,4 +1,4 @@ -import { AbiType, ChainAccount, ChainApi, decrypt, resolveNetworkUrl } from "./index.js"; +import { AbiType, ChainAccount, ChainApi, configName, ensureAccountIsSet, decrypt, resolveNetworkUrl } from "./index.js"; import { ContractData, DeploymentData, Encrypted } from "../types/index.js"; import { Args, Command, Flags, Interfaces } from "@oclif/core"; import inquirer from "inquirer"; @@ -28,6 +28,14 @@ export abstract class ContractCall extends SwankyComma }), }; + static callFlags = { + network: Flags.string({ + char: "n", + default: "local", + description: "Name of network to connect to", + }), + } + protected flags!: JoinedFlagsType; protected args!: Record; protected contractInfo!: ContractData; @@ -40,11 +48,12 @@ export abstract class ContractCall extends SwankyComma await super.init(); const { flags, args } = await this.parse(this.ctor); this.args = args; + this.flags = flags as JoinedFlagsType; const contractRecord = this.swankyConfig.contracts[args.contractName]; if (!contractRecord) { throw new ConfigError( - `Cannot find a contract named ${args.contractName} in swanky.config.json` + `Cannot find a contract named ${args.contractName} in "${configName()}"`, ); } @@ -52,7 +61,7 @@ export abstract class ContractCall extends SwankyComma if (!(await contract.pathExists())) { throw new FileError( - `Path to contract ${args.contractName} does not exist: ${contract.contractPath}` + `Path to contract ${args.contractName} does not exist: ${contract.contractPath}`, ); } @@ -60,24 +69,32 @@ export abstract class ContractCall extends SwankyComma if (!artifactsCheck.result) { throw new FileError( - `No artifact file found at path: ${artifactsCheck.missingPaths.toString()}` + `No artifact file found at path: ${artifactsCheck.missingPaths.toString()}`, ); } const deploymentData = flags.address ? contract.deployments.find( - (deployment: DeploymentData) => deployment.address === flags.address - ) + (deployment: DeploymentData) => deployment.address === flags.address, + ) : contract.deployments[0]; if (!deploymentData?.address) throw new NetworkError( - `Cannot find a deployment with address: ${flags.address} in swanky.config.json` + `Cannot find a deployment with address: ${flags.address} in "${configName()}"`, ); this.deploymentInfo = deploymentData; + ensureAccountIsSet(flags.account, this.swankyConfig); + + const accountAlias = flags.account ?? this.swankyConfig.defaultAccount; const accountData = this.findAccountByAlias(flags.account || "alice"); + + if (accountData.isDev && (flags.network !== "local" || !flags.network)) { + throw new ConfigError(`Account ${chalk.redBright(accountAlias)} is a dev account and can only be used on the local network`); + } + const networkUrl = resolveNetworkUrl(this.swankyConfig, flags.network ?? ""); const api = await ChainApi.create(networkUrl); this.api = api; @@ -86,17 +103,17 @@ export abstract class ContractCall extends SwankyComma const mnemonic = accountData.isDev ? (accountData.mnemonic as string) : decrypt( - accountData.mnemonic as Encrypted, - ( - await inquirer.prompt([ - { - type: "password", - message: `Enter password for ${chalk.yellowBright(accountData.alias)}: `, - name: "password", - }, - ]) - ).password - ); + accountData.mnemonic as Encrypted, + ( + await inquirer.prompt([ + { + type: "password", + message: `Enter password for ${chalk.yellowBright(accountData.alias)}: `, + name: "password", + }, + ]) + ).password, + ); const account = (await this.spinner.runCommand(async () => { await cryptoWaitReady(); @@ -143,7 +160,7 @@ ContractCall.baseFlags = { }), account: Flags.string({ char: "a", - description: "Account to sign the transaction with", + description: "Account alias to sign the transaction with", }), address: Flags.string({ required: false, diff --git a/src/lib/swankyCommand.ts b/src/lib/swankyCommand.ts index 4f2b5a73..a184cb86 100644 --- a/src/lib/swankyCommand.ts +++ b/src/lib/swankyCommand.ts @@ -1,11 +1,18 @@ import { Command, Flags, Interfaces } from "@oclif/core"; import chalk from "chalk"; -import { getSwankyConfig, Spinner } from "./index.js"; -import { AccountData, SwankyConfig } from "../types/index.js"; +import { buildSwankyConfig, + configName, + getSwankyConfig, + getSystemConfigDirectoryPath, Spinner } from "./index.js"; +import { AccountData, SwankyConfig, SwankySystemConfig } from "../types/index.js"; import { writeJSON } from "fs-extra/esm"; +import { existsSync, mkdirSync } from "fs"; import { BaseError, ConfigError, UnknownError } from "./errors.js"; import { swankyLogger } from "./logger.js"; import { Logger } from "winston"; +import path from "node:path"; +import { DEFAULT_CONFIG_FOLDER_NAME, DEFAULT_CONFIG_NAME } from "./consts.js"; + export type Flags = Interfaces.InferredFlags< (typeof SwankyCommand)["baseFlags"] & T["flags"] >; @@ -31,20 +38,14 @@ export abstract class SwankyCommand extends Command { args: this.ctor.args, strict: this.ctor.strict, }); + this.flags = flags as Flags; this.args = args as Args; this.logger = swankyLogger; - try { - this.swankyConfig = await getSwankyConfig(); - } catch (error) { - if ( - error instanceof Error && - error.message.includes("swanky.config.json") && - (this.constructor as typeof SwankyCommand).ENSURE_SWANKY_CONFIG - ) - throw new ConfigError("Cannot find swanky.config.json", { cause: error }); - } + this.swankyConfig = buildSwankyConfig(); + + await this.loadAndMergeConfig(); this.logger.info(`Running command: ${this.ctor.name} Args: ${JSON.stringify(this.args)} @@ -52,6 +53,91 @@ export abstract class SwankyCommand extends Command { Full command: ${JSON.stringify(process.argv)}`); } + protected async loadAndMergeConfig(): Promise { + try { + const systemConfig = getSwankyConfig("global"); + 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` + ); + await this.storeConfig(this.swankyConfig, "global"); + } + + try { + const localConfig = getSwankyConfig("local") as SwankyConfig; + this.mergeAccountsWithExistingConfig(this.swankyConfig, localConfig); + const originalDefaultAccount = this.swankyConfig.defaultAccount; + this.swankyConfig = { ...this.swankyConfig, ...localConfig }; + this.swankyConfig.defaultAccount = localConfig.defaultAccount ?? originalDefaultAccount; + } catch (error) { + this.handleLocalConfigError(error); + } + } + + private handleLocalConfigError(error: unknown): void { + this.logger.warn("No local config found"); + if ( + error instanceof Error && + error.message.includes(configName()) && + (this.constructor as typeof SwankyCommand).ENSURE_SWANKY_CONFIG + ) { + throw new ConfigError(`Cannot find ${process.env.SWANKY_CONFIG ?? DEFAULT_CONFIG_NAME}`, { + cause: error, + }); + } + } + + protected async storeConfig( + newConfig: SwankyConfig | SwankySystemConfig, + configType: "local" | "global", + projectPath?: string + ) { + let configPath: string; + + if (configType === "local") { + configPath = + process.env.SWANKY_CONFIG ?? + path.resolve(projectPath ?? process.cwd(), DEFAULT_CONFIG_NAME); + } else { + // global + configPath = getSystemConfigDirectoryPath() + `/${DEFAULT_CONFIG_NAME}`; + if ("node" in newConfig) { + // If it's a SwankyConfig, extract only the system relevant parts for the global SwankySystemConfig config + newConfig = { + defaultAccount: newConfig.defaultAccount, + accounts: newConfig.accounts, + networks: newConfig.networks, + }; + } + if (existsSync(configPath)) { + const systemConfig = getSwankyConfig("global"); + this.mergeAccountsWithExistingConfig(systemConfig, newConfig); + } + } + + this.ensureDirectoryExists(configPath); + await writeJSON(configPath, newConfig, { spaces: 2 }); + } + + private ensureDirectoryExists(filePath: string) { + const directory = path.dirname(filePath); + if (!existsSync(directory)) { + mkdirSync(directory, { recursive: true }); + } + } + + private mergeAccountsWithExistingConfig( + existingConfig: SwankySystemConfig | SwankyConfig, + newConfig: SwankySystemConfig + ) { + const accountMap = new Map( + [...existingConfig.accounts, ...newConfig.accounts].map((account) => [account.alias, account]) + ); + + newConfig.accounts = Array.from(accountMap.values()); + } + protected findAccountByAlias(alias: string): AccountData { const accountData = this.swankyConfig.accounts.find( (account: AccountData) => account.alias === alias @@ -64,10 +150,6 @@ export abstract class SwankyCommand extends Command { return accountData; } - protected async storeConfig() { - await writeJSON("swanky.config.json", this.swankyConfig, { spaces: 2 }); - } - protected async catch(err: Error & { exitCode?: number }): Promise { // add any custom logic to handle errors from the command // or simply return the parent class error handling diff --git a/src/types/index.ts b/src/types/index.ts index 0dab9358..8e0af423 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -24,7 +24,7 @@ export interface ContractData { name: string; moduleName: string; build?: BuildData; - deployments: DeploymentData[] | []; + deployments: DeploymentData[]; } export interface BuildData { @@ -40,15 +40,19 @@ export interface DeploymentData { deployerAlias: string; address: string; } -export interface SwankyConfig { +export interface SwankyConfig extends SwankySystemConfig{ node: { polkadotPalletVersions: string; localPath: string; supportedInk: string; version: string; }; - accounts: AccountData[]; contracts: Record | Record; +} + +export interface SwankySystemConfig { + defaultAccount: string | null; + accounts: AccountData[]; networks: Record } From f6e32e5b4066a58e3cca8e8a01825e464c46e859 Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Tue, 27 Feb 2024 13:35:49 +0200 Subject: [PATCH 08/19] feat: Integrate Zombienet for XCM development and testing (#66) Co-authored-by: Igor Papandinas --- package.json | 1 + src/commands/init/index.ts | 2 +- src/commands/zombienet/init.ts | 105 +++++++++++ src/commands/zombienet/start.ts | 40 ++++ src/lib/config-builder.ts | 9 +- src/lib/tasks.ts | 176 +++++++++++++++++- src/lib/templates.ts | 2 + src/lib/zombienetInfo.ts | 52 ++++++ src/templates/zombienet/astar-collator.toml | 69 +++++++ .../zombienet/polkadot-parachain.toml | 7 + src/templates/zombienet/polkadot.toml | 15 ++ src/templates/zombienet/zombienet.config.toml | 16 ++ src/types/index.ts | 52 ++++++ 13 files changed, 534 insertions(+), 12 deletions(-) create mode 100644 src/commands/zombienet/init.ts create mode 100644 src/commands/zombienet/start.ts create mode 100644 src/lib/zombienetInfo.ts create mode 100644 src/templates/zombienet/astar-collator.toml create mode 100644 src/templates/zombienet/polkadot-parachain.toml create mode 100644 src/templates/zombienet/polkadot.toml create mode 100644 src/templates/zombienet/zombienet.config.toml diff --git a/package.json b/package.json index 02caec52..202efaf4 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "ora": "6.3.1", "semver": "7.5.4", "shelljs": "0.8.5", + "toml": "^3.0.0", "ts-mocha": "^10.0.0", "winston": "^3.10.0" }, diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index 6a2ed7a7..1cbe45ce 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -197,7 +197,7 @@ export class Init extends SwankyCommand { callback(result as string); } } - this.log("🎉 😎 Swanky project successfully initialised! 😎 🎉"); + this.log("🎉 😎 Swanky project successfully initialized! 😎 🎉"); } async generate(projectName: string) { diff --git a/src/commands/zombienet/init.ts b/src/commands/zombienet/init.ts new file mode 100644 index 00000000..cea138f8 --- /dev/null +++ b/src/commands/zombienet/init.ts @@ -0,0 +1,105 @@ +import path from "node:path"; +import { Flags } from "@oclif/core"; +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import { + buildZombienetConfigFromBinaries, + copyZombienetTemplateFile, + downloadZombienetBinaries, + getSwankyConfig, + getTemplates, + osCheck, + Spinner, +} from "../../lib/index.js"; +import { pathExistsSync } from "fs-extra/esm"; +import { zombienet, zombienetBinariesList } from "../../lib/zombienetInfo.js"; +import { ConfigBuilder } from "../../lib/config-builder.js"; +import { SwankyConfig, ZombienetData } from "../../index.js"; + +export const zombienetConfig = "zombienet.config.toml"; + +export class InitZombienet extends SwankyCommand { + static description = "Initialize Zombienet"; + + static flags = { + binaries: Flags.string({ + char: "b", + multiple: true, + required: false, + options: zombienetBinariesList, + default: [], + description: "Binaries to install", + }), + }; + + async run(): Promise { + const { flags } = await this.parse(InitZombienet); + + const localConfig = getSwankyConfig("local") as SwankyConfig; + + const platform = osCheck().platform; + if (platform === "darwin") { + this.warn(`Note for MacOs users: Polkadot binary is not currently supported for MacOs. +As a result users of MacOS need to clone the Polkadot repo (https://github.com/paritytech/polkadot), create a release and add it in your PATH manually (setup will advice you so as well). Check the official zombienet documentation for manual settings: https://paritytech.github.io/zombienet/.`); + } + + const projectPath = path.resolve(); + if (pathExistsSync(path.resolve(projectPath, "zombienet", "bin", "zombienet"))) { + this.error("Zombienet config already initialized"); + } + + const spinner = new Spinner(flags.verbose); + + const zombienetData: ZombienetData = { + version: zombienet.version, + downloadUrl: zombienet.downloadUrl, + binaries: {}, + }; + + if (!flags.binaries.includes("polkadot")) { + flags.binaries.push("polkadot"); + } + + for (const binaryName of flags.binaries) { + if (platform === "darwin" && binaryName.startsWith("polkadot")) { + continue; + } + if (!Object.keys(zombienet.binaries).includes(binaryName)) { + this.error(`Binary ${binaryName} not found in Zombienet config`); + } + zombienetData.binaries[binaryName] = zombienet.binaries[binaryName as keyof typeof zombienet.binaries]; + } + + await this.spinner.runCommand(async () => { + const newLocalConfig = new ConfigBuilder(localConfig) + .addZombienet(zombienetData) + .build(); + await this.storeConfig(newLocalConfig, "local"); + }, "Writing config"); + + const zombienetTemplatePath = getTemplates().zombienetTemplatesPath; + + const configPath = path.resolve(projectPath, "zombienet", "config"); + + if (flags.binaries.length === 1 && flags.binaries[0] === "polkadot") { + await spinner.runCommand( + () => + copyZombienetTemplateFile(zombienetTemplatePath, configPath), + "Copying template files", + ); + } else { + await spinner.runCommand( + () => buildZombienetConfigFromBinaries(flags.binaries, zombienetTemplatePath, configPath), + "Copying template files", + ); + } + + // Install binaries based on zombie config + await this.spinner.runCommand( + () => downloadZombienetBinaries(flags.binaries, projectPath, localConfig, this.spinner), + "Downloading Zombienet binaries", + ); + + this.log("ZombieNet config Installed successfully"); + } +} + diff --git a/src/commands/zombienet/start.ts b/src/commands/zombienet/start.ts new file mode 100644 index 00000000..72f5b221 --- /dev/null +++ b/src/commands/zombienet/start.ts @@ -0,0 +1,40 @@ +import { SwankyCommand } from "../../lib/swankyCommand.js"; +import path from "node:path"; +import { pathExistsSync } from "fs-extra/esm"; +import { execaCommand } from "execa"; +import { Flags } from "@oclif/core"; + + +export class StartZombienet extends SwankyCommand { + static description = "Start Zombienet"; + + static flags = { + "config-path": Flags.string({ + char: "c", + required: false, + default: "./zombienet/config/zombienet.config.toml", + description: "Path to zombienet config", + }), + }; + + async run(): Promise { + const { flags } = await this.parse(StartZombienet); + const projectPath = path.resolve(); + const binPath = path.resolve(projectPath, "zombienet", "bin") + if (!pathExistsSync(path.resolve(binPath, "zombienet"))) { + this.error("Zombienet has not initialized. Run `swanky zombienet:init` first"); + } + + await execaCommand( + `./zombienet/bin/zombienet \ + spawn --provider native \ + ${flags["config-path"]} + `, + { + stdio: "inherit", + } + ); + + this.log("ZombieNet started successfully"); + } +} \ No newline at end of file diff --git a/src/lib/config-builder.ts b/src/lib/config-builder.ts index ace3fccd..386dd9fd 100644 --- a/src/lib/config-builder.ts +++ b/src/lib/config-builder.ts @@ -1,4 +1,4 @@ -import { AccountData, BuildData, DeploymentData, SwankyConfig, SwankySystemConfig } from "../index.js"; +import { AccountData, BuildData, DeploymentData, SwankyConfig, SwankySystemConfig, ZombienetData } from "../index.js"; import { snakeCase } from "change-case"; export class ConfigBuilder { @@ -64,6 +64,13 @@ export class ConfigBuilder { return this; } + addZombienet(data: ZombienetData): ConfigBuilder { + if ("zombienet" in this.config) { + this.config.zombienet = data; + } + return this; + } + build(): T { return this.config; } diff --git a/src/lib/tasks.ts b/src/lib/tasks.ts index b3eb3a1f..11af82fb 100644 --- a/src/lib/tasks.ts +++ b/src/lib/tasks.ts @@ -1,6 +1,6 @@ import { execaCommand } from "execa"; -import { ensureDir, copy, remove } from "fs-extra/esm"; -import { rename, readFile, rm, writeFile } from "fs/promises"; +import { copy, ensureDir, remove } from "fs-extra/esm"; +import { readFile, rename, rm, writeFile } from "fs/promises"; import path from "node:path"; import { globby } from "globby"; import handlebars from "handlebars"; @@ -10,8 +10,13 @@ import semver from "semver"; import { nodeInfo } from "./nodeInfo.js"; import decompress from "decompress"; import { Spinner } from "./spinner.js"; -import { SupportedPlatforms, SupportedArch, TestType } from "../types/index.js"; +import { 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) { @@ -30,18 +35,41 @@ export async function checkCliDependencies(spinner: Spinner) { } } +export function osCheck() { + const platform = process.platform; + const arch = process.arch; + + const supportedConfigs = { + darwin: ["x64", "arm64"], + linux: ["x64", "arm64"], + }; + + if (!(platform in supportedConfigs)) { + throw new ConfigError(`Platform '${platform}' is not supported!`); + } + + const supportedArchs = supportedConfigs[platform as keyof typeof supportedConfigs]; + if (!supportedArchs.includes(arch)) { + throw new ConfigError( + `Architecture '${arch}' is not supported on platform '${platform}'.` + ); + } + + return { platform, arch }; +} + export async function copyCommonTemplateFiles(templatesPath: string, projectPath: string) { await ensureDir(projectPath); const commonFiles = await globby(`*`, { cwd: templatesPath }); await Promise.all( commonFiles.map(async (file) => { await copy(path.resolve(templatesPath, file), path.resolve(projectPath, file)); - }) + }), ); await rename(path.resolve(projectPath, "gitignore"), path.resolve(projectPath, ".gitignore")); await rename( path.resolve(projectPath, "mocharc.json"), - path.resolve(projectPath, ".mocharc.json") + path.resolve(projectPath, ".mocharc.json"), ); await copy(path.resolve(templatesPath, "github"), path.resolve(projectPath, ".github")); } @@ -49,11 +77,11 @@ export async function copyCommonTemplateFiles(templatesPath: string, projectPath export async function copyContractTemplateFiles( contractTemplatePath: string, contractName: string, - projectPath: string + projectPath: string, ) { await copy( path.resolve(contractTemplatePath, "contract"), - path.resolve(projectPath, "contracts", contractName) + path.resolve(projectPath, "contracts", contractName), ); } @@ -113,13 +141,13 @@ export async function downloadNode(projectPath: string, nodeInfo: nodeInfo, spin const platformDlUrls = nodeInfo.downloadUrl[process.platform as SupportedPlatforms]; if (!platformDlUrls) throw new ConfigError( - `Could not download swanky-node. Platform ${process.platform} not supported!` + `Could not download swanky-node. Platform ${process.platform} not supported!`, ); const dlUrl = platformDlUrls[process.arch as SupportedArch]; if (!dlUrl) throw new ConfigError( - `Could not download swanky-node. Platform ${process.platform} Arch ${process.arch} not supported!` + `Could not download swanky-node. Platform ${process.platform} Arch ${process.arch} not supported!`, ); const dlFileDetails = await new Promise((resolve, reject) => { @@ -136,7 +164,7 @@ export async function downloadNode(projectPath: string, nodeInfo: nodeInfo, spin }); dl.start().catch((error: Error) => - reject(new Error(`Error downloading node: , ${error.message}`)) + reject(new Error(`Error downloading node: , ${error.message}`)), ); }); @@ -157,6 +185,134 @@ export async function downloadNode(projectPath: string, nodeInfo: nodeInfo, spin return path.resolve(binPath, dlFileDetails.filePath); } +export async function copyZombienetTemplateFile(templatePath: string, configPath: string) { + await ensureDir(configPath); + await copy( + path.resolve(templatePath, zombienetConfig), + path.resolve(configPath, zombienetConfig), + ); +} + +export async function downloadZombienetBinaries(binaries: string[], projectPath: string, swankyConfig: SwankyConfig, spinner: Spinner) { + const binPath = path.resolve(projectPath, "zombienet", "bin"); + await ensureDir(binPath); + + const zombienetInfo = swankyConfig.zombienet; + + if (!zombienetInfo) { + throw new ConfigError("No zombienet config found"); + } + + const dlUrls = new Map(); + if (zombienetInfo.version) { + const version = zombienetInfo.version; + const binaryName = "zombienet"; + const platformDlUrls = zombienetInfo.downloadUrl[process.platform as SupportedPlatforms]; + if (!platformDlUrls) + throw new ConfigError( + `Could not download ${binaryName}. Platform ${process.platform} not supported!`, + ); + let dlUrl = platformDlUrls[process.arch as SupportedArch]; + if (!dlUrl) + throw new ConfigError( + `Could not download ${binaryName}. Platform ${process.platform} Arch ${process.arch} not supported!`, + ); + dlUrl = dlUrl.replace("${version}", version); + dlUrls.set(binaryName, dlUrl); + } + + for (const binaryName of Object.keys(zombienetInfo.binaries).filter((binaryName) => binaries.includes(binaryName))) { + const binaryInfo = zombienetInfo.binaries[binaryName as BinaryNames]; + const version = binaryInfo.version; + const platformDlUrls = binaryInfo.downloadUrl[process.platform as SupportedPlatforms]; + if (!platformDlUrls) + throw new ConfigError( + `Could not download ${binaryName}. Platform ${process.platform} not supported!`, + ); + let dlUrl = platformDlUrls[process.arch as SupportedArch]; + if (!dlUrl) + throw new ConfigError( + `Could not download ${binaryName}. Platform ${process.platform} Arch ${process.arch} not supported!`, + ); + dlUrl = dlUrl.replace(/\$\{version}/gi, version); + dlUrls.set(binaryName, dlUrl); + } + + for (const [binaryName, dlUrl] of dlUrls) { + const dlFileDetails = await new Promise((resolve, reject) => { + const dl = new DownloaderHelper(dlUrl, binPath); + + dl.on("progress", (event) => { + spinner.text(`Downloading ${binaryName} ${event.progress.toFixed(2)}%`); + }); + dl.on("end", (event) => { + resolve(event); + }); + dl.on("error", (error) => { + reject(new Error(`Error downloading ${binaryName}: , ${error.message}`)); + }); + + dl.start().catch((error: Error) => + reject(new Error(`Error downloading ${binaryName}: , ${error.message}`)), + ); + }); + + if (dlFileDetails.incomplete) { + throw new NetworkError("${binaryName} download incomplete"); + } + + let fileName = dlFileDetails.fileName; + + if (dlFileDetails.filePath.endsWith(".tar.gz")) { + const compressedFilePath = path.resolve(binPath, dlFileDetails.filePath); + const decompressed = await decompress(compressedFilePath, binPath); + await remove(compressedFilePath); + fileName = decompressed[0].path; + } + + if (fileName !== binaryName) { + await execaCommand(`mv ${binPath}/${fileName} ${binPath}/${binaryName}`); + } + await execaCommand(`chmod +x ${binPath}/${binaryName}`); + } +} + +export async function buildZombienetConfigFromBinaries(binaries: string[], templatePath: string, configPath: string) { + await ensureDir(configPath); + const configBuilder = { + settings: { + timeout: 1000, + }, + relaychain: { + default_command: "", + chain: "", + nodes: [], + }, + parachains: [], + } as ZombienetConfig; + + for (const binaryName of binaries) { + const template = TOML.parse(readFileSync(path.resolve(templatePath, binaryName + ".toml"), "utf8")); + if (template.parachains !== undefined) { + (template.parachains as any).forEach((parachain: any) => { + configBuilder.parachains.push(parachain); + }); + } + if (template.hrmp_channels !== undefined) { + configBuilder.hrmp_channels = []; + (template.hrmp_channels as any).forEach((hrmp_channel: any) => { + configBuilder.hrmp_channels!.push(hrmp_channel); + }); + } + if (template.relaychain !== undefined) { + configBuilder.relaychain = template.relaychain as unknown as Relaychain; + } + + } + + writeFileSync(path.resolve(configPath, zombienetConfig), TOML.stringify(configBuilder as any)); +} + export async function installDeps(projectPath: string) { let installCommand = "npm install"; diff --git a/src/lib/templates.ts b/src/lib/templates.ts index ef814298..90996e34 100644 --- a/src/lib/templates.ts +++ b/src/lib/templates.ts @@ -8,6 +8,7 @@ const __dirname = path.dirname(__filename); export function getTemplates() { const templatesPath = path.resolve(__dirname, "..", "templates"); const contractTemplatesPath = path.resolve(templatesPath, "contracts"); + const zombienetTemplatesPath = path.resolve(templatesPath, "zombienet"); const fileList = readdirSync(contractTemplatesPath, { withFileTypes: true, }); @@ -19,5 +20,6 @@ export function getTemplates() { templatesPath, contractTemplatesPath, contractTemplatesList, + zombienetTemplatesPath, }; } diff --git a/src/lib/zombienetInfo.ts b/src/lib/zombienetInfo.ts new file mode 100644 index 00000000..3b6b0faf --- /dev/null +++ b/src/lib/zombienetInfo.ts @@ -0,0 +1,52 @@ +export type zombienetInfo = typeof zombienet; + +export type BinaryNames = "zombienet" | "polkadot" | "polkadot-parachain" | "astar-collator"; + +export const zombienet = { + version: "1.3.89", + downloadUrl: { + darwin: { + "arm64": "https://github.com/paritytech/zombienet/releases/download/v${version}/zombienet-macos", + "x64": "https://github.com/paritytech/zombienet/releases/download/v${version}/zombienet-macos", + }, + linux: { + "arm64": "https://github.com/paritytech/zombienet/releases/download/v${version}/zombienet-linux-arm64", + "x64": "https://github.com/paritytech/zombienet/releases/download/v${version}/zombienet-linux-x64", + }, + }, + binaries: { + "polkadot": { + version: "0.9.43", + downloadUrl: { + linux: { + "arm64": "https://github.com/paritytech/polkadot/releases/download/v${version}/polkadot", + "x64": "https://github.com/paritytech/polkadot/releases/download/v${version}/polkadot", + }, + }, + }, + "polkadot-parachain": { + version: "0.9.430", + downloadUrl: { + linux: { + "arm64": "https://github.com/paritytech/cumulus/releases/download/v${version}/polkadot-parachain", + "x64": "https://github.com/paritytech/cumulus/releases/download/v${version}/polkadot-parachain", + }, + }, + }, + "astar-collator": { + version: "5.28.0", + downloadUrl: { + darwin: { + "arm64": "https://github.com/AstarNetwork/Astar/releases/download/v${version}/astar-collator-v${version}-macOS-x86_64.tar.gz", + "x64": "https://github.com/AstarNetwork/Astar/releases/download/v${version}/astar-collator-v${version}-macOS-x86_64.tar.gz", + }, + linux: { + "arm64": "https://github.com/AstarNetwork/Astar/releases/download/v${version}/astar-collator-v${version}-ubuntu-aarch64.tar.gz", + "x64": "https://github.com/AstarNetwork/Astar/releases/download/v${version}/astar-collator-v${version}-ubuntu-x86_64.tar.gz", + }, + }, + }, + }, +}; + +export const zombienetBinariesList = Object.keys(zombienet.binaries); diff --git a/src/templates/zombienet/astar-collator.toml b/src/templates/zombienet/astar-collator.toml new file mode 100644 index 00000000..a5a14ffb --- /dev/null +++ b/src/templates/zombienet/astar-collator.toml @@ -0,0 +1,69 @@ +[[parachains]] +id = 2006 +chain = "astar-dev" +cumulus_based = true + + [parachains.collator] + name = "astar" + command = "./zombienet/bin/astar-collator" + rpc_port = 8545 + args = [ "-l=xcm=trace", "--enable-evm-rpc" ] + +[[parachains]] +id = 2007 +chain = "shiden-dev" +cumulus_based = true + + [parachains.collator] + name = "shiden" + command = "./zombienet/bin/astar-collator" + rpc_port = 8546 + args = [ "-l=xcm=trace", "--enable-evm-rpc" ] + +[[parachains]] +id = 2008 +chain = "shibuya-dev" +cumulus_based = true + + [parachains.collator] + name = "shibuya" + command = "./zombienet/bin/astar-collator" + rpc_port = 8546 + args = [ "-l=xcm=trace", "--enable-evm-rpc" ] + +[[hrmp_channels]] +sender = 2006 +recipient = 2007 +max_capacity = 8 +max_message_size = 512 + +[[hrmp_channels]] +sender = 2007 +recipient = 2006 +max_capacity = 8 +max_message_size = 512 + +[[hrmp_channels]] +sender = 2006 +recipient = 2008 +max_capacity = 8 +max_message_size = 512 + +[[hrmp_channels]] +sender = 2008 +recipient = 2006 +max_capacity = 8 +max_message_size = 512 + + +[[hrmp_channels]] +sender = 2008 +recipient = 2007 +max_capacity = 8 +max_message_size = 512 + +[[hrmp_channels]] +sender = 2007 +recipient = 2008 +max_capacity = 8 +max_message_size = 512 \ No newline at end of file diff --git a/src/templates/zombienet/polkadot-parachain.toml b/src/templates/zombienet/polkadot-parachain.toml new file mode 100644 index 00000000..8f0b1005 --- /dev/null +++ b/src/templates/zombienet/polkadot-parachain.toml @@ -0,0 +1,7 @@ +[[parachains]] +id = 100 + + [parachains.collator] + name = "collator01" + command = "./zombienet/bin/polkadot-parachain" + args = ["-lparachain=debug"] \ No newline at end of file diff --git a/src/templates/zombienet/polkadot.toml b/src/templates/zombienet/polkadot.toml new file mode 100644 index 00000000..9538d660 --- /dev/null +++ b/src/templates/zombienet/polkadot.toml @@ -0,0 +1,15 @@ +[settings] +timeout = 1000 + +[relaychain] +default_command = "./zombienet/bin/polkadot" +chain = "rococo-local" + + [[relaychain.nodes]] + name = "relay01" + + [[relaychain.nodes]] + name = "relay02" + + [[relaychain.nodes]] + name = "relay03" \ No newline at end of file diff --git a/src/templates/zombienet/zombienet.config.toml b/src/templates/zombienet/zombienet.config.toml new file mode 100644 index 00000000..e71ba918 --- /dev/null +++ b/src/templates/zombienet/zombienet.config.toml @@ -0,0 +1,16 @@ +[settings] +timeout = 1000 + +[relaychain] +default_command = "./zombienet/bin/polkadot" +chain = "rococo-local" + + [[relaychain.nodes]] + name = "relay01" + + [[relaychain.nodes]] + name = "relay02" + + [[relaychain.nodes]] + name = "relay03" + diff --git a/src/types/index.ts b/src/types/index.ts index 8e0af423..77f1ede1 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -40,6 +40,17 @@ export interface DeploymentData { deployerAlias: string; address: string; } + +export interface DownloadUrl { + darwin: { + "arm64": string, + "x64": string + }, + linux: { + "arm64": string, + "x64": string + } +} export interface SwankyConfig extends SwankySystemConfig{ node: { polkadotPalletVersions: string; @@ -48,6 +59,7 @@ export interface SwankyConfig extends SwankySystemConfig{ version: string; }; contracts: Record | Record; + zombienet?: ZombienetData; } export interface SwankySystemConfig { @@ -56,6 +68,46 @@ export interface SwankySystemConfig { networks: Record } +export interface ZombienetData { + version: string; + downloadUrl: DownloadUrl; + binaries: Record }>; +} + +export interface ZombienetConfig { + settings: { timeout: number }, + relaychain: Relaychain, + parachains: Parachain[], + hrmp_channels?: HrmpChannel[], +} + +export interface Relaychain { + default_command: string, + chain: string, + nodes: Node[] +} +export interface Node { + name: string, +} +export interface HrmpChannel { + sender: number, + recipient: number, + max_capacity: number, + max_message_size: number +} +export interface Parachain { + id: number, + chain: string, + cumulus_based: boolean, + collator: Collator +} +export interface Collator { + name: string, + command: string, + rpc_port: number, + args: string[], +} + export enum BuildMode { Debug = "Debug", Release = "Release", From f1081b52fdb0b18ae1e9f617400adc77ee37a11c Mon Sep 17 00:00:00 2001 From: Olexandr Berezan <116814585+prxgr4mm3r@users.noreply.github.com> Date: Tue, 5 Mar 2024 13:17:37 +0200 Subject: [PATCH 09/19] feat: Add GitPod config (#180) Co-authored-by: Igor Papandinas --- .gitpod.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .gitpod.yml diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 00000000..593ac77a --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,35 @@ +# This configuration file was automatically generated by Gitpod. +# Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml) +# and commit this file to your remote git repository to share the goodness with others. + +# Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart + +ports: + - name: Swanky Node + port: 9944 + +vscode: + extensions: + - rust-lang.rust-analyzer + +tasks: + - init: | + # Add wasm target + rustup target add wasm32-unknown-unknown + + # Add necessary components + rustup component add rust-src + + # Install or update cargo packages + cargo install --force --locked cargo-contract + cargo install cargo-dylint dylint-link + + yarn install + yarn build + command: | + echo "Swanky Dev Environment ready!" + echo "Use Swanky directly by running \"./bin/run.js COMMAND\"" + echo "For example:" + echo "./bin/run.js init temp_project" + echo "cd temp_project" + echo "../bin/run.js contract compile flipper" From ecd8860a9139197dc5c2348c614a13084479684f Mon Sep 17 00:00:00 2001 From: prxgr4mm3r Date: Tue, 5 Mar 2024 22:29:50 +0200 Subject: [PATCH 10/19] feat: add frontend template --- src/commands/init/index.ts | 18 +- src/lib/command-utils.ts | 2 +- src/lib/tasks.ts | 16 ++ src/templates/frontend/.env.local.example | 19 ++ src/templates/frontend/.eslintignore | 8 + src/templates/frontend/.eslintrc.json | 25 ++ src/templates/frontend/.gitignore | 44 ++++ src/templates/frontend/.lintstagedrc.json | 4 + src/templates/frontend/.prettierignore | 10 + src/templates/frontend/.prettierrc.js | 26 ++ src/templates/frontend/CHANGELOG.md | 154 +++++++++++ src/templates/frontend/components.json | 16 ++ src/templates/frontend/next.config.js | 19 ++ src/templates/frontend/package.json | 77 ++++++ src/templates/frontend/postcss.config.js | 6 + src/templates/frontend/postinstall.sh | 13 + .../frontend/public/icons/azns-icon.svg | 12 + .../frontend/public/icons/github-button.svg | 17 ++ .../frontend/public/icons/github.svg | 1 + .../frontend/public/icons/telegram-button.svg | 23 ++ .../frontend/public/icons/vercel-button.svg | 17 ++ .../frontend/public/images/inkathon-logo.png | Bin 0 -> 21505 bytes .../public/images/inkathon-og-banner.jpg | Bin 0 -> 152357 bytes .../src/app/components/home-page-title.tsx | 97 +++++++ .../src/app/components/home-top-bar.tsx | 26 ++ src/templates/frontend/src/app/favicon.ico | Bin 0 -> 15086 bytes src/templates/frontend/src/app/globals.css | 80 ++++++ src/templates/frontend/src/app/layout.tsx | 59 +++++ src/templates/frontend/src/app/page.tsx | 43 ++++ src/templates/frontend/src/app/providers.tsx | 21 ++ .../frontend/src/app/toast-config.tsx | 35 +++ .../frontend/src/components/ui/button.tsx | 66 +++++ .../frontend/src/components/ui/card.tsx | 80 ++++++ .../src/components/ui/dropdown-menu.tsx | 190 ++++++++++++++ .../frontend/src/components/ui/form.tsx | 172 +++++++++++++ .../frontend/src/components/ui/input.tsx | 25 ++ .../frontend/src/components/ui/label.tsx | 21 ++ .../frontend/src/components/ui/spinner.tsx | 10 + .../frontend/src/components/ui/tooltip.tsx | 30 +++ .../src/components/web3/chain-info.tsx | 115 +++++++++ .../src/components/web3/connect-button.tsx | 240 ++++++++++++++++++ .../web3/flipper-contract-interactions.tsx | 145 +++++++++++ .../web3/greeter-contract-interactions.tsx | 144 +++++++++++ .../frontend/src/config/environment.ts | 15 ++ .../src/config/get-supported-chains.ts | 11 + src/templates/frontend/src/config/get-url.ts | 15 ++ .../frontend/src/deployments/deployments.ts | 29 +++ src/templates/frontend/src/utils/cn.ts | 6 + .../src/utils/contract-tx-with-toast.tsx | 96 +++++++ .../frontend/src/utils/truncate-hash.ts | 5 + src/templates/frontend/tailwind.config.ts | 85 +++++++ src/templates/frontend/tsconfig.json | 29 +++ src/templates/package.json.hbs | 26 +- src/templates/pnpm-workspace.yaml | 2 + 54 files changed, 2437 insertions(+), 8 deletions(-) create mode 100644 src/templates/frontend/.env.local.example create mode 100644 src/templates/frontend/.eslintignore create mode 100644 src/templates/frontend/.eslintrc.json create mode 100644 src/templates/frontend/.gitignore create mode 100644 src/templates/frontend/.lintstagedrc.json create mode 100644 src/templates/frontend/.prettierignore create mode 100644 src/templates/frontend/.prettierrc.js create mode 100644 src/templates/frontend/CHANGELOG.md create mode 100644 src/templates/frontend/components.json create mode 100644 src/templates/frontend/next.config.js create mode 100644 src/templates/frontend/package.json create mode 100644 src/templates/frontend/postcss.config.js create mode 100755 src/templates/frontend/postinstall.sh create mode 100644 src/templates/frontend/public/icons/azns-icon.svg create mode 100644 src/templates/frontend/public/icons/github-button.svg create mode 100644 src/templates/frontend/public/icons/github.svg create mode 100644 src/templates/frontend/public/icons/telegram-button.svg create mode 100644 src/templates/frontend/public/icons/vercel-button.svg create mode 100644 src/templates/frontend/public/images/inkathon-logo.png create mode 100644 src/templates/frontend/public/images/inkathon-og-banner.jpg create mode 100644 src/templates/frontend/src/app/components/home-page-title.tsx create mode 100644 src/templates/frontend/src/app/components/home-top-bar.tsx create mode 100644 src/templates/frontend/src/app/favicon.ico create mode 100644 src/templates/frontend/src/app/globals.css create mode 100644 src/templates/frontend/src/app/layout.tsx create mode 100644 src/templates/frontend/src/app/page.tsx create mode 100644 src/templates/frontend/src/app/providers.tsx create mode 100644 src/templates/frontend/src/app/toast-config.tsx create mode 100644 src/templates/frontend/src/components/ui/button.tsx create mode 100644 src/templates/frontend/src/components/ui/card.tsx create mode 100644 src/templates/frontend/src/components/ui/dropdown-menu.tsx create mode 100644 src/templates/frontend/src/components/ui/form.tsx create mode 100644 src/templates/frontend/src/components/ui/input.tsx create mode 100644 src/templates/frontend/src/components/ui/label.tsx create mode 100644 src/templates/frontend/src/components/ui/spinner.tsx create mode 100644 src/templates/frontend/src/components/ui/tooltip.tsx create mode 100644 src/templates/frontend/src/components/web3/chain-info.tsx create mode 100644 src/templates/frontend/src/components/web3/connect-button.tsx create mode 100644 src/templates/frontend/src/components/web3/flipper-contract-interactions.tsx create mode 100644 src/templates/frontend/src/components/web3/greeter-contract-interactions.tsx create mode 100644 src/templates/frontend/src/config/environment.ts create mode 100644 src/templates/frontend/src/config/get-supported-chains.ts create mode 100644 src/templates/frontend/src/config/get-url.ts create mode 100644 src/templates/frontend/src/deployments/deployments.ts create mode 100644 src/templates/frontend/src/utils/cn.ts create mode 100644 src/templates/frontend/src/utils/contract-tx-with-toast.tsx create mode 100644 src/templates/frontend/src/utils/truncate-hash.ts create mode 100644 src/templates/frontend/tailwind.config.ts create mode 100644 src/templates/frontend/tsconfig.json create mode 100644 src/templates/pnpm-workspace.yaml diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts index 1cbe45ce..32d534aa 100644 --- a/src/commands/init/index.ts +++ b/src/commands/init/index.ts @@ -11,13 +11,13 @@ import { buildSwankyConfig, checkCliDependencies, copyCommonTemplateFiles, - copyContractTemplateFiles, + copyContractTemplateFiles, copyFrontendTemplateFiles, downloadNode, getTemplates, installDeps, prepareTestFiles, processTemplates, - swankyNodeVersions + swankyNodeVersions, } from "../../lib/index.js"; import { SwankyCommand } from "../../lib/swankyCommand.js"; import { InputError, UnknownError } from "../../lib/errors.js"; @@ -254,6 +254,20 @@ export class Init extends SwankyCommand { }); } + if(contractTemplate === "flipper") { + const { addFrontendTemplate } = await inquirer.prompt([ + choice("addFrontendTemplate", "Do you want to add frontend to your project?"), + ]); + if (addFrontendTemplate) { + const templatesPath = getTemplates().templatesPath; + this.taskQueue.push({ + task: copyFrontendTemplateFiles, + args: [ templatesPath, this.projectPath ], + runningMessage: "Copying frontend template files", + }); + } + } + this.taskQueue.push({ task: processTemplates, args: [ diff --git a/src/lib/command-utils.ts b/src/lib/command-utils.ts index 270ea732..0bf61ce6 100644 --- a/src/lib/command-utils.ts +++ b/src/lib/command-utils.ts @@ -141,7 +141,7 @@ export async function generateTypes(contractName: string) { emptyDir(outputPath); await execaCommand( - `npx typechain-polkadot --in ${relativeInputPath} --out ${relativeOutputPath}` + `npx @727-ventures/typechain-polkadot --in ${relativeInputPath} --out ${relativeOutputPath}` ); } export function ensureAccountIsSet(account: string | undefined, config: SwankyConfig) { diff --git a/src/lib/tasks.ts b/src/lib/tasks.ts index 11af82fb..b8535808 100644 --- a/src/lib/tasks.ts +++ b/src/lib/tasks.ts @@ -18,6 +18,7 @@ import { readFileSync } from "fs"; import TOML from "@iarna/toml"; import { writeFileSync } from "node:fs"; import { commandStdoutOrNull } from "./command-utils.js"; +import { readJSON, writeJSON } from "fs-extra"; export async function checkCliDependencies(spinner: Spinner) { const dependencyList = [ @@ -193,6 +194,21 @@ export async function copyZombienetTemplateFile(templatePath: string, configPath ); } +export async function copyFrontendTemplateFiles( + templatesPath: string, + projectPath: string, +) { + const packageJsonPath = path.resolve(projectPath, "package.json"); + const packageJson = await readJSON(packageJsonPath); + packageJson.workspace = [ "frontend" ]; + await writeJSON(packageJsonPath, packageJson, { spaces: 2 }); + await copy(path.resolve(templatesPath, "pnpm-workspace.yaml"), path.resolve(projectPath, "pnpm-workspace.yaml")); + await copy( + path.resolve(templatesPath, "frontend"), + path.resolve(projectPath, "frontend"), + ); +} + export async function downloadZombienetBinaries(binaries: string[], projectPath: string, swankyConfig: SwankyConfig, spinner: Spinner) { const binPath = path.resolve(projectPath, "zombienet", "bin"); await ensureDir(binPath); diff --git a/src/templates/frontend/.env.local.example b/src/templates/frontend/.env.local.example new file mode 100644 index 00000000..accd13a8 --- /dev/null +++ b/src/templates/frontend/.env.local.example @@ -0,0 +1,19 @@ +## DOCS: https://github.com/scio-labs/inkathon#environment-variables + +## How use those variables in the frontend code? +## → 1. Add them in `./src/config/environment.ts` +## → 2. Always import `env` from `@config/environment` (not from `process.env`) + +## Flag to differentiate production environments (i.e. for analytics) +NEXT_PUBLIC_PRODUCTION_MODE=false + +## Active deployment url (i.e. useful for fetching from Next.js API routes) +NEXT_PUBLIC_URL=http://localhost:3000 + +## Default chain identifer the frontend should connect to first +NEXT_PUBLIC_DEFAULT_CHAIN=alephzero-testnet +# NEXT_PUBLIC_DEFAULT_CHAIN=development + +## [Optional] Multiple supported chain identifers the frontend connects to +## IMPORTANT: It's mandatory to use double quotes in the array +# NEXT_PUBLIC_SUPPORTED_CHAINS=[ "development", "alephzero-testnet", "rococo", "shibuya" ] \ No newline at end of file diff --git a/src/templates/frontend/.eslintignore b/src/templates/frontend/.eslintignore new file mode 100644 index 00000000..c4c528d5 --- /dev/null +++ b/src/templates/frontend/.eslintignore @@ -0,0 +1,8 @@ +package-lock.json +pnpm-lock.yaml +node_modules +LICENSE + +out +.next +public \ No newline at end of file diff --git a/src/templates/frontend/.eslintrc.json b/src/templates/frontend/.eslintrc.json new file mode 100644 index 00000000..19a6e8cf --- /dev/null +++ b/src/templates/frontend/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": [ + "eslint:recommended", + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "rules": { + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-non-null-assertion": "warn", + "@typescript-eslint/no-empty-function": "warn", + "react/no-children-prop": "warn", + "react-hooks/exhaustive-deps": "off", + "react/jsx-no-target-blank": "off", + "no-extra-boolean-cast": "off", + "prefer-const": "warn", + "no-restricted-imports": ["warn", { "patterns": ["process"] }] + } +} diff --git a/src/templates/frontend/.gitignore b/src/templates/frontend/.gitignore new file mode 100644 index 00000000..69f6e696 --- /dev/null +++ b/src/templates/frontend/.gitignore @@ -0,0 +1,44 @@ +# package management +**/node_modules +**/.pnp +.pnp.js +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# testing +/coverage + +# next.js +/.next/ +/out/ +next-env.d.ts + +# production +/build + +# local env files +.env +.env*.local + +# vercel +.vercel +.gitsigners + +# typescript +*.tsbuildinfo +dist diff --git a/src/templates/frontend/.lintstagedrc.json b/src/templates/frontend/.lintstagedrc.json new file mode 100644 index 00000000..6fb5b539 --- /dev/null +++ b/src/templates/frontend/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.{js,jsx,ts,tsx}": ["pnpm run lint:fix"], + "*.{json,md,mdx,html,css,yml,yaml}": ["pnpm run lint:format"] +} diff --git a/src/templates/frontend/.prettierignore b/src/templates/frontend/.prettierignore new file mode 100644 index 00000000..ea0d5432 --- /dev/null +++ b/src/templates/frontend/.prettierignore @@ -0,0 +1,10 @@ +package-lock.json +pnpm-lock.yaml +node_modules +LICENSE + +out +.next +public + +src/components/ui \ No newline at end of file diff --git a/src/templates/frontend/.prettierrc.js b/src/templates/frontend/.prettierrc.js new file mode 100644 index 00000000..65e90e0b --- /dev/null +++ b/src/templates/frontend/.prettierrc.js @@ -0,0 +1,26 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-env node */ + +/** @type {import('prettier').Config} */ +module.exports = { + ...require('../.prettierrc.js'), + plugins: ['@trivago/prettier-plugin-sort-imports', 'prettier-plugin-tailwindcss'], + importOrder: [ + '^((react|next)/(.*)$)|^((react|next)$)', + '', + '^@/(config|types|styles|shared|lib|utils|hooks|components|app|pages|features)/(.*)$', + '^[./]', + ], + importOrderSeparation: true, + overrides: [ + { + files: ['*.ts', '*.tsx'], + options: { + parser: 'typescript', + importOrderParserPlugins: ['typescript', 'jsx'], + }, + }, + ], + tailwindConfig: 'tailwind.config.ts', + tailwindFunctions: ['clsx', 'cva'], +} diff --git a/src/templates/frontend/CHANGELOG.md b/src/templates/frontend/CHANGELOG.md new file mode 100644 index 00000000..7d058b0e --- /dev/null +++ b/src/templates/frontend/CHANGELOG.md @@ -0,0 +1,154 @@ +# @inkathon/frontend + +## 0.6.0 + +### Minor Changes + +- [#57](https://github.com/scio-labs/inkathon/pull/57) [`d623968`](https://github.com/scio-labs/inkathon/commit/d623968827da0d96b51a09f79d2f02ecb1c6c2a8) Thanks [@peetzweg](https://github.com/peetzweg)! - uses zod for form validation + +- [#50](https://github.com/scio-labs/inkathon/pull/50) [`7c717dd`](https://github.com/scio-labs/inkathon/commit/7c717dd17e4b221b076ecf5d7bf74bebecc9df83) Thanks [@ical10](https://github.com/ical10)! - - Setup Docker workflow for local development of frontend (Next.js Startup & Watching) and production build (non-Vercel deployments) + - Setup Docker workflow for local development of contracts (Rust & Substrate Contracts Node Setup, Contract Deployment) + +### Patch Changes + +- [#55](https://github.com/scio-labs/inkathon/pull/55) [`6b7ea5d`](https://github.com/scio-labs/inkathon/commit/6b7ea5de1e425242fd4811dbc85898f64ceb069f) Thanks [@peetzweg](https://github.com/peetzweg)! - allow postinstall to work with new contracts instead of only packaged greeter + +- Updated dependencies [[`7c717dd`](https://github.com/scio-labs/inkathon/commit/7c717dd17e4b221b076ecf5d7bf74bebecc9df83), [`6b7ea5d`](https://github.com/scio-labs/inkathon/commit/6b7ea5de1e425242fd4811dbc85898f64ceb069f)]: + - @inkathon/contracts@0.6.0 + +## 0.5.0 + +### Minor Changes + +- [#53](https://github.com/scio-labs/inkathon/pull/53) [`194120d`](https://github.com/scio-labs/inkathon/commit/194120d21028d48102d370db72660e1e23c84c4f) Thanks [@wottpal](https://github.com/wottpal)! - Add type-safe contract integrations via `useRegisteredTypedContract` and `typechain-polkadot`. + +### Patch Changes + +- Updated dependencies [[`194120d`](https://github.com/scio-labs/inkathon/commit/194120d21028d48102d370db72660e1e23c84c4f)]: + - @inkathon/contracts@0.5.0 + +## 0.4.2 + +### Patch Changes + +- [`bc7d7ed`](https://github.com/scio-labs/inkathon/commit/bc7d7ed546fc2f17b6adaf96e34645f84ac2a5e0) Thanks [@wottpal](https://github.com/wottpal)! - Move VSCode settings to `settings.json` file but keep `inkathon.code-workspace`. It's now also supported by default to develop with ink!athon without opening the code-workspace file. + +- Updated dependencies [[`cf68f5f`](https://github.com/scio-labs/inkathon/commit/cf68f5f96888c69434014ff4f8eccdd3558d20bc), [`bc7d7ed`](https://github.com/scio-labs/inkathon/commit/bc7d7ed546fc2f17b6adaf96e34645f84ac2a5e0)]: + - @inkathon/contracts@0.4.2 + +## 0.4.1 + +### Patch Changes + +- [`14e8e11`](https://github.com/scio-labs/inkathon/commit/14e8e11ebc857e81b7cfa97e7c3c7f28d8dbccc3) Thanks [@wottpal](https://github.com/wottpal)! - Add sample code snippets from live workshops (greeter message reversion & make-it-rain script) + +- Updated dependencies [[`14e8e11`](https://github.com/scio-labs/inkathon/commit/14e8e11ebc857e81b7cfa97e7c3c7f28d8dbccc3)]: + - @inkathon/contracts@0.4.1 + +## 0.4.0 + +### Minor Changes + +- [#42](https://github.com/scio-labs/inkathon/pull/42) [`0533391`](https://github.com/scio-labs/inkathon/commit/0533391ac6f9b953ba0cb231af8b3037e80bcbab) Thanks [@ical10](https://github.com/ical10)! - Update project default to Node 20. + +- [#42](https://github.com/scio-labs/inkathon/pull/42) [`bc721ea`](https://github.com/scio-labs/inkathon/commit/bc721ea638a33d5d9d993eecddfd2a6f3ece1bfe) Thanks [@ical10](https://github.com/ical10)! - - Migrate the current pages directory to the Next.js 13 app directory. + - Migrate to `shadcn/ui` components and vanilla tailwind. + +### Patch Changes + +- Updated dependencies [[`0533391`](https://github.com/scio-labs/inkathon/commit/0533391ac6f9b953ba0cb231af8b3037e80bcbab)]: + - @inkathon/contracts@0.4.0 + +## 0.3.2 + +### Patch Changes + +- Updated dependencies [[`47aed1b`](https://github.com/scio-labs/inkathon/commit/47aed1b722138bd6fca2883337151d3c0b77e4a3)]: + - @inkathon/contracts@0.3.2 + +## 0.3.1 + +### Patch Changes + +- Updated dependencies [[`e73d9b8`](https://github.com/scio-labs/inkathon/commit/e73d9b86a4299702c59538ac43612b9977d479be)]: + - @inkathon/contracts@0.3.1 + +## 0.3.0 + +### Minor Changes + +- [`64adba1`](https://github.com/scio-labs/inkathon/commit/64adba196dd98ad272bbb4a99b4f7bc7186ae385) Thanks [@wottpal](https://github.com/wottpal)! - Add Nightly Connect support for Aleph Zero, Aleph Zero Testnet, and Local Node. Checkout: https://connect.nightly.app/. + +## 0.3.0 + +### Patch Changes + +- Updated dependencies [[`cda19ae`](https://github.com/scio-labs/inkathon/commit/cda19aeb4107c076daeb17a455fecfbd7f373044)]: + - @inkathon/contracts@0.3.0 + +## 0.2.1 + +### Patch Changes + +- Updated dependencies [[`3f4179e`](https://github.com/scio-labs/inkathon/commit/3f4179e9325b155324d23796234d9f853ae03dd9)]: + - @inkathon/contracts@0.2.1 + +## 0.2.0 + +### Minor Changes + +- [`c2cfbe4`](https://github.com/scio-labs/inkathon/commit/c2cfbe428a4e86f7ddb3d25886d4da79238b69be) Thanks [@wottpal](https://github.com/wottpal)! - Ensure & document Windows, Ubuntu, and macOS compatibility. 🌈 + +### Patch Changes + +- Updated dependencies [[`c2cfbe4`](https://github.com/scio-labs/inkathon/commit/c2cfbe428a4e86f7ddb3d25886d4da79238b69be)]: + - @inkathon/contracts@0.2.0 + +## 0.1.3 + +### Patch Changes + +- [`4bda28d`](https://github.com/scio-labs/inkathon/commit/4bda28d645abc8d8684d33bac788f04c278d7b4e) Thanks [@wottpal](https://github.com/wottpal)! - Further cross-platform script improvements (i.e. regarding the touch command). + +- Updated dependencies [[`4bda28d`](https://github.com/scio-labs/inkathon/commit/4bda28d645abc8d8684d33bac788f04c278d7b4e)]: + - @inkathon/contracts@0.1.3 + +## 0.1.2 + +### Patch Changes + +- [`2b9bc68`](https://github.com/scio-labs/inkathon/commit/2b9bc689876ea195a1cf2f6af1ca2414bcf04172) Thanks [@wottpal](https://github.com/wottpal)! - Make cp/copy command work cross-platform (i.e. on Windows) for postinstall and build-all scripts. + +- Updated dependencies [[`2b9bc68`](https://github.com/scio-labs/inkathon/commit/2b9bc689876ea195a1cf2f6af1ca2414bcf04172)]: + - @inkathon/contracts@0.1.2 + +## 0.1.1 + +### Patch Changes + +- [`1556c0f`](https://github.com/scio-labs/inkathon/commit/1556c0fb526c0b0219217cd19ab2a47dcc038ba4) Thanks [@wottpal](https://github.com/wottpal)! - Fix `@polkadot/*` package warnings about cjs/esm duplications. + +## 0.1.0 + +### Minor Changes + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964) Thanks [@wottpal](https://github.com/wottpal)! - Move `frontend` and `contracts` packages to the root level + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`7a41afe`](https://github.com/scio-labs/inkathon/commit/7a41afe1e7c2f45b6d3972760c173a4a2197c643) Thanks [@wottpal](https://github.com/wottpal)! - Add contributor guidelines at `CONTRIBUTING.md`. + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`3598618`](https://github.com/scio-labs/inkathon/commit/3598618f87d788ec51964167557210ed8b659797) Thanks [@wottpal](https://github.com/wottpal)! - Major README.md overhaul & improvements + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964) Thanks [@wottpal](https://github.com/wottpal)! - Switch from `husky` to `simple-git-hooks` pre-commit hooks + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`07d8381`](https://github.com/scio-labs/inkathon/commit/07d83819c48f4aaa129ccc3d27929767b916c93d) Thanks [@wottpal](https://github.com/wottpal)! - Add compatability for using yarn (stable only, not classic v1) as the package manager. Note: npm is still not compatible as it lacks support for the workspace import protocol. + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964) Thanks [@wottpal](https://github.com/wottpal)! - Auto-create `.env.local` files upon first package install if non-existent + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964) Thanks [@wottpal](https://github.com/wottpal)! - Setup changeset integration for version, release, and changelog management. + +- [#30](https://github.com/scio-labs/inkathon/pull/30) [`bda4108`](https://github.com/scio-labs/inkathon/commit/bda4108c9aac8234bdb5989caea0daa8d12f46fb) Thanks [@wottpal](https://github.com/wottpal)! - Change `@…` local import path shortcut to `@/…` (create-next-app default). + +### Patch Changes + +- Updated dependencies [[`cf04f67`](https://github.com/scio-labs/inkathon/commit/cf04f671c06276ffc51e33c1e38c181173227d75), [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964), [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964), [`7a41afe`](https://github.com/scio-labs/inkathon/commit/7a41afe1e7c2f45b6d3972760c173a4a2197c643), [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964), [`3598618`](https://github.com/scio-labs/inkathon/commit/3598618f87d788ec51964167557210ed8b659797), [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964), [`07d8381`](https://github.com/scio-labs/inkathon/commit/07d83819c48f4aaa129ccc3d27929767b916c93d), [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964), [`1839164`](https://github.com/scio-labs/inkathon/commit/183916440fb3043d06c1fd603aba923eb21a5964)]: + - @inkathon/contracts@0.1.0 diff --git a/src/templates/frontend/components.json b/src/templates/frontend/components.json new file mode 100644 index 00000000..9990aa46 --- /dev/null +++ b/src/templates/frontend/components.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "zinc", + "cssVariables": true + }, + "aliases": { + "components": "@/components", + "utils": "@/utils/cn" + } +} diff --git a/src/templates/frontend/next.config.js b/src/templates/frontend/next.config.js new file mode 100644 index 00000000..0c5ad089 --- /dev/null +++ b/src/templates/frontend/next.config.js @@ -0,0 +1,19 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-env node */ +// @ts-check + +const path = require('path') + +/** + * @type {import('next').NextConfig} + **/ +const nextConfig = { + reactStrictMode: true, + // Fix for warnings about cjs/esm package duplication + // See: https://github.com/polkadot-js/api/issues/5636 + transpilePackages: ['@polkadot/.*'], + // Standalone builds for Dockerfiles + output: process.env.NEXT_BUILD_STANDALONE === 'true' ? 'standalone' : undefined, +} + +module.exports = nextConfig diff --git a/src/templates/frontend/package.json b/src/templates/frontend/package.json new file mode 100644 index 00000000..20bf726c --- /dev/null +++ b/src/templates/frontend/package.json @@ -0,0 +1,77 @@ +{ + "name": "@inkathon/frontend", + "private": true, + "version": "0.6.0", + "scripts": { + "postinstall": "bash postinstall.sh", + "dev": "NODE_ENV=development POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG=1 next dev", + "node": "pnpm run -F contracts node", + "dev-and-node": "concurrently \"pnpm dev\" \"pnpm node\" --names \"Next,Node\" --kill-others", + "build": "NODE_ENV=production next build", + "start": "NODE_ENV=production next start", + "type-check": "tsc --pretty --noEmit", + "sync-types": "typesync", + "lint": "prettier . --check && eslint .", + "lint:fix": "prettier . --write && eslint . --fix", + "lint:format": "prettier . --write" + }, + "dependencies": { + "@azns/resolver-core": "^1.6.0", + "@azns/resolver-react": "^1.6.0", + "@hookform/resolvers": "^3.3.4", + "@polkadot/api": "^10.11.2", + "@polkadot/api-contract": "^10.11.2", + "@polkadot/extension-dapp": "^0.46.6", + "@polkadot/extension-inject": "^0.46.6", + "@polkadot/keyring": "^12.6.2", + "@polkadot/types": "^10.11.2", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tooltip": "^1.0.7", + "@scio-labs/use-inkathon": "^0.8.1", + "@vercel/analytics": "^1.1.3", + "autoprefixer": "^10.4.16", + "bn.js": "^5.2.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "geist": "^1.2.2", + "lucide-react": "^0.330.0", + "next": "^14.0.4", + "postcss": "^8.4.35", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-hook-form": "^7.50.1", + "react-hot-toast": "^2.4.1", + "react-icons": "^5.0.1", + "sharp": "^0.33.1", + "spinners-react": "^1.0.7", + "tailwind-merge": "^2.2.0", + "tailwindcss-animate": "^1.0.7", + "use-async-effect": "^2.2.7", + "zod": "^3.22.4" + }, + "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@types/bn.js": "~5.1.5", + "@types/downloadjs": "^1.4.5", + "@types/eslint": "^8.56.2", + "@types/eslint-config-prettier": "^6.11.3", + "@types/node": "^20.11.17", + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "@typescript-eslint/eslint-plugin": "^7.0.1", + "@typescript-eslint/parser": "^7.0.1", + "concurrently": "^8.2.2", + "eslint": "^8.56.0", + "eslint-config-next": "^14.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.33.2", + "prettier": "^3.2.5", + "prettier-plugin-tailwindcss": "^0.5.11", + "tailwindcss": "^3.4.1", + "typescript": "^5.3.3" + } +} diff --git a/src/templates/frontend/postcss.config.js b/src/templates/frontend/postcss.config.js new file mode 100644 index 00000000..33ad091d --- /dev/null +++ b/src/templates/frontend/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/templates/frontend/postinstall.sh b/src/templates/frontend/postinstall.sh new file mode 100755 index 00000000..4e5a2311 --- /dev/null +++ b/src/templates/frontend/postinstall.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -eu + +# This script creates a default '.env.local' file if it doesn't exist yet. +# More information about environment variables: https://github.com/scio-labs/inkathon#environment-variables + +if [[ ! -e .env.local ]]; then + echo "Creating default '.env.local'…" + CP_CMD=$(command -v cp &> /dev/null && echo "cp" || echo "copy") + $CP_CMD .env.local.example .env.local +else + echo "Great, '.env.local' already exists! Skipping…" +fi diff --git a/src/templates/frontend/public/icons/azns-icon.svg b/src/templates/frontend/public/icons/azns-icon.svg new file mode 100644 index 00000000..7c22548e --- /dev/null +++ b/src/templates/frontend/public/icons/azns-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/templates/frontend/public/icons/github-button.svg b/src/templates/frontend/public/icons/github-button.svg new file mode 100644 index 00000000..2558614c --- /dev/null +++ b/src/templates/frontend/public/icons/github-button.svg @@ -0,0 +1,17 @@ + + + github-button + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/templates/frontend/public/icons/github.svg b/src/templates/frontend/public/icons/github.svg new file mode 100644 index 00000000..eb0a499f --- /dev/null +++ b/src/templates/frontend/public/icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/templates/frontend/public/icons/telegram-button.svg b/src/templates/frontend/public/icons/telegram-button.svg new file mode 100644 index 00000000..d2790239 --- /dev/null +++ b/src/templates/frontend/public/icons/telegram-button.svg @@ -0,0 +1,23 @@ + + + telegram-button + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/templates/frontend/public/icons/vercel-button.svg b/src/templates/frontend/public/icons/vercel-button.svg new file mode 100644 index 00000000..614f528c --- /dev/null +++ b/src/templates/frontend/public/icons/vercel-button.svg @@ -0,0 +1,17 @@ + + + vercel-button + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/templates/frontend/public/images/inkathon-logo.png b/src/templates/frontend/public/images/inkathon-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf77da974ddd84a22fbea6a0862e94340b1b903 GIT binary patch literal 21505 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 JR^PRY{2$e|K~Mky literal 0 HcmV?d00001 diff --git a/src/templates/frontend/public/images/inkathon-og-banner.jpg b/src/templates/frontend/public/images/inkathon-og-banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ed5b7a215175aa9858f1a35d34068e2ac317140 GIT binary patch literal 152357 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 literal 0 HcmV?d00001 diff --git a/src/templates/frontend/src/app/components/home-page-title.tsx b/src/templates/frontend/src/app/components/home-page-title.tsx new file mode 100644 index 00000000..3d8639e1 --- /dev/null +++ b/src/templates/frontend/src/app/components/home-page-title.tsx @@ -0,0 +1,97 @@ +import Image from 'next/image' +import Link from 'next/link' +import { AnchorHTMLAttributes, FC } from 'react' + +import githubIcon from 'public/icons/github-button.svg' +import telegramIcon from 'public/icons/telegram-button.svg' +import vercelIcon from 'public/icons/vercel-button.svg' +import inkathonLogo from 'public/images/inkathon-logo.png' + +import { cn } from '@/utils/cn' + +interface StyledIconLinkProps extends AnchorHTMLAttributes { + href: string + className?: string +} + +const StyledIconLink: React.FC = ({ className, children, ...rest }) => ( + + {children} + +) + +export const HomePageTitle: FC = () => { + const title = 'ink!athon' + const desc = 'Full-Stack DApp Boilerplate for ink! Smart Contracts' + const githubHref = 'https://github.com/scio-labs/inkathon' + const deployHref = 'https://github.com/scio-labs/inkathon#deployment-' + const telegramHref = 'https://t.me/inkathon' + + return ( + <> +
+ {/* Logo & Title */} + + ink!athon Logo +

{title}

+ + + {/* Tagline & Lincks */} +

{desc}

+

+ Built by{' '} + + Dennis Zoma + {' '} + &{' '} + + Scio Labs + + . Supported by{' '} + + Aleph Zero + + . +

+ + {/* Github & Vercel Buttons */} +
+ + Github Repository + + + Deploy with Vercel + + + Telegram Group + +
+ +
+
+ + ) +} diff --git a/src/templates/frontend/src/app/components/home-top-bar.tsx b/src/templates/frontend/src/app/components/home-top-bar.tsx new file mode 100644 index 00000000..52afee5a --- /dev/null +++ b/src/templates/frontend/src/app/components/home-top-bar.tsx @@ -0,0 +1,26 @@ +'use client' + +import Link from 'next/link' +import { FC } from 'react' + +import { HiOutlineExternalLink } from 'react-icons/hi' + +export const HomeTopBar: FC = () => { + return ( + <> + +
+ VIDEO▶ +
+
+ Watch the sub0 ink!athon workshop (45 min) + sub0 ink!athon workshop +
+ + + + ) +} diff --git a/src/templates/frontend/src/app/favicon.ico b/src/templates/frontend/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a0ec94bc788423e0faf8ed1fd1bc97e443ce880d GIT binary patch literal 15086 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 + + + {children} + + + + {!!env.isProduction && } + + + ) +} diff --git a/src/templates/frontend/src/app/page.tsx b/src/templates/frontend/src/app/page.tsx new file mode 100644 index 00000000..4dd46e38 --- /dev/null +++ b/src/templates/frontend/src/app/page.tsx @@ -0,0 +1,43 @@ +'use client' + +import { useEffect } from 'react' + +import { useInkathon } from '@scio-labs/use-inkathon' +import { toast } from 'react-hot-toast' + +import { HomePageTitle } from '@/app/components/home-page-title' +import { ChainInfo } from '@/components/web3/chain-info' +import { ConnectButton } from '@/components/web3/connect-button' +import { GreeterContractInteractions } from '@/components/web3/greeter-contract-interactions' +import { + FlipperContractInteractions, +} from "@/components/web3/flipper-contract-interactions"; + +export default function HomePage() { + // Display `useInkathon` error messages (optional) + const { error } = useInkathon() + useEffect(() => { + if (!error) return + toast.error(error.message) + }, [error]) + + return ( + <> +
+ {/* Title */} + + + {/* Connect Wallet Button */} + + +
+ {/* Chain Metadata Information */} + + + {/*Flipper Read/Write Contract Interactions */} + +
+
+ + ) +} diff --git a/src/templates/frontend/src/app/providers.tsx b/src/templates/frontend/src/app/providers.tsx new file mode 100644 index 00000000..528d7949 --- /dev/null +++ b/src/templates/frontend/src/app/providers.tsx @@ -0,0 +1,21 @@ +'use client' + +import { PropsWithChildren } from 'react' + +import { getDeployments } from '@/deployments/deployments' +import { UseInkathonProvider } from '@scio-labs/use-inkathon' + +import { env } from '@/config/environment' + +export default function ClientProviders({ children }: PropsWithChildren) { + return ( + + {children} + + ) +} diff --git a/src/templates/frontend/src/app/toast-config.tsx b/src/templates/frontend/src/app/toast-config.tsx new file mode 100644 index 00000000..b69a6da7 --- /dev/null +++ b/src/templates/frontend/src/app/toast-config.tsx @@ -0,0 +1,35 @@ +import { FC } from 'react' + +import { Toaster } from 'react-hot-toast' + +export const ToastConfig: FC = () => { + return ( + + ) +} diff --git a/src/templates/frontend/src/components/ui/button.tsx b/src/templates/frontend/src/components/ui/button.tsx new file mode 100644 index 00000000..006acdb4 --- /dev/null +++ b/src/templates/frontend/src/components/ui/button.tsx @@ -0,0 +1,66 @@ +import { Slot } from '@radix-ui/react-slot' +import { cva, type VariantProps } from 'class-variance-authority' +import * as React from 'react' + +import { cn } from '@/utils/cn' +import { Spinner } from './spinner' + +const buttonVariants = cva( + 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90', + outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-10 px-4 py-2', + sm: 'h-9 rounded-md px-3', + lg: 'h-11 rounded-md px-8', + icon: 'h-10 w-10', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean + isLoading?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, isLoading, children, ...props }, ref) => { + const Comp = asChild ? Slot : 'button' + + if (isLoading) + return ( + + + {children} + + ) + + return ( + + {children} + + ) + }, +) +Button.displayName = 'Button' + +export { Button, buttonVariants } diff --git a/src/templates/frontend/src/components/ui/card.tsx b/src/templates/frontend/src/components/ui/card.tsx new file mode 100644 index 00000000..487d1336 --- /dev/null +++ b/src/templates/frontend/src/components/ui/card.tsx @@ -0,0 +1,80 @@ +import * as React from "react" + +import { cn } from "@/utils/cn" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } + diff --git a/src/templates/frontend/src/components/ui/dropdown-menu.tsx b/src/templates/frontend/src/components/ui/dropdown-menu.tsx new file mode 100644 index 00000000..3a4e5442 --- /dev/null +++ b/src/templates/frontend/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,190 @@ +"use client" + +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" +import * as React from "react" + +import { cn } from "@/utils/cn" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, + DropdownMenuShortcut, DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, DropdownMenuTrigger +} + diff --git a/src/templates/frontend/src/components/ui/form.tsx b/src/templates/frontend/src/components/ui/form.tsx new file mode 100644 index 00000000..7efbe17c --- /dev/null +++ b/src/templates/frontend/src/components/ui/form.tsx @@ -0,0 +1,172 @@ +import * as LabelPrimitive from "@radix-ui/react-label" +import { Slot } from "@radix-ui/react-slot" +import * as React from "react" +import { + Controller, + ControllerProps, + FieldPath, + FieldValues, + FormProvider, + useFormContext, +} from "react-hook-form" + +import { Label } from "@/components/ui/label" +import { cn } from "@/utils/cn" + +const Form = FormProvider + +type FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +> = { + name: TName +} + +const FormFieldContext = React.createContext( + {} as FormFieldContextValue +) + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +>({ + ...props +}: ControllerProps) => { + return ( + + + + ) +} + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext) + const itemContext = React.useContext(FormItemContext) + const { getFieldState, formState } = useFormContext() + + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new Error("useFormField should be used within ") + } + + const { id } = itemContext + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } +} + +type FormItemContextValue = { + id: string +} + +const FormItemContext = React.createContext( + {} as FormItemContextValue +) + +const FormItem = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + const id = React.useId() + + return ( + +
+ + ) +}) +FormItem.displayName = "FormItem" + +const FormLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField() + + return ( +