151 lines
4.4 KiB
JavaScript
151 lines
4.4 KiB
JavaScript
"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…] <json-path> <dmg-path>
|
||
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
|