/* Copyright 2012-2015, Yahoo Inc. Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ const fs = require('fs'); const libCoverage = require('istanbul-lib-coverage'); const Reporter = require('./reporter'); const filesFor = require('./file-matcher').filesFor; function run(formats, config, opts, callback) { if (!callback && typeof opts === 'function') { callback = opts; opts = {}; } opts = opts || {}; const coverageMap = libCoverage.createCoverageMap(); const includePattern = opts.include || '**/coverage*.raw.json'; const reporter = new Reporter(config); if (!formats || formats.length === 0) { formats = config.reporting.reports(); } try { reporter.addAll(formats); } catch (ex) { ex.inputError = true; return callback(ex); } const root = opts.root || process.cwd(); filesFor( { root, includes: [includePattern] }, (err, files) => { /* istanbul ignore if */ if (err) { return callback(err); } files.forEach(file => { const coverageObject = JSON.parse( fs.readFileSync(file, 'utf8') ); coverageMap.merge(coverageObject); }); reporter.write(coverageMap, {}); return callback(); } ); } module.exports = { run };