igir
Version:
🕹 A zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.
60 lines (59 loc) • 1.95 kB
JavaScript
import https from 'node:https';
import semver from 'semver';
import { LogLevel } from '../console/logLevel.js';
import MultiBar from '../console/multiBar.js';
import Package from '../globals/package.js';
import BufferPoly from '../polyfill/bufferPoly.js';
/**
* Check for a newer version and log if one is found.
*/
export default class UpdateChecker {
logger;
constructor(logger) {
this.logger = logger;
}
/**
* Check for a newer version and log if one is found.
*/
async check() {
let npmVersion;
try {
npmVersion = await UpdateChecker.getVersion(Package.NAME);
}
catch {
return;
}
if (npmVersion && semver.lt(Package.VERSION, npmVersion)) {
MultiBar.log(this.logger.formatMessage(LogLevel.NOTICE, `An update is available for ${Package.NAME}: v${npmVersion}`));
}
}
static async getVersion(packageName) {
return new Promise((resolve, reject) => {
https
.get(`https://registry.npmjs.org/${packageName}/latest`, {
timeout: 5000,
}, async (res) => {
const data = await BufferPoly.fromReadable(res);
let json;
try {
json = JSON.parse(data.toString());
}
catch (error) {
if (error instanceof Error) {
reject(error);
}
else if (typeof error === 'string') {
reject(new Error(error));
}
else {
reject(new Error('failed to get latest version from npmjs.org'));
}
return;
}
resolve(json.version);
})
.on('error', reject)
.on('timeout', reject);
});
}
}