mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-02 18:11:04 +08:00
100 lines
2.8 KiB
JavaScript
100 lines
2.8 KiB
JavaScript
/*
|
|
Copyright 2012-2015, Yahoo Inc.
|
|
Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
|
|
*/
|
|
const path = require('path');
|
|
const libReport = require('istanbul-lib-report');
|
|
const libReports = require('istanbul-reports');
|
|
const minimatch = require('minimatch');
|
|
const inputError = require('./input-error');
|
|
const configuration = require('./config');
|
|
|
|
function Reporter(cfg, opts) {
|
|
opts = opts || {};
|
|
this.config = cfg || configuration.loadFile();
|
|
this.dir = path.resolve(this.config.reporting.dir());
|
|
this.reports = {};
|
|
|
|
let summarizer = opts.summarizer;
|
|
const 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(fmt) {
|
|
if (this.reports[fmt]) {
|
|
// already added
|
|
return;
|
|
}
|
|
const config = this.config;
|
|
const 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(fmts) {
|
|
fmts.forEach(f => {
|
|
this.add(f);
|
|
});
|
|
},
|
|
/**
|
|
* writes all reports added
|
|
* @method write
|
|
*/
|
|
write(coverageMap, opts) {
|
|
opts = opts || {};
|
|
const sourceFinder = opts.sourceFinder || null;
|
|
|
|
const context = libReport.createContext({
|
|
dir: this.dir,
|
|
watermarks: this.config.reporting.watermarks(),
|
|
sourceFinder
|
|
});
|
|
|
|
const excludes = this.config.instrumentation.excludes() || [];
|
|
|
|
coverageMap.filter(
|
|
file =>
|
|
!excludes.some(exclude =>
|
|
minimatch(file, exclude, { dot: true })
|
|
)
|
|
);
|
|
|
|
const tree = this.summarizer(coverageMap);
|
|
Object.keys(this.reports).forEach(name => {
|
|
const report = this.reports[name];
|
|
tree.visit(report, context);
|
|
});
|
|
}
|
|
};
|
|
|
|
module.exports = Reporter;
|