const { Command } = require('commander');
const {
createLogFile,
saveLogFile,
run,
backupConfig,
resetConfig,
loadConfig,
runTransformerPath,
runTransformerNpm,
} = require('./jlv.js');
/** @module cli */
const program = new Command();
program
.option('-p, --param <type>', 'json-log-viewer parameter')
.option('-f, --files <type>', 'log files to view')
.option('-c, --config <type>', 'path to .json-log-viewer config file')
.option('-r, --reset', 'reset .json-log-viewer in HOME folder')
.option('-t, --transformer <type>', 'load transformer from a npm module')
.option('-tjs, --transformer-js <type>', 'load transformer from a javascript file')
.option('-o, --open', 'open json-log-viewer in a new shell')
.option('-s, --save <type>', 'save merged log file')
.option('-b, --backup <type>', 'backup .json-log-viewer to given path');
program.parse(process.argv);
/**
* Run JLV from CLI
*
* @param {!object} input jlv parameter
* @param {string=} input.param json-log-viewer parameter
* @param {!string} input.files log files to view
* @param {string=} input.config path to .json-log-viewer config file
* @param {boolean=} input.reset reset .json-log-viewer in HOME folder if true
* @param {string=} input.transformer load transformer from a npm module
* @param {string=} input.transformerJs load transformer from a javascript file
* @param {boolean=} input.open open json-log-viewer in a new shell
* @param {string=} input.save save merged log file
* @param {string=} input.backup backup .json-log-viewer to given path
*/
async function cli(input) {
if (input.backup) await backupConfig(input.backup);
if (input.reset) await resetConfig();
if (input.files) {
let filePath = await createLogFile(input.files); // todo save after transforming
if (input.transformer) filePath = await runTransformerNpm(input.transformer, filePath);
if (input.transformerJs) filePath = await runTransformerPath(input.transformerJs, filePath);
if (input.save) await saveLogFile(filePath, input.save);
await loadConfig(input.config);
await run(filePath, input.param, input.open);
} else {
// eslint-disable-next-line no-console
console.log('No files selected');
}
}
cli(program.opts()).then(() => {}).catch((err) => {
// eslint-disable-next-line no-console
console.error(err);
process.exit(1);
});