90 lines
2.6 KiB
JavaScript
90 lines
2.6 KiB
JavaScript
/*
|
|
Copyright 2012-2015, Yahoo Inc.
|
|
Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
|
|
*/
|
|
var path = require('path'),
|
|
configuration = require('./config'),
|
|
inputError = require('./input-error'),
|
|
libReport = require('istanbul-lib-report'),
|
|
libReports = require('istanbul-reports');
|
|
|
|
function Reporter(cfg, opts) {
|
|
opts = opts || {};
|
|
this.config = cfg || configuration.loadFile();
|
|
this.dir = path.resolve(this.config.reporting.dir());
|
|
this.reports = {};
|
|
|
|
var summarizer = opts.summarizer,
|
|
s = this.config.reporting.summarizer();
|
|
|
|
if (summarizer && typeof summarizer === 'function') {
|
|
this.summarizer = summarizer;
|
|
} else {
|
|
summarizer = libReport.summarizers[s];
|
|
if (!summarizer) {
|
|
throw inputError.create('Invalid summarizer in report config: ' + s);
|
|
}
|
|
this.summarizer = summarizer;
|
|
}
|
|
}
|
|
|
|
Reporter.prototype = {
|
|
/**
|
|
* adds a report to be generated. Must be one of the entries returned
|
|
* by `Report.getReportList()`
|
|
* @method add
|
|
* @param {String} fmt the format of the report to generate
|
|
*/
|
|
add: function (fmt) {
|
|
if (this.reports[fmt]) { // already added
|
|
return;
|
|
}
|
|
var config = this.config,
|
|
rptConfig = config.reporting.reportConfig()[fmt] || {};
|
|
rptConfig.verbose = config.verbose;
|
|
try {
|
|
if (this.config.verbose) {
|
|
console.error('Create report', fmt,' with', rptConfig);
|
|
}
|
|
this.reports[fmt] = libReports.create(fmt, rptConfig);
|
|
} catch (ex) {
|
|
throw inputError.create('Invalid report format [' + fmt + ']');
|
|
}
|
|
},
|
|
/**
|
|
* adds an array of report formats to be generated
|
|
* @method addAll
|
|
* @param {Array} fmts an array of report formats
|
|
*/
|
|
addAll: function (fmts) {
|
|
var that = this;
|
|
fmts.forEach(function (f) {
|
|
that.add(f);
|
|
});
|
|
},
|
|
/**
|
|
* writes all reports added
|
|
* @method write
|
|
*/
|
|
write: function (coverageMap, opts) {
|
|
opts = opts || {};
|
|
var that = this,
|
|
sourceFinder = opts.sourceFinder || null,
|
|
context,
|
|
tree;
|
|
|
|
context = libReport.createContext({
|
|
dir: this.dir,
|
|
watermarks: this.config.reporting.watermarks(),
|
|
sourceFinder: sourceFinder
|
|
});
|
|
tree = this.summarizer(coverageMap);
|
|
Object.keys(this.reports).forEach(function (name) {
|
|
var report = that.reports[name];
|
|
tree.visit(report, context);
|
|
});
|
|
}
|
|
};
|
|
|
|
module.exports = Reporter;
|