kathairo
Version:
A CLI utility for processing USFM.
48 lines (39 loc) • 1.86 kB
JavaScript
#!/usr/bin/env node
import yargs from 'yargs'
import { loadContent, createFile, getVersion } from "./src/fileUtils.js";
import { loadProskomma, getDocuments } from "./src/proskomma.js";
import { getFlatVersesForProskommaOutput, getSerializableVerses } from "./src/dataConversion.js";
import validate from "./src/validator.js";
import { initLogger, log } from "./src/logger.js";
const version = await getVersion();
const options = yargs(process.argv)
.scriptName("kathairo")
.usage("KATHAIRO, Usage: -s <source> -o <output>")
.option("s", { alias: "source", describe: "Source file path", type: "string", demandOption: true })
.option("l", { alias: "lang", describe: "3 character language code", type: "string", demandOption: true })
.option("a", { alias: "abbrev", describe: "Translation abbreviation", type: "string", demandOption: true })
.option("o", { alias: "output", describe: "Output file path", type: "string", demandOption: false })
.option('q', { alias: 'quiet', describe: "Do not print errors", type: "boolean", demandOptions: false, default: false })
.help('h')
.alias('h', 'help')
.version(version)
.alias('v', 'version')
.argv;
initLogger(options.quiet);
try {
const files = await loadContent(options.source, options.quiet);
const validatedFiles = validate(files, options.quiet);
const pk = await loadProskomma(validatedFiles, options.lang, options.abbrev, options.quiet);
const result = await getDocuments(pk);
// log('info', JSON.stringify(result, null, 2));
const verses = getFlatVersesForProskommaOutput(result.data.docSets)
const outputString = getSerializableVerses(verses);
if (options.output) {
await createFile(options.output, outputString)
} else {
process.stdout.write(outputString);
}
} catch (error) {
log('error', "Oops. Something went wrong.");
log('error', error);
}