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.
86 lines (85 loc) • 2.97 kB
JavaScript
import os from "node:os";
import semver from "semver";
import { logger } from "./src/console/logger.js";
import { LogLevel } from "./src/console/logLevel.js";
import MultiBar from "./src/console/multiBar.js";
import IgirException from "./src/exceptions/igirException.js";
import Package from "./src/globals/package.js";
import Igir from "./src/igir.js";
import ArgumentsParser from "./src/modules/argumentsParser.js";
import EndOfLifeChecker from "./src/modules/endOfLifeChecker.js";
import UpdateChecker from "./src/modules/updateChecker.js";
Error.stackTraceLimit = Math.max(Error.stackTraceLimit, 25);
logger.setLogLevel(LogLevel.WARN);
logger.printHeader();
if (!process.versions.bun && process.versions.node && !semver.satisfies(process.versions.node, Package.ENGINES_NODE)) {
logger.error(`${Package.NAME} requires a Node.js version of ${Package.ENGINES_NODE}`);
process.exit(1);
}
function multiBarStopAndNewline() {
const isNewlineNeeded = MultiBar.isActive();
MultiBar.stop();
if (isNewlineNeeded) {
logger.newLine();
}
}
process.once("SIGINT", () => {
multiBarStopAndNewline();
logger.notice(`Exiting ${Package.NAME} early`);
process.exit(0);
});
let options;
try {
const argv = process.argv.slice(2);
options = new ArgumentsParser().parse(argv);
logger.setLogLevel(options.getLogLevel());
const debugLog = options.getDebugLog();
if (debugLog !== void 0) {
logger.notice(`Writing debug log to: ${debugLog}`);
logger.openLogFile(debugLog);
}
const argvString = argv.map((arg) => {
if (!arg.includes(" ")) {
return arg;
}
return `"${arg.replaceAll('"', '\\"')}"`;
}).join(" ");
logger.trace(`Parsing CLI arguments: ${argvString}`);
logger.trace(`Parsed CLI options: ${options.toString()}`);
if (options.getHelp()) {
process.exit(0);
}
} catch (error) {
logger.error(error);
logger.newLine();
process.exit(1);
}
if (options.getDebugLog()) {
logger.trace(`process: ${process.platform} ${process.arch}`);
logger.trace(`process.execPath: ${process.execPath}`);
logger.trace(`process.versions: ${JSON.stringify(process.versions)}`);
logger.trace(`os.version: ${os.version()}`);
logger.trace(`os.freemem / os.totalmem: ${os.freemem()} / ${os.totalmem()}`);
logger.trace(`os.userInfo: ${JSON.stringify(os.userInfo())}`);
logger.trace(`os.cpus: ${JSON.stringify(os.cpus())}`);
logger.trace(`os.availableParallelism: ${os.availableParallelism()}`);
logger.trace(`package.json: ${JSON.stringify(Package.JSON)}`);
}
try {
new EndOfLifeChecker().check(process.version);
void new UpdateChecker().check();
await new Igir(options).main();
MultiBar.stop();
} catch (error) {
multiBarStopAndNewline();
if (error instanceof IgirException) {
logger.error(error);
} else if (error instanceof Error && error.stack) {
logger.error(error.stack);
} else {
logger.error(error);
}
process.exit(1);
}
//# sourceMappingURL=index.js.map