import fs from "node:fs"; import path from "node:path"; import chalk from "chalk"; import { execShellCommand, spawnShellCommand } from "./lib/execShellCommand.js"; import { importJson } from "./lib/importJson.js"; import { semverCompare } from "./lib/semverCompare.js"; try { let cliPkg = await importJson("../package.json"); let cmd = process.platform === "win32" ? "pnpm.cmd" : "pnpm"; let isWorkspace = fs.existsSync(path.join(process.cwd(), "pnpm-workspace.yaml")) || fs.existsSync(path.join(process.cwd(), "pnpm-workspace.yml")); let latest = await execShellCommand(`${cmd} view ${cliPkg.name} version`); latest = latest.trim(); if (semverCompare(latest, cliPkg.version) <= 0) { console.log(chalk.green("CLI is already up to date.")); process.exit(0); } let args = ["install", `${cliPkg.name}@latest`, "-g"]; if (isWorkspace) args.unshift("-w"); console.log(cmd, args.join(" ")); await spawnShellCommand(cmd, args); try { let pkg = await importJson("./package.json", true); if (pkg.dependencies?.[cliPkg.name] || pkg.devDependencies?.[cliPkg.name]) { let localPkg = await importJson(`./node_modules/${cliPkg.name}/package.json`, true); if (semverCompare(latest, localPkg.version) > 0) { args = ["install", `${cliPkg.name}@latest`]; if (isWorkspace) args.unshift("-w"); console.log(cmd, args.join(" ")); await spawnShellCommand(cmd, args); } else { console.log(chalk.green("Local CLI already up to date.")); } } else { console.log(chalk.blue("CLI not found in local package.json. Skipping local install.")); } } catch { console.log(chalk.blue("No package.json found, skipping local install")); } console.log(chalk.green("Update completed.")); } catch (error: any) { console.error(chalk.red(`Update failed: ${error.message}`)); }