@basictech/cli
Version:
Basic CLI for creating & managing your projects
64 lines • 2.46 kB
JavaScript
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