feat(update): enhance package manager detection, version reporting, and add verbose option
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import { PackageManagerUtil, type TPackageManager, type IPackageUpdateInfo } from './classes.packagemanager.js';
|
||||
import { PackageManagerUtil, type TPackageManager, type IPackageUpdateInfo, type IPackageManagerInfo } from './classes.packagemanager.js';
|
||||
|
||||
const GITZONE_PACKAGES = [
|
||||
'@git.zone/cli',
|
||||
@@ -15,33 +15,69 @@ const GITZONE_PACKAGES = [
|
||||
|
||||
export interface IUpdateOptions {
|
||||
yes?: boolean;
|
||||
verbose?: boolean;
|
||||
}
|
||||
|
||||
export const run = async (options: IUpdateOptions = {}): Promise<void> => {
|
||||
const pmUtil = new PackageManagerUtil();
|
||||
const verbose = options.verbose === true;
|
||||
|
||||
console.log('Scanning for installed @git.zone packages...\n');
|
||||
|
||||
// Check which package managers are available
|
||||
const availablePMs: TPackageManager[] = [];
|
||||
if (verbose) {
|
||||
console.log('Detecting package managers:');
|
||||
}
|
||||
|
||||
const detectedPMs: IPackageManagerInfo[] = [];
|
||||
for (const pm of ['npm', 'yarn', 'pnpm'] as TPackageManager[]) {
|
||||
if (await pmUtil.isAvailable(pm)) {
|
||||
availablePMs.push(pm);
|
||||
const info = await pmUtil.detectPackageManager(pm, verbose);
|
||||
if (info.available) {
|
||||
detectedPMs.push(info);
|
||||
}
|
||||
}
|
||||
|
||||
if (availablePMs.length === 0) {
|
||||
if (verbose) {
|
||||
console.log('');
|
||||
}
|
||||
|
||||
if (detectedPMs.length === 0) {
|
||||
console.log('No package managers found (npm, yarn, pnpm).');
|
||||
console.log('Tried detection via \'which\' command and direct version check.');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Found package managers: ${availablePMs.join(', ')}\n`);
|
||||
// Get version info for each PM and display status table
|
||||
console.log('Package managers:\n');
|
||||
console.log(' Name Current Latest Status');
|
||||
console.log(' ──────────────────────────────────────────────');
|
||||
|
||||
for (const pmInfo of detectedPMs) {
|
||||
const versionInfo = await pmUtil.getPackageManagerVersion(pmInfo.name);
|
||||
pmInfo.currentVersion = versionInfo.current;
|
||||
pmInfo.latestVersion = versionInfo.latest;
|
||||
pmInfo.needsUpdate = versionInfo.latest
|
||||
? pmUtil.isNewerVersion(versionInfo.current, versionInfo.latest)
|
||||
: false;
|
||||
|
||||
const name = pmInfo.name.padEnd(9);
|
||||
const current = versionInfo.current.padEnd(12);
|
||||
const latest = (versionInfo.latest || 'unknown').padEnd(12);
|
||||
const status = versionInfo.latest === null
|
||||
? '? Version unknown'
|
||||
: pmInfo.needsUpdate
|
||||
? '⬆️ Update available'
|
||||
: '✓ Up to date';
|
||||
console.log(` ${name}${current}${latest}${status}`);
|
||||
}
|
||||
|
||||
console.log('');
|
||||
|
||||
// Collect all installed @git.zone packages from all package managers
|
||||
const allPackages: IPackageUpdateInfo[] = [];
|
||||
|
||||
for (const pm of availablePMs) {
|
||||
const installed = await pmUtil.getInstalledPackages(pm);
|
||||
for (const pmInfo of detectedPMs) {
|
||||
const installed = await pmUtil.getInstalledPackages(pmInfo.name);
|
||||
for (const pkg of installed) {
|
||||
// Only include packages from our predefined list
|
||||
if (GITZONE_PACKAGES.includes(pkg.name)) {
|
||||
@@ -50,7 +86,7 @@ export const run = async (options: IUpdateOptions = {}): Promise<void> => {
|
||||
name: pkg.name,
|
||||
currentVersion: pkg.version,
|
||||
latestVersion: latestVersion || 'unknown',
|
||||
packageManager: pm,
|
||||
packageManager: pmInfo.name,
|
||||
needsUpdate: latestVersion ? pmUtil.isNewerVersion(pkg.version, latestVersion) : false,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user