From 17cb6d866c370c71c472bf316949aba2253b5948 Mon Sep 17 00:00:00 2001 From: Kayvan Sylvan Date: Sun, 15 Jun 2025 10:25:14 -0700 Subject: [PATCH] chore: refactor installer to use modern JS patterns and improve code clarity ## CHANGES - Replace require with node:path import - Add block scoping to switch cases - Remove unused options parameter from update - Use optional chaining for ideConfig check - Replace forEach with for...of loops - Use template literals for string concatenation - Add early return to avoid else block - Update spell check dictionary entries --- .vscode/settings.json | 3 +++ tools/installer/bin/bmad.js | 4 ++-- tools/installer/lib/installer.js | 25 ++++++++++++++----------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3af293ba..adc9547f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,6 +27,7 @@ "Luxon", "MERN", "mgmt", + "nodir", "Nuxt", "overcommitting", "pasteable", @@ -58,6 +59,8 @@ "Turborepo", "Underserved", "unredacted", + "upgrader", + "upgraders", "VARCHAR", "venv", "vercel", diff --git a/tools/installer/bin/bmad.js b/tools/installer/bin/bmad.js index ec2fb900..82580857 100755 --- a/tools/installer/bin/bmad.js +++ b/tools/installer/bin/bmad.js @@ -66,9 +66,9 @@ program .description('Update existing BMAD installation') .option('--force', 'Force update, overwriting modified files') .option('--dry-run', 'Show what would be updated without making changes') - .action(async (options) => { + .action(async () => { try { - await installer.update(options); + await installer.update(); } catch (error) { console.error(chalk.red('Update failed:'), error.message); process.exit(1); diff --git a/tools/installer/lib/installer.js b/tools/installer/lib/installer.js index bd0b2f69..261f4b9b 100644 --- a/tools/installer/lib/installer.js +++ b/tools/installer/lib/installer.js @@ -1,4 +1,4 @@ -const path = require("path"); +const path = require("node:path"); const chalk = require("chalk"); const ora = require("ora"); const inquirer = require("inquirer"); @@ -257,11 +257,12 @@ class Installer { ]); switch (action) { - case "upgrade": + case "upgrade": { console.log(chalk.cyan("\n📦 Starting v3 to v4 upgrade process...")); const V3ToV4Upgrader = require("../../upgraders/v3-to-v4-upgrader"); const upgrader = new V3ToV4Upgrader(); return await upgrader.upgrade({ projectPath: installDir }); + } case "alongside": return await this.performFreshInstall(config, installDir, spinner); case "cancel": @@ -299,7 +300,7 @@ class Installer { switch (action) { case "force": return await this.performFreshInstall(config, installDir, spinner); - case "different": + case "different": { const { newDir } = await inquirer.prompt([ { type: "input", @@ -310,6 +311,7 @@ class Installer { ]); config.directory = newDir; return await this.install(config); + } case "cancel": console.log("Installation cancelled."); return; @@ -330,7 +332,9 @@ class Installer { if (modifiedFiles.length > 0) { spinner.warn("Found modified files"); console.log(chalk.yellow("\nThe following files have been modified:")); - modifiedFiles.forEach((file) => console.log(` - ${file}`)); + for (const file of modifiedFiles) { + console.log(` - ${file}`); + } const { action } = await inquirer.prompt([ { @@ -395,9 +399,9 @@ class Installer { if (config.ide) { const ideConfig = configLoader.getIdeConfiguration(config.ide); - if (ideConfig && ideConfig.instructions) { + if (ideConfig?.instructions) { console.log( - chalk.bold("To use BMAD agents in " + ideConfig.name + ":") + chalk.bold(`To use BMAD agents in ${ideConfig.name}:`) ); console.log(ideConfig.instructions); } @@ -422,7 +426,7 @@ class Installer { } // Legacy method for backward compatibility - async update(options) { + async update() { console.log(chalk.yellow('The "update" command is deprecated.')); console.log( 'Please use "install" instead - it will detect and offer to update existing installations.' @@ -436,9 +440,8 @@ class Installer { ide: null, }; return await this.install(config); - } else { - console.log(chalk.red("No BMAD installation found.")); } + console.log(chalk.red("No BMAD installation found.")); } async listAgents() { @@ -446,9 +449,9 @@ class Installer { console.log(chalk.bold("\nAvailable BMAD Agents:\n")); - agents.forEach((agent) => { + for (const agent of agents) { console.log(chalk.cyan(` ${agent.id.padEnd(20)}`), agent.description); - }); + } console.log( chalk.dim("\nInstall with: npx bmad-method install --agent=\n")