@koalarx/nest-cli
Version:
CLI para criaΓ§Γ£o de projetos utilizando Koala Nest
96 lines (95 loc) β’ 3.69 kB
JavaScript
import https from 'https';
import chalk from 'chalk';
import fs from 'fs';
import path from 'path';
export async function checkKoalaUpdates(projectPath) {
console.log(chalk.blue('\nπ Checking for Koala packages updates...\n'));
try {
const packagesToCheck = ['@koalarx/nest', '@koalarx/nest-cli'];
const results = [];
let installedVersions = {};
if (projectPath) {
const packageJsonPath = path.join(projectPath, 'package.json');
if (fs.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
installedVersions = {
...packageJson.dependencies,
...packageJson.devDependencies
};
}
}
for (const pkg of packagesToCheck) {
const latestVersion = await getLatestNpmVersion(pkg);
const currentVersion = installedVersions[pkg] || null;
let cleanCurrent = null;
if (currentVersion) {
cleanCurrent = currentVersion.replace(/^[\^~]/, '');
}
const needsUpdate = cleanCurrent ? cleanCurrent !== latestVersion : false;
results.push({
package: pkg,
current: cleanCurrent,
latest: latestVersion,
needsUpdate
});
}
let hasUpdates = false;
for (const result of results) {
if (result.current) {
if (result.needsUpdate) {
hasUpdates = true;
console.log(chalk.yellow(` π¦ ${result.package}`));
console.log(chalk.gray(` Current: v${result.current}`));
console.log(chalk.green(` Latest: v${result.latest} β¬οΈ`));
}
else {
console.log(chalk.green(` β
${result.package}`));
console.log(chalk.gray(` v${result.current} (up to date)`));
}
}
else {
console.log(chalk.gray(` β ${result.package} (not installed)`));
console.log(chalk.gray(` Latest: v${result.latest}`));
}
console.log();
}
if (hasUpdates) {
console.log(chalk.blue(' π‘ To update, run:'));
console.log(chalk.gray(' bun update @koalarx/nest @koalarx/nest-cli'));
console.log(chalk.gray(' or'));
console.log(chalk.gray(' npm update @koalarx/nest @koalarx/nest-cli\n'));
}
else if (results.some(r => r.current)) {
console.log(chalk.green(' π All Koala packages are up to date!\n'));
}
}
catch (error) {
console.error(chalk.red(' β Failed to check for updates:'), error);
throw error;
}
}
async function getLatestNpmVersion(packageName) {
return new Promise((resolve, reject) => {
const options = {
hostname: 'registry.npmjs.org',
path: `/${packageName}`,
method: 'GET',
headers: {
'Accept': 'application/json'
}
};
https.get(options, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
try {
const info = JSON.parse(data);
resolve(info['dist-tags'].latest);
}
catch (error) {
reject(error);
}
});
}).on('error', reject);
});
}