From 2904549779e0ad769401cab73c6eef31362a1b30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Fri, 1 Mar 2024 17:58:19 +0000 Subject: [PATCH] some more improvs --- boxes/bin.js | 18 ++- boxes/package.json | 5 +- boxes/scripts/steps/chooseBox.js | 27 +++-- boxes/scripts/steps/sandbox/install.js | 94 ++++++++++----- boxes/scripts/steps/sandbox/run.js | 23 +++- boxes/scripts/utils.js | 14 +-- boxes/yarn.lock | 160 ++++++++++++++++++++----- 7 files changed, 246 insertions(+), 95 deletions(-) diff --git a/boxes/bin.js b/boxes/bin.js index fa50a625fc1d..0b2d389302b9 100755 --- a/boxes/bin.js +++ b/boxes/bin.js @@ -1,8 +1,6 @@ #!/usr/bin/env node import { Command } from "commander"; const program = new Command(); -import path from "path"; -import os from "os"; import axios from "axios"; import { chooseAndCloneBox } from "./scripts/steps/chooseBox.js"; import { sandboxRun } from "./scripts/steps/sandbox/run.js"; @@ -25,24 +23,24 @@ const { data } = await axios.get( // // if the user has set a version (ex. "master" or "0.23.0"), use that // otherwise use the stable release (ex. 0.24.0) -const stable = `${data[0].tag_name.split("-v")[1]}`; -const version = process.env.VERSION || stable; +const latestStable = `${data[0].tag_name.split("-v")[1]}`; +const versionToInstall = process.env.VERSION || latestStable; // if the user has set a semver version (matches the regex), fetch that tag (i.e. aztec-packages-v0.23.0) // otherwise use the version as the tag -const tag = version.match(/^\d+\.\d+\.\d+$/) - ? `aztec-packages-v${version}` - : version; +const tagToUse = versionToInstall.match(/^\d+\.\d+\.\d+$/) + ? `aztec-packages-v${versionToInstall}` + : versionToInstall; program.action(async () => { // STEP 1: Choose the boilerplate - await chooseAndCloneBox(tag, version); + await chooseAndCloneBox(tagToUse, versionToInstall); // STEP 2: Install the Sandbox - await sandboxInstallOrUpdate(stable, version); + await sandboxInstallOrUpdate(latestStable, versionToInstall); // STEP 3: Running the Sandbox - await sandboxRun(version); + await sandboxRun(versionToInstall); }); program.parse(); diff --git a/boxes/package.json b/boxes/package.json index f96dab23ce68..b95860d5c94a 100644 --- a/boxes/package.json +++ b/boxes/package.json @@ -1,7 +1,7 @@ { "name": "create-aztec-app", "packageManager": "yarn@4.1.0", - "version": "0.2.3", + "version": "0.2.11", "type": "module", "scripts": { "compile": "yarn workspaces foreach -A -v run compile", @@ -11,7 +11,7 @@ "workspaces": [ "boxes/*" ], - "bin": "VERSION=${VERSION:+} bin.js", + "bin": "bin.js", "resolutions": { "@aztec/accounts": "portal:../yarn-project/accounts", "@aztec/aztec.js": "portal:../yarn-project/aztec.js", @@ -33,6 +33,7 @@ "chalk": "^5.3.0", "commander": "^12.0.0", "node-pty": "^1.0.0", + "ora": "^8.0.1", "tiged": "^2.12.6" } } diff --git a/boxes/scripts/steps/chooseBox.js b/boxes/scripts/steps/chooseBox.js index 31644542df1d..0f25e81a1665 100644 --- a/boxes/scripts/steps/chooseBox.js +++ b/boxes/scripts/steps/chooseBox.js @@ -3,22 +3,30 @@ import input from "@inquirer/input"; import tiged from "tiged"; import { getAvailableBoxes, replacePaths } from "../utils.js"; import chalk from "chalk"; -import axios from "axios"; +import ora from "ora"; const { log } = console; export async function chooseAndCloneBox(tag, version) { const availableBoxes = await getAvailableBoxes(tag, version); const appType = await select({ message: `Please choose your Aztec boilerplate:`, - choices: availableBoxes.map((box) => { - return { value: box.name, name: box.description }; - }), + choices: [ + ...availableBoxes.map((box) => { + return { value: box.name, name: box.description }; + }), + { value: "skip", name: "Skip this step" }, + ], }); if (appType === "skip") return; log(chalk.yellow(`You chose: ${appType}`)); + const spinner = ora({ + text: "Cloning the boilerplate code...", + color: "blue", + }); + try { // STEP 1: Clone the box const appName = await input({ @@ -26,12 +34,15 @@ export async function chooseAndCloneBox(tag, version) { default: "my-aztec-app", }); - chalk.blue("Cloning the boilerplate code..."); + spinner.start(); + const emitter = tiged( // same as the nargo dependencies above: - // "master" and "latest" both mean "master" for the github repo // but if the user has set a semver version, we want that tag (i.e. aztec-packages-v0.23.0) - `AztecProtocol/aztec-packages/boxes/${appType}${["latest", "master"].includes(tag) ? "" : `#${tag}`}`, + `AztecProtocol/aztec-packages/boxes/${appType}${tag && `#${tag}`}`, + { + verbose: true, + }, ); emitter.on("info", (info) => { @@ -45,5 +56,7 @@ export async function chooseAndCloneBox(tag, version) { } catch (error) { log(chalk.bgRed(error.message)); process.exit(1); + } finally { + spinner.stop(); } } diff --git a/boxes/scripts/steps/sandbox/install.js b/boxes/scripts/steps/sandbox/install.js index 83af3d5a02d3..42ef1e68fcb2 100644 --- a/boxes/scripts/steps/sandbox/install.js +++ b/boxes/scripts/steps/sandbox/install.js @@ -39,7 +39,43 @@ const runPty = async (command, { success, error }) => { } }; -export async function sandboxInstallOrUpdate(stable, version) { +function findOutUserVersion() { + /** + * We know user has docker installed. + * Now we get the result of the docker image inspect command + * If it throws with an empty object, that's because the image doesn't exist so the user + * Doesn't have the sandbox installed. We exit early since there's nothing to parse. + * + * If it returns an object, we parse the COMMIT_TAG field + * - If there's anything there, that's the version of the sandbox + * - If there's nothing there, that's because there's no tag yet, so he's on master + */ + let sandboxVersion = null; + let dockerOutput = null; + try { + dockerOutput = execSync("docker image inspect aztecprotocol/aztec 2>&1", { + encoding: "utf8", + }); + } catch (error) { + // Something went wrong with the docker command + // So we assume sandbox is not installed + sandboxVersion == null; + } + + if (!dockerOutput) return sandboxVersion; + + // parsing the docker output to get the commit tag + sandboxVersion = JSON.parse(dockerOutput)[0] + .Config.Env.find((env) => env.includes("COMMIT_TAG")) + .split("=")[1]; + + // There's no tag yet, so the user is on master + if (!sandboxVersion) sandboxVersion = "master"; + + return sandboxVersion; +} + +export async function sandboxInstallOrUpdate(latestStable, versionToInstall) { // Checking for docker try { execSync("docker info >/dev/null 2>&1"); @@ -52,24 +88,11 @@ export async function sandboxInstallOrUpdate(stable, version) { process.exit(1); } - let sandboxVersion; - try { - const dockerOutput = execSync( - "docker image inspect aztecprotocol/aztec 2>&1", - { - encoding: "utf8", - }, - ); - sandboxVersion = JSON.parse(dockerOutput)[0] - .Config.Env.find((env) => env.includes("COMMIT_TAG")) - .split("=")[1]; - console.log(sandboxVersion); - } catch (error) { - sandboxVersion == null; - } + // Let's get which version of the sandbox the user has installed + const sandboxVersion = findOutUserVersion(); - // Checking for the Aztec Sandbox - if (!sandboxVersion) { + // Base case is that the user doesn't have the sandbox installed + if (sandboxVersion == null) { const answer = await confirm({ message: "Seems like you don't have the Aztec Sandbox installed. Do you want to install it?", @@ -87,32 +110,39 @@ export async function sandboxInstallOrUpdate(stable, version) { ); } } else if ( - sandboxVersion === stable && - sandboxVersion !== version && - !["latest", "master"].includes(version) + // Another situation is where the sandbox matches the stable version (i.e. 0.24.0) or master + (sandboxVersion === latestStable || sandboxVersion === "master") && + // but the user has chosen a different version (i.e. "master", 0.23.0, etc) + sandboxVersion !== versionToInstall ) { const answer = await confirm({ - message: `The sandbox is version ${sandboxVersion} but your chosen version is ${version}. Do you want to install version ${version}?`, + message: `The sandbox is version ${sandboxVersion} but your chosen version is ${versionToInstall}. Do you want to install version ${versionToInstall}?`, default: true, }); if (answer) { - execSync( - `${["latest", "master"].includes(version) ? "VERSION=master" : ""} $HOME/.aztec/bin/aztec-up`, - { stdio: "inherit" }, - ); + // cool thing is that user already has VERSION in the path, so we don't need to pass it here too + execSync(`$HOME/.aztec/bin/aztec-up`, { stdio: "inherit" }); } - } else if (sandboxVersion !== stable) { + } else if ( + // Finally, there's a situation where + // the user didn't want any specific version + sandboxVersion !== versionToInstall && + // and the sandbox is not up to date + // so we need to update to that since the cloned repo is also the latest + sandboxVersion !== latestStable && + // we're also aware that the user might be on master + // so his version is actually not outdated! + versionToInstall !== "master" + ) { const answer = await confirm({ - message: `The Sandbox is not up to date. Do you want to update it to ${stable}?`, + message: `The Sandbox is not up to date. Do you want to update it to ${latestStable}?`, default: true, }); if (answer) { - execSync( - `${["latest", "master"].includes(version) ? "VERSION=master" : ""} $HOME/.aztec/bin/aztec-up latest`, - { stdio: "inherit" }, - ); + // again abusing the fact that the user has VERSION in the path + execSync(`$HOME/.aztec/bin/aztec-up`, { stdio: "inherit" }); } } } diff --git a/boxes/scripts/steps/sandbox/run.js b/boxes/scripts/steps/sandbox/run.js index 55c1b491ab3a..8ca7e35d7099 100644 --- a/boxes/scripts/steps/sandbox/run.js +++ b/boxes/scripts/steps/sandbox/run.js @@ -1,12 +1,21 @@ import confirm from "@inquirer/confirm"; import { execSync } from "child_process"; import chalk from "chalk"; +import axios from "axios"; +import ora from "ora"; const { log } = console; export async function sandboxRun(version) { + const spinner = ora({ + text: "Trying to reach the sandbox...", + color: "blue", + }); + try { - await fetch("http://localhost:8080", { + spinner.start(); + await axios("http://localhost:8080", { method: "POST", + timeout: 2000, headers: { "Content-Type": "application/json", }, @@ -16,10 +25,13 @@ export async function sandboxRun(version) { id: "null", }), }); + spinner.stop(); + log(chalk.green("The Sandbox already running!")); } catch (error) { + spinner.stop(); const answer = await confirm({ message: - "I can't reach the Sandbox on port 8080. Do you want to start it?", + "I can't reach the Sandbox on localhost:8080. Do you want to start it?", default: true, }); @@ -28,10 +40,9 @@ export async function sandboxRun(version) { chalk.green("Starting the sandbox... This might take a few minutes."), ); log(chalk.bgGreen(`Go and explore the boilerplate code while you wait!`)); - execSync( - `${["latest", "master"].includes(version) ? "VERSION=master" : ""} $HOME/.aztec/bin/aztec sandbox`, - { stdio: "inherit" }, - ); + execSync(`$HOME/.aztec/bin/aztec sandbox`, { stdio: "inherit" }); } + } finally { + spinner.stop(); } } diff --git a/boxes/scripts/utils.js b/boxes/scripts/utils.js index c15b1a8aef3e..57f7f681701b 100644 --- a/boxes/scripts/utils.js +++ b/boxes/scripts/utils.js @@ -18,13 +18,13 @@ export async function getAvailableBoxes(tag, version) { let data; try { ({ data } = await axios.get( - `https://api.github.com/repos/AztecProtocol/aztec-packages/contents/boxes/boxes?ref=${tag}`, + `https://api.github.com/repos/AztecProtocol/aztec-packages/contents/boxes/boxes${tag == "master" ? "" : `?ref=${tag}`}`, axiosOpts, )); } catch (e) { if (e.response.statusText === "Not Found") { ({ data } = await axios.get( - `https://api.github.com/repos/AztecProtocol/aztec-packages/contents/boxes?ref=${tag}`, + `https://api.github.com/repos/AztecProtocol/aztec-packages/contents/boxes${tag == "master" ? "" : `?ref=${tag}`}`, axiosOpts, )); } @@ -36,7 +36,7 @@ export async function getAvailableBoxes(tag, version) { ) .map(async ({ path, name }) => { ({ data } = await axios.get( - `https://raw.githubusercontent.com/AztecProtocol/aztec-packages/${["latest", "master"].includes(tag) ? "master" : tag}/${path}/package.json`, + `https://raw.githubusercontent.com/AztecProtocol/aztec-packages/${tag == "master" ? "master" : tag}/${path}/package.json`, axiosOpts, )); @@ -112,9 +112,7 @@ export async function replacePaths(rootDir, tag, version) { const directory = content.dependencies[dep].path.replace(/^(..\/)+/); content.dependencies[dep] = { git: "https://github.com/AztecProtocol/aztec-packages/", - // "master" and "latest" both mean "master" for the nargo dependencies - // plus, we're parsing the tag here, not the version, but as seen above, tag IS version if it's not semver - tag: ["latest", "master"].includes(tag) ? "master" : tag, + tag, directory, }; }); @@ -128,11 +126,11 @@ export async function replacePaths(rootDir, tag, version) { let content = JSON.parse(fs.readFileSync(filePath, "utf8")); Object.keys(content.dependencies) .filter((deps) => deps.match("@aztec")) - // "master" and "latest" both mean "latest" for the npm release + // "master" actually means "latest" for the npm release .map( (dep) => (content.dependencies[dep] = - `${["latest", "master"].includes(version) ? "latest" : `^${version}`}`), + `${version === "master" ? "latest" : `^${version}`}`), ); fs.writeFileSync(filePath, JSON.stringify(content), "utf8"); } catch (e) { diff --git a/boxes/yarn.lock b/boxes/yarn.lock index 3fe5046baac2..e75cd8e3dd20 100644 --- a/boxes/yarn.lock +++ b/boxes/yarn.lock @@ -20,12 +20,12 @@ __metadata: linkType: hard "@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10c0/92ce5915f8901d8c7cd4f4e6e2fe7b9fd335a29955b400caa52e0e5b12ca3796ada7c2f10e78c9c5b0f9c2539dff0ffea7b19850a56e1487aa083531e1e46d43 + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed languageName: node linkType: hard @@ -1068,14 +1068,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.4 - resolution: "@jridgewell/gen-mapping@npm:0.3.4" +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" dependencies: - "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 10c0/dd6c48341ad01a75bd93bae17fcc888120d063bdf927d4c496b663aa68e22b9e51e898ba38abe7457b28efd3fa5cde43723dba4dc5f94281119fa709cb5046be + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb languageName: node linkType: hard @@ -1086,7 +1086,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": +"@jridgewell/set-array@npm:^1.2.1": version: 1.2.1 resolution: "@jridgewell/set-array@npm:1.2.1" checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 @@ -1120,13 +1120,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.23 - resolution: "@jridgewell/trace-mapping@npm:0.3.23" +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.24 + resolution: "@jridgewell/trace-mapping@npm:0.3.24" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/26190e09129b184a41c83ce896ce41c0636ddc1285a22627a48ec7981829346ced655d5774bdca30446250baf0e4fb519c47732760d128edda51a6222b40397a + checksum: 10c0/5d6656c439f67cee8bc196a72ceebc446c23924dba6c67806fd3dfefb3ef4c8b2168ea44a0293d8c33c71b88e60862e0397576ef8707e4321e64898fec7a0189 languageName: node linkType: hard @@ -1652,11 +1652,11 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:^20.11.16, @types/node@npm:^20.11.17, @types/node@npm:^20.11.21": - version: 20.11.23 - resolution: "@types/node@npm:20.11.23" + version: 20.11.24 + resolution: "@types/node@npm:20.11.24" dependencies: undici-types: "npm:~5.26.4" - checksum: 10c0/aec1bca6d6485a14835ad0f5d99fd6e8231b0d836b23c2b6f0826098370b938851979fd08f28f7430e993e85df661d7b5c4f846f1ce8702dc70543e16072791d + checksum: 10c0/5a62225eb4797b41e6953f9c08c4611d607b5422ddd153312fc81ed6ed37115228ae27e3e3caa1a3bf52d88310306a196ba1cfbd8b2ec918a20f64d80dfa22c9 languageName: node linkType: hard @@ -3251,6 +3251,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: "npm:^4.0.0" + checksum: 10c0/e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c + languageName: node + linkType: hard + "cli-spinners@npm:^2.9.2": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" @@ -3588,9 +3597,10 @@ __metadata: chalk: "npm:^5.3.0" commander: "npm:^12.0.0" node-pty: "npm:^1.0.0" + ora: "npm:^8.0.1" tiged: "npm:^2.12.6" bin: - create-aztec-app: "VERSION=${VERSION:+} bin.js" + create-aztec-app: bin.js languageName: unknown linkType: soft @@ -4032,9 +4042,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.668": - version: 1.4.687 - resolution: "electron-to-chromium@npm:1.4.687" - checksum: 10c0/902837650116cae52936fcd7c4f6464482a64b303c241e320ba12d3004e285270064cb181956c449029864db9a921e953e0a87856acf5affabb180cc6f31d6c1 + version: 1.4.689 + resolution: "electron-to-chromium@npm:1.4.689" + checksum: 10c0/07164698a7ca6f798eba0fefccc3987be98e996ff50af1d2b24a75d53bc5e5cd101e79bca1d5e66b3c87be3f549c66b89deaf6c19a9dbef0eb9a8e3f8d15d3f5 languageName: node linkType: hard @@ -4060,6 +4070,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^10.3.0": + version: 10.3.0 + resolution: "emoji-regex@npm:10.3.0" + checksum: 10c0/b4838e8dcdceb44cf47f59abe352c25ff4fe7857acaf5fb51097c427f6f75b44d052eb907a7a3b86f86bc4eae3a93f5c2b7460abe79c407307e6212d65c91163 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -5072,6 +5089,13 @@ __metadata: languageName: node linkType: hard +"get-east-asian-width@npm:^1.0.0": + version: 1.2.0 + resolution: "get-east-asian-width@npm:1.2.0" + checksum: 10c0/914b1e217cf38436c24b4c60b4c45289e39a45bf9e65ef9fd343c2815a1a02b8a0215aeec8bf9c07c516089004b6e3826332481f40a09529fcadbf6e579f286b + languageName: node + linkType: hard + "get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" @@ -6007,6 +6031,13 @@ __metadata: languageName: node linkType: hard +"is-interactive@npm:^2.0.0": + version: 2.0.0 + resolution: "is-interactive@npm:2.0.0" + checksum: 10c0/801c8f6064f85199dc6bf99b5dd98db3282e930c3bc197b32f2c5b89313bb578a07d1b8a01365c4348c2927229234f3681eb861b9c2c92bee72ff397390fa600 + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -6127,6 +6158,20 @@ __metadata: languageName: node linkType: hard +"is-unicode-supported@npm:^1.3.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: 10c0/b8674ea95d869f6faabddc6a484767207058b91aea0250803cbf1221345cb0c56f466d4ecea375dc77f6633d248d33c47bd296fb8f4cdba0b4edba8917e83d8a + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.0.0 + resolution: "is-unicode-supported@npm:2.0.0" + checksum: 10c0/3013dfb8265fe9f9a0d1e9433fc4e766595631a8d85d60876c457b4bedc066768dab1477c553d02e2f626d88a4e019162706e04263c94d74994ef636a33b5f94 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -7158,6 +7203,16 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^6.0.0": + version: 6.0.0 + resolution: "log-symbols@npm:6.0.0" + dependencies: + chalk: "npm:^5.3.0" + is-unicode-supported: "npm:^1.3.0" + checksum: 10c0/36636cacedba8f067d2deb4aad44e91a89d9efb3ead27e1846e7b82c9a10ea2e3a7bd6ce28a7ca616bebc60954ff25c67b0f92d20a6a746bb3cc52c3701891f6 + languageName: node + linkType: hard + "loose-envify@npm:^1.1.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -8068,7 +8123,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.2": +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -8109,6 +8164,23 @@ __metadata: languageName: node linkType: hard +"ora@npm:^8.0.1": + version: 8.0.1 + resolution: "ora@npm:8.0.1" + dependencies: + chalk: "npm:^5.3.0" + cli-cursor: "npm:^4.0.0" + cli-spinners: "npm:^2.9.2" + is-interactive: "npm:^2.0.0" + is-unicode-supported: "npm:^2.0.0" + log-symbols: "npm:^6.0.0" + stdin-discarder: "npm:^0.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/7a94c075a7f182a6ace80c3505b945520ab16e05ebe536a714a3d61e51dd8f777c75c8be920e157e0c60ada6fe89bca37376897fb4d486bea5771229be992097 + languageName: node + linkType: hard + "p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -8936,6 +9008,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -9359,18 +9441,18 @@ __metadata: linkType: hard "side-channel@npm:^1.0.4": - version: 1.0.5 - resolution: "side-channel@npm:1.0.5" + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" dependencies: - call-bind: "npm:^1.0.6" + call-bind: "npm:^1.0.7" es-errors: "npm:^1.3.0" get-intrinsic: "npm:^1.2.4" object-inspect: "npm:^1.13.1" - checksum: 10c0/31312fecb68997ce2893b1f6d1fd07d6dd41e05cc938e82004f056f7de96dd9df599ef9418acdf730dda948e867e933114bd2efe4170c0146d1ed7009700c252 + checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f languageName: node linkType: hard -"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -9632,6 +9714,13 @@ __metadata: languageName: node linkType: hard +"stdin-discarder@npm:^0.2.1": + version: 0.2.2 + resolution: "stdin-discarder@npm:0.2.2" + checksum: 10c0/c78375e82e956d7a64be6e63c809c7f058f5303efcaf62ea48350af072bacdb99c06cba39209b45a071c1acbd49116af30df1df9abb448df78a6005b72f10537 + languageName: node + linkType: hard + "stdout-stream@npm:^1.4.0": version: 1.4.1 resolution: "stdout-stream@npm:1.4.1" @@ -9683,6 +9772,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^7.0.0": + version: 7.1.0 + resolution: "string-width@npm:7.1.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/68a99fbc3bd3d8eb42886ff38dce819767dee55f606f74dfa4687a07dfd21262745d9683df0aa53bf81a5dd47c13da921a501925b974bec66a7ddd634fef0634 + languageName: node + linkType: hard + "string.prototype.trim@npm:^1.2.8": version: 1.2.8 resolution: "string.prototype.trim@npm:1.2.8" @@ -9743,7 +9843,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1": +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: