hashon
Version:
Encrypt, decrypt and hash JSON data with AES and SHA — made for secure local files and syncing.
69 lines (56 loc) • 2.63 kB
JavaScript
// versionStatus.js:
const fs = require('fs');
const path = require('path');
const semver = require('semver');
// Direkt en async IIFE (Immediately Invoked Function Expression)
// för att kunna använda await på import() av ESM-modulen 'latest-version'
(async function printStatus() {
// Dynamisk import av latest-version och hämta default-exporten
const latestVersion = (await import('latest-version')).default;
// Läs in package.json för att hämta namn och version på paketet
const pkgPath = path.resolve(__dirname, 'package.json');
const pkgJson = fs.readFileSync(pkgPath, 'utf-8');
const { version: currentVersion, name: packageName } = JSON.parse(pkgJson);
let latest;
try {
// Hämta den senaste versionen från npm-registret via latest-version
latest = await latestVersion(packageName);
} catch (err) {
console.error('❌ Failed to fetch latest version from npm:', err.message);
return;
}
// Bestäm status för den nuvarande versionen jämfört med senaste versionen
const status = determineStatus(currentVersion, latest);
// Terminalfärger för olika status
const colors = {
Latest: '\x1b[32m', // Grön för senaste version
Supported: '\x1b[33m', // Gul för stödjda äldre patchar
Outdated: '\x1b[35m', // Lila för äldre minor versioner
Deprecated: '\x1b[31m',// Röd för deprecated versioner (för gamla minor)
Unknown: '\x1b[0m' // Återställ standardfärg
};
// Återställningssekvens för terminalfärg
const resetColor = '\x1b[0m';
// Skriv ut status med färg i terminalen
console.log(`${colors[status] || resetColor}Version ${currentVersion} is ${status}${resetColor}`);
})();
// Funktion som avgör status mellan nuvarande och senaste versionen
function determineStatus(current, latest) {
// Kontrollera att versionerna är giltiga semver-strängar
if (!semver.valid(current) || !semver.valid(latest)) return 'Unknown';
// Om versionerna är exakt lika är den senaste installerad
if (semver.eq(current, latest)) return 'Latest';
// Parsar major och minor versioner
const cur = semver.parse(current);
const lat = semver.parse(latest);
// Om major och minor är samma men patch är äldre -> Supported
if (cur.major === lat.major && cur.minor === lat.minor && semver.lt(current, latest)) {
return 'Supported';
}
// Om versionen är äldre än senaste minors första patch -> Deprecated
if (semver.lt(current, `${lat.major}.${lat.minor}.0`)) {
return 'Deprecated';
}
// Annars är versionen för gammal men inte riktigt deprecated -> Outdated
return 'Outdated';
}