diff --git a/ldac-check.js b/ldac-check.js index aea79bc..92d4f61 100755 --- a/ldac-check.js +++ b/ldac-check.js @@ -17,20 +17,46 @@ program .version(version) .argument('', 'Path to the RO-Crate metadata file') .option('-e, --errors', 'Output errors only') + .option('-c, --collate', 'Collate errors and warnings') .action(main); program.parse(process.argv); + +function collate(result) { + const collated = {}; + for( const k in result ) { + collated[k] = {}; + result[k].map((o) => { + if( !(o.clause in collated[k]) ) { + collated[k][o.clause] = []; + } + collated[k][o.clause].push(o.entity); + }); + for( const clause in collated[k] ) { + collated[k][clause].sort(); + } + } + return collated; +} + + +function print_results(result) { + console.log(JSON.stringify(result, null, 4)); +} + + function main(cratePath, options) { try { const opt = { alwaysAsArray: true, link: true }; const crate = new ROCrate(JSON.parse(fs.readFileSync(cratePath, 'utf8')), opt); - var result = LdacProfile.validate(crate); - if (options.errors) { - console.log(result.errors); + const result = LdacProfile.validate(crate); + if (options.collate) { + const collated = collate(result); + print_results(options.errors ? collated.errors : collated); } else { - console.log(result); + print_results(options.errors ? result.errors : result) } } catch (error) { if (error.code === 'ENOENT') {