blob: d28d6e510d51fa205854475d7277c174748ce328 [file] [log] [blame]
#!/usr/bin/env node
const configUtil = require('../lib/config-util')
const foreground = require('foreground-child')
var NYC
try {
NYC = require('../index.covered.js')
} catch (e) {
NYC = require('../index.js')
}
const processArgs = require('../lib/process-args')
const sw = require('spawn-wrap')
const wrapper = require.resolve('./wrap.js')
// parse configuration and command-line arguments;
// we keep these values in a few different forms,
// used in the various execution contexts of nyc:
// reporting, instrumenting subprocesses, etc.
const yargs = configUtil.buildYargs()
const instrumenterArgs = processArgs.hideInstrumenteeArgs()
const config = configUtil.loadConfig(yargs.parse(instrumenterArgs))
configUtil.addCommandsAndHelp(yargs)
const argv = yargs.config(config).parse(instrumenterArgs)
if (argv._[0] === 'report') {
// look in lib/commands/report.js for logic.
} else if (argv._[0] === 'check-coverage') {
// look in lib/commands/check-coverage.js for logic.
} else if (argv._[0] === 'instrument') {
// look in lib/commands/instrument.js for logic.
} else if (argv._.length) {
// if instrument is set to false,
// enable a noop instrumenter.
if (!argv.instrument) argv.instrumenter = './lib/instrumenters/noop'
else argv.instrumenter = './lib/instrumenters/istanbul'
var nyc = (new NYC(argv))
if (argv.clean) {
nyc.reset()
} else {
nyc.createTempDirectory()
}
if (argv.all) nyc.addAllFiles()
var env = {
NYC_CONFIG: JSON.stringify(argv),
NYC_CWD: process.cwd(),
NYC_ROOT_ID: nyc.rootId,
NYC_INSTRUMENTER: argv.instrumenter
}
if (argv['babel-cache'] === false) {
// babel's cache interferes with some configurations, so is
// disabled by default. opt in by setting babel-cache=true.
env.BABEL_DISABLE_CACHE = process.env.BABEL_DISABLE_CACHE = '1'
}
sw([wrapper], env)
// Both running the test script invocation and the check-coverage run may
// set process.exitCode. Keep track so that both children are run, but
// a non-zero exit codes in either one leads to an overall non-zero exit code.
process.exitCode = 0
foreground(processArgs.hideInstrumenterArgs(
// use the same argv descrption, but don't exit
// for flags like --help.
configUtil.buildYargs().parse(process.argv.slice(2))
), function (done) {
var mainChildExitCode = process.exitCode
if (argv.checkCoverage) {
checkCoverage(argv)
process.exitCode = process.exitCode || mainChildExitCode
if (!argv.silent) report(argv)
return done()
} else {
if (!argv.silent) report(argv)
return done()
}
})
} else {
// I don't have a clue what you're doing.
yargs.showHelp()
}
function report (argv) {
process.env.NYC_CWD = process.cwd()
var nyc = new NYC(argv)
nyc.report()
}
function checkCoverage (argv, cb) {
process.env.NYC_CWD = process.cwd()
;(new NYC(argv)).checkCoverage({
lines: argv.lines,
functions: argv.functions,
branches: argv.branches,
statements: argv.statements
}, argv['per-file'])
}