"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = require("fs"); const minimist = require("minimist"); const Path = require("path"); const util_1 = require("util"); const _1 = require("."); const specFromJSON_1 = require("./specFromJSON"); const { stderr, stdout } = process; const pkg = require("../package.json"); let showedHelp = false; function nop() { // Does nothing whatsoever. } function showNormalWarning(e) { stderr.write(`${e}\n`); } function showVerboseWarning(e) { stderr.write(`${util_1.inspect(e, undefined, undefined, true)}\n`); } function showHelp(onStderr = true) { showedHelp = true; (onStderr ? stderr : stdout).write(`Add a license agreement to a Mac disk image. Usage: dmg-license [options…] dmg-license --show-languages [--no-header-row] json-path: Path to a JSON license specification file. dmg-path: Path to a disk image (.dmg) file. Options: -v, --verbose Show stack traces for warnings and errors. -q, --quiet Don't show warnings at all. -h, -?, --help Show this help, without doing anything else. -V, --version Show version. --show-languages Output a tab-separated table of all recognized languages. `); } function showVersion(onStderr = true) { (onStderr ? stderr : stdout).write(`${pkg.name} ${pkg.version}\n`); } function wrongUsage() { if (!showedHelp) showHelp(); return 64; } async function main() { let showError = showVerboseWarning; let showWarning = showNormalWarning; try { const args = minimist(process.argv.slice(2), { alias: { ["?"]: "help", V: "version", h: "help", q: "quiet", v: "verbose" }, boolean: ["verbose", "quiet", "help", "version", "show-languages"], unknown(arg) { if (arg.startsWith("-")) { stderr.write(`Invalid option ‘${arg}’.\n`); throw wrongUsage(); } else return true; } }); if (args.quiet) { showWarning = nop; showError = showNormalWarning; } else if (args.verbose) { showWarning = showVerboseWarning; showError = showVerboseWarning; } if (args.help) { showHelp(false); if (args.version) showVersion(false); return; } if (args.version) { if (args._.length) showVersion(); else { showVersion(false); return; } } if (args["show-languages"]) { stdout.write("Language ID\tLanguage tag\tNative charset\tName\n"); for (const language of _1.Language.byID) if (language) { if (language.langTags.length) { for (const languageTag of language.langTags) stdout.write(`${language.languageID}\t${languageTag}\t${language.charset}\t${language.englishName}\n`); } else stdout.write(`${language.languageID}\t\t${language.charset}\t${language.englishName}\n`); } return; } if (args._.length !== 2) { stderr.write("Wrong number of parameters.\n"); throw wrongUsage(); } const jsonText = await fs_1.promises.readFile(args._[0], { encoding: "utf8" }).catch(e => { stderr.write("Couldn't read JSON specification file: "); showError(e); throw 66; }); const jsonDirName = Path.dirname(args._[0]); try { await _1.dmgLicenseFromJSON(args._[1], jsonText, { resolvePath(path) { return Path.resolve(jsonDirName, path); }, onNonFatalError: showWarning }); } catch (e) { if (e instanceof specFromJSON_1.BadJSONLicenseSpecError) { showError(e); throw 65; } else throw e; } } catch (e) { if (typeof e === "number") process.exit(e); else { showError(e); process.exit(70); } } } exports.main = main; //# sourceMappingURL=cli.js.map