junit2json
Version:
Convert JUnit XML format to JSON
38 lines • 1.4 kB
JavaScript
import fs from 'node:fs';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import { parse } from './index.js';
const argv = yargs(hideBin(process.argv))
.usage('Usage: $0 [path]')
.command('$0 <path>', 'Convert JUnit XML format to JSON')
.options({
p: { type: 'boolean', alias: 'pretty', describe: 'Output pretty JSON', default: false },
f: { type: 'string', alias: 'filter-tags', describe: 'Filter XML tag names' },
})
.alias('p', 'pretty')
.alias('f', 'filter-tags')
.coerce('f', (filter) => filter?.split(','))
.positional('path', {
describe: 'JUnit XML path',
type: 'string',
demandOption: true,
})
.example('$0 -p -f system-out,system-err junit.xml', 'Output pretty JSON with filter <system-out> and <system-err> tags.')
.strict()
.parseSync();
const main = async () => {
const xmlString = fs.readFileSync(argv.path, 'utf8').toString();
const filterSet = new Set(argv.filterTags);
const _replacer = (key, value) => {
if (filterSet.has(key))
return undefined;
return value;
};
const indent = (argv.pretty) ? 2 : 0;
const replacer = (argv.filterTags && argv.filterTags.length > 0) ? _replacer : undefined;
const output = await parse(xmlString);
console.log(JSON.stringify(output, replacer, indent));
};
main();
//# sourceMappingURL=cli.js.map