electron-info
Version:
Get useful data about Electron releases.
128 lines (126 loc) • 5.53 kB
JavaScript
import { program as commander } from 'commander';
import fs from 'node:fs/promises';
import path from 'node:path';
import { ElectronInfo, SupportedDependencies } from './ElectronInfo.js';
const __dirname = import.meta.dirname;
const packageJsonPath = path.join(__dirname, '../package.json');
const { description, name, version } = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
let matchedCommand = false;
commander
.name(name)
.description(`${description}
Allowed version argument inputs:
- SemVer versions (e.g. "~7")
- npm dist tags (e.g. "5-0-x", only Electron)
- "all"`)
.option('-d, --debug', 'enable debug logging')
.option('-f, --force', 'force downloading the latest release file')
.option('-L, --latest', 'list only the latest release (alias for --limit 1, ignores limit)')
.option('-l, --limit <number>', 'limit output of releases')
.option('-r, --raw', 'output raw JSON')
.option('-s, --source <url>', 'use a custom releases source URL or path')
.option('-t, --timeout <number>', 'use a custom HTTP timeout')
.version(version, '-v, --version')
.option('--no-colors', `don't use colors for displaying`)
.option('--no-prereleases', `don't include Electron prereleases`);
const commanderOptions = commander.opts();
commander
.command('electron')
.alias('e')
.description('show data for Electron releases')
.arguments('[version]')
.action(async (input) => {
matchedCommand = true;
if (!input) {
console.error('No version specified.');
commander.outputHelp();
process.exit();
}
try {
const electronInfo = new ElectronInfo({
...(commanderOptions.debug && { debug: true }),
...(commanderOptions.force && { forceUpdate: true }),
...(commanderOptions.latest && { latest: true }),
...(commanderOptions.limit && { limit: parseInt(commanderOptions.limit, 10) }),
...(typeof commanderOptions.prereleases !== 'undefined' && { electronPrereleases: commanderOptions.prereleases }),
...(commanderOptions.source && { releasesUrl: commanderOptions.source }),
...(commanderOptions.timeout && { timeout: parseInt(commanderOptions.timeout, 10) }),
});
const releases = commanderOptions.raw
? await electronInfo.getElectronReleases(input)
: await electronInfo.getElectronReleases(input, true, commanderOptions.colors);
console.info(releases);
}
catch (error) {
console.error(error);
process.exit(1);
}
});
for (const [dependencyShortName, dependencyFullName] of Object.entries(SupportedDependencies)) {
commander
.command(dependencyShortName)
.alias(dependencyShortName[0])
.description(`show data for ${dependencyFullName} releases`)
.arguments('[version]')
.action(async (version) => {
matchedCommand = true;
if (!version) {
console.error('No version specified.');
commander.outputHelp();
process.exit();
}
try {
const electronInfo = new ElectronInfo({
...(commanderOptions.debug && { debug: true }),
...(commanderOptions.force && { forceUpdate: true }),
...(commanderOptions.latest && { latest: true }),
...(commanderOptions.limit && { limit: parseInt(commanderOptions.limit, 10) }),
...(typeof commanderOptions.prereleases !== 'undefined' && {
electronPrereleases: commanderOptions.prereleases,
}),
...(commanderOptions.source && { releasesUrl: commanderOptions.source }),
...(commanderOptions.timeout && { timeout: commanderOptions.timeout }),
});
const releases = commanderOptions.raw
? await electronInfo.getDependencyReleases(dependencyShortName, version)
: await electronInfo.getDependencyReleases(dependencyShortName, version, true, commanderOptions.colors);
console.info(releases);
}
catch (error) {
console.error(error);
process.exit(1);
}
});
}
commander
.command('all', { isDefault: true })
.alias('a')
.description('show data for all kinds of releases')
.action(async () => {
matchedCommand = true;
try {
const electronInfo = new ElectronInfo({
...(commanderOptions.debug && { debug: true }),
...(commanderOptions.force && { forceUpdate: true }),
...(commanderOptions.latest && { latest: true }),
...(commanderOptions.limit && { limit: parseInt(commanderOptions.limit, 10) }),
...(typeof commanderOptions.prereleases !== 'undefined' && { electronPrereleases: commanderOptions.prereleases }),
...(commanderOptions.source && { releasesUrl: commanderOptions.source }),
...(commanderOptions.timeout && { timeout: commanderOptions.timeout }),
});
const releases = commanderOptions.raw
? await electronInfo.getAllReleases()
: await electronInfo.getAllReleases(true, commanderOptions.colors);
console.info(releases);
}
catch (error) {
console.error(error);
process.exit(1);
}
});
commander.parse(process.argv);
if (!commander.args.length || !matchedCommand) {
console.error('Invalid or no command specified.');
commander.help();
}