From f8f88a3025cf60947f3e52647c60bbb7e4d4ce57 Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Thu, 10 Apr 2025 15:30:10 +0200 Subject: [PATCH 1/2] fix: skip bootstrap for specific commands --- packages/cli/index.ts | 34 +++++++++++++++++++++------------ packages/cli/package.json | 2 +- packages/cli/utils/commander.ts | 12 ++++++++++++ 3 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 packages/cli/utils/commander.ts diff --git a/packages/cli/index.ts b/packages/cli/index.ts index 43e22394..b2fdbe01 100755 --- a/packages/cli/index.ts +++ b/packages/cli/index.ts @@ -14,10 +14,13 @@ import { registerRulesCommand } from "./commands/rules.js"; import { bootstrap, getBucketUser } from "./services/bootstrap.js"; import { authStore } from "./stores/auth.js"; import { configStore } from "./stores/config.js"; +import { commandName } from "./utils/commander.js"; import { handleError } from "./utils/errors.js"; import { apiUrlOption, baseUrlOption, debugOption } from "./utils/options.js"; import { stripTrailingSlash } from "./utils/path.js"; +const skipBootstrapCommands = [/^login/, /^logout/, /^rules/]; + type Options = { debug?: boolean; baseUrl?: string; @@ -35,7 +38,7 @@ async function main() { program.addOption(apiUrlOption); // Pre-action hook - program.hook("preAction", async () => { + program.hook("preAction", async (_, actionCommand) => { const { debug, baseUrl, apiUrl } = program.opts(); const cleanedBaseUrl = stripTrailingSlash(baseUrl?.trim()); // Set baseUrl and apiUrl in config store, will skip if undefined @@ -46,17 +49,24 @@ async function main() { (cleanedBaseUrl && `${cleanedBaseUrl}/api`), }); - const spinner = ora("Bootstrapping...").start(); - try { - // Load bootstrap data if not already loaded - await bootstrap(); - spinner.stop(); - } catch (error) { - spinner.fail("Bootstrap failed."); - void handleError( - debug ? error : `Unable to reach ${configStore.getConfig("baseUrl")}.`, - "Connect", - ); + // Skip bootstrapping for commands that don't require it + if ( + !skipBootstrapCommands.some((cmd) => cmd.test(commandName(actionCommand))) + ) { + const spinner = ora("Bootstrapping...").start(); + try { + // Load bootstrap data if not already loaded + await bootstrap(); + spinner.stop(); + } catch (error) { + spinner.fail("Bootstrap failed."); + void handleError( + debug + ? error + : `Unable to reach ${configStore.getConfig("baseUrl")}.`, + "Connect", + ); + } } if (debug) { diff --git a/packages/cli/package.json b/packages/cli/package.json index 1745601d..00a24414 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/cli", - "version": "0.5.0", + "version": "0.5.1", "packageManager": "yarn@4.1.1", "description": "CLI for Bucket service", "main": "./dist/index.js", diff --git a/packages/cli/utils/commander.ts b/packages/cli/utils/commander.ts new file mode 100644 index 00000000..7577a07d --- /dev/null +++ b/packages/cli/utils/commander.ts @@ -0,0 +1,12 @@ +import { Command } from "commander"; + +export function commandName(command: Command) { + if ( + command.parent && + command.parent.name() && + command.parent.name() !== "index" + ) { + return `${command.parent.name()} ${command.name()}`; + } + return command.name(); +} From 441016df3d52fd0c02b89971c851bb984272ac51 Mon Sep 17 00:00:00 2001 From: Erik Hughes Date: Thu, 10 Apr 2025 15:36:19 +0200 Subject: [PATCH 2/2] Update packages/cli/utils/commander.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- packages/cli/utils/commander.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/cli/utils/commander.ts b/packages/cli/utils/commander.ts index 7577a07d..c4d4dcc4 100644 --- a/packages/cli/utils/commander.ts +++ b/packages/cli/utils/commander.ts @@ -1,12 +1,11 @@ import { Command } from "commander"; export function commandName(command: Command) { - if ( - command.parent && - command.parent.name() && - command.parent.name() !== "index" - ) { - return `${command.parent.name()} ${command.name()}`; + if (command.parent) { + const parentName = command.parent.name(); + if (parentName && parentName !== "index") { + return `${parentName} ${command.name()}`; + } } return command.name(); }