|
"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() { |
|
|
|
} |
|
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; |
|
|