UNPKG

cvm-cli

Version:

A unified CLI tool for managing PHP, Node.js, and Python versions with virtual environment and dependency management support.

64 lines (54 loc) 2.01 kB
const BaseVersionManager = require('./baseVersionManager'); const fetch = require('node-fetch'); const fs = require('fs-extra'); const chalk = require('chalk'); class NodeVersionManager extends BaseVersionManager { constructor() { super('node'); } async getAvailableVersions() { try { const response = await fetch('https://nodejs.org/dist/index.json'); if (!response.ok) { throw new Error('Failed to fetch Node.js version list'); } const versions = await response.json(); return versions.map(v => v.version.replace('v', '')); } catch (error) { console.error('Error fetching available versions:', error.message); return []; } } async install(version) { if (await this.isVersionInstalled(version)) { console.log(`Node.js ${version} is already installed.`); return; } const platform = this.getPlatform(); const arch = this.getArch(); const versionStr = `v${version}`; const tarballName = platform === 'win32' ? `node-${versionStr}-win-${arch}.zip` : `node-${versionStr}-${platform}-${arch}.tar.xz`; const url = `https://nodejs.org/dist/${versionStr}/${tarballName}`; console.log(`Downloading Node.js ${version}...`); const downloadDir = `${this.languageDir}/downloads`; // Temp download directory const downloadPath = `${downloadDir}/${tarballName}`; try { await this.downloadFile(url, downloadPath); const versionDir = `${this.languageDir}/${version}`; if (platform === 'win32') { throw new Error('Windows support not implemented yet'); } else { await this.extractTarXz(downloadPath, versionDir); } console.log(`Node.js ${version} installed successfully.`); } catch (error) { console.error(`Failed to install Node.js ${version}:`, error.message); } finally { await fs.remove(downloadDir); // Clean up downloaded files } } } module.exports = NodeVersionManager;