UNPKG

orionsoft-react-scripts

Version:

Orionsoft Configuration and scripts for Create React App.

124 lines (108 loc) 4.69 kB
/* Copyright (c) 2012, Yahoo! Inc. All rights reserved. Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ var nopt = require('nopt'), Report = require('../report'), Reporter = require('../reporter'), path = require('path'), fs = require('fs'), Collector = require('../collector'), helpFormatter = require('../util/help-formatter'), formatOption = helpFormatter.formatOption, formatPara = helpFormatter.formatPara, filesFor = require('../util/file-matcher').filesFor, util = require('util'), Command = require('./index'), configuration = require('../config'); function ReportCommand() { Command.call(this); } ReportCommand.TYPE = 'report'; util.inherits(ReportCommand, Command); function printDeprecationMessage(pat, fmt) { console.error('**********************************************************************'); console.error('DEPRECATION WARNING! You are probably using the old format of the report command'); console.error('This will stop working soon, see `istanbul help report` for the new command format'); console.error('Assuming you meant: istanbul report --include=' + pat + ' ' + fmt); console.error('**********************************************************************'); } Command.mix(ReportCommand, { synopsis: function () { return "writes reports for coverage JSON objects produced in a previous run"; }, usage: function () { console.error('\nUsage: ' + this.toolName() + ' ' + this.type() + ' <options> [ <format> ... ]\n\nOptions are:\n\n' + [ formatOption('--config <path-to-config>', 'the configuration file to use, defaults to .istanbul.yml'), formatOption('--root <input-directory>', 'The input root directory for finding coverage files'), formatOption('--dir <report-directory>', 'The output directory where files will be written. This defaults to ./coverage/'), formatOption('--include <glob>', 'The glob pattern to select one or more coverage files, defaults to **/coverage*.json'), formatOption('--verbose, -v', 'verbose mode') ].join('\n\n')); console.error('\n'); console.error('<format> is one of '); Report.getReportList().forEach(function (name) { console.error(formatOption(name, Report.create(name).synopsis())); }); console.error(""); console.error(formatPara([ 'Default format is lcov unless otherwise specified in the config file.', 'In addition you can tweak the file names for various reports using the config file.', 'Type `istanbul help config` to see what can be tweaked.' ].join(' '))); console.error('\n'); }, run: function (args, callback) { var template = { config: path, root: path, dir: path, include: String, verbose: Boolean }, opts = nopt(template, { v : '--verbose' }, args, 0), includePattern = opts.include || '**/coverage*.json', root, collector = new Collector(), config = configuration.loadFile(opts.config, { verbose: opts.verbose, reporting: { dir: opts.dir } }), formats = opts.argv.remain, reporter = new Reporter(config); // Start: backward compatible processing if (formats.length === 2 && Report.getReportList().indexOf(formats[1]) < 0) { includePattern = formats[1]; formats = [ formats[0] ]; printDeprecationMessage(includePattern, formats[0]); } // End: backward compatible processing if (formats.length === 0) { formats = config.reporting.reports(); } if (formats.length === 0) { formats = [ 'lcov' ]; } reporter.addAll(formats); root = opts.root || process.cwd(); filesFor({ root: root, includes: [ includePattern ] }, function (err, files) { if (err) { throw err; } files.forEach(function (file) { var coverageObject = JSON.parse(fs.readFileSync(file, 'utf8')); collector.add(coverageObject); }); reporter.write(collector, false, function (err) { console.log('Done'); return callback(err); }); }); } }); module.exports = ReportCommand;