UNPKG

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
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); }); } }