UNPKG

@basictech/cli

Version:

Basic CLI for creating & managing your projects

64 lines 2.46 kB
import { spawn } from 'child_process'; import { getVersion } from '../lib/version.js'; import { ApiClient } from '../lib/api.js'; import { isOnline } from '../lib/platform.js'; import { MESSAGES } from '../lib/constants.js'; const MANUAL_UPDATE_HINT = 'You can update manually:\n npm install -g @basictech/cli@latest'; export async function UpdateCommand() { try { if (!(await isOnline())) { console.error(MESSAGES.OFFLINE); process.exit(1); } const currentVersion = getVersion(); console.log(`Current version: ${currentVersion}`); console.log('Checking for updates...'); const apiClient = ApiClient.getInstance(); const latestVersion = await apiClient.checkLatestRelease(); if (latestVersion === currentVersion) { console.log('Already on the latest version.'); return; } console.log(`Updating ${currentVersion}${latestVersion}...`); await updatePackage(); } catch (error) { console.error('Update failed:', error instanceof Error ? error.message : 'Unknown error'); console.log(`\n${MANUAL_UPDATE_HINT}`); process.exit(1); } } async function updatePackage() { return new Promise((resolve, reject) => { const updateProcess = spawn('npm', ['install', '-g', '@basictech/cli@latest'], { stdio: 'pipe', shell: true }); let errorOutput = ''; updateProcess.stdout?.on('data', () => { }); updateProcess.stderr?.on('data', (data) => { errorOutput += data.toString(); }); updateProcess.on('close', (code) => { if (code === 0) { console.log('Updated successfully.'); console.log('Run `basic version` to verify.'); resolve(); } else { console.error('Update failed.'); console.log(`\n${MANUAL_UPDATE_HINT}`); if (errorOutput) { console.log('\nDetails:', errorOutput.trim()); } reject(new Error(`Update process exited with code ${code}`)); } }); updateProcess.on('error', (error) => { console.error('Could not start update process.'); console.log(`\n${MANUAL_UPDATE_HINT}`); reject(error); }); }); } //# sourceMappingURL=update.js.map