diff options
Diffstat (limited to 'node_modules/nyc/lib/config-util.js')
-rw-r--r-- | node_modules/nyc/lib/config-util.js | 126 |
1 files changed, 46 insertions, 80 deletions
diff --git a/node_modules/nyc/lib/config-util.js b/node_modules/nyc/lib/config-util.js index 3c733e083..2c55a3a11 100644 --- a/node_modules/nyc/lib/config-util.js +++ b/node_modules/nyc/lib/config-util.js @@ -1,3 +1,5 @@ +'use strict' + const arrify = require('arrify') const fs = require('fs') const path = require('path') @@ -7,37 +9,29 @@ const Yargs = require('yargs/yargs') var Config = {} -// load config from a cascade of sources: -// * command line arguments -// * package.json -// * .nycrc -Config.loadConfig = function (argv, cwd) { +function guessCWD (cwd) { cwd = cwd || process.env.NYC_CWD || process.cwd() - var pkgPath = findUp.sync('package.json', {cwd: cwd}) - var rcPath = findUp.sync(['.nycrc', '.nycrc.json'], {cwd: cwd}) - var rcConfig = null + const pkgPath = findUp.sync('package.json', {cwd: cwd}) + if (pkgPath) { + cwd = path.dirname(pkgPath) + } + return cwd +} + +function loadConfig (argv, cwd) { + const rcPath = findUp.sync(['.nycrc', '.nycrc.json'], {cwd: cwd}) + let config = {} if (rcPath) { - rcConfig = JSON.parse( + config = JSON.parse( fs.readFileSync(rcPath, 'utf-8') ) } - if (pkgPath) { - cwd = path.dirname(pkgPath) - } - - var config = Config.buildYargs(cwd) - if (rcConfig) config.config(rcConfig) - config = config.parse(argv || []) - - // post-hoc, we convert several of the - // configuration settings to arrays, providing - // a consistent contract to index.js. - config.require = arrify(config.require) - config.extension = arrify(config.extension) - config.exclude = arrify(config.exclude) - config.include = arrify(config.include) + if (config.require) config.require = arrify(config.require) + if (config.extension) config.extension = arrify(config.extension) + if (config.exclude) config.exclude = arrify(config.exclude) + if (config.include) config.include = arrify(config.include) return config } @@ -45,56 +39,11 @@ Config.loadConfig = function (argv, cwd) { // build a yargs object, omitting any settings // that would cause the application to exit early. Config.buildYargs = function (cwd) { + cwd = guessCWD(cwd) + const config = loadConfig() return Yargs([]) - .usage('$0 [command] [options]\n\nrun your tests with the nyc bin to instrument them with coverage') - .command('report', 'run coverage report for .nyc_output', function (yargs) { - return yargs - .usage('$0 report [options]') - .option('reporter', { - alias: 'r', - describe: 'coverage reporter(s) to use', - default: 'text' - }) - .option('report-dir', { - describe: 'directory to output coverage reports in', - default: 'coverage' - }) - .option('temp-directory', { - describe: 'directory to read raw coverage information from', - default: './.nyc_output' - }) - .option('show-process-tree', { - describe: 'display the tree of spawned processes', - default: false, - type: 'boolean' - }) - .example('$0 report --reporter=lcov', 'output an HTML lcov report to ./coverage') - }) - .command('check-coverage', 'check whether coverage is within thresholds provided', function (yargs) { - return yargs - .usage('$0 check-coverage [options]') - .option('branches', { - default: 0, - description: 'what % of branches must be covered?' - }) - .option('functions', { - default: 0, - description: 'what % of functions must be covered?' - }) - .option('lines', { - default: 90, - description: 'what % of lines must be covered?' - }) - .option('statements', { - default: 0, - description: 'what % of statements must be covered?' - }) - .option('per-file', { - default: false, - description: 'check thresholds per file' - }) - .example('$0 check-coverage --lines 95', "check whether the JSON in nyc's output folder meets the thresholds provided") - }) + .usage('$0 [command] [options]') + .usage('$0 [options] [bin-to-instrument]') .option('reporter', { alias: 'r', describe: 'coverage reporter(s) to use', @@ -126,6 +75,12 @@ Config.buildYargs = function (cwd) { describe: 'a list of specific files and directories that should be excluded from coverage, glob patterns are supported, node_modules is always excluded', global: false }) + .option('exclude-after-remap', { + default: true, + type: 'boolean', + description: 'should exclude logic be performed after the source-map remaps filenames?', + global: false + }) .option('include', { alias: 'n', default: [], @@ -139,7 +94,7 @@ Config.buildYargs = function (cwd) { .option('require', { alias: 'i', default: [], - describe: 'a list of additional modules that nyc should attempt to require in its subprocess, e.g., babel-register, babel-polyfill.', + describe: 'a list of additional modules that nyc should attempt to require in its subprocess, e.g., babel-register, babel-polyfill', global: false }) .option('eager', { @@ -220,6 +175,12 @@ Config.buildYargs = function (cwd) { .option('hook-run-in-context', { default: true, type: 'boolean', + description: 'should nyc wrap vm.runInContext?', + global: false + }) + .option('hook-run-in-this-context', { + default: true, + type: 'boolean', description: 'should nyc wrap vm.runInThisContext?', global: false }) @@ -240,24 +201,29 @@ Config.buildYargs = function (cwd) { default: './.nyc_output', global: false }) - .pkgConf('nyc', cwd || process.cwd()) + .pkgConf('nyc', cwd) .example('$0 npm test', 'instrument your tests with coverage') - .example('$0 --require babel-core/register npm test', 'instrument your tests with coverage and babel') + .example('$0 --require babel-core/register npm test', 'instrument your tests with coverage and transpile with Babel') .example('$0 report --reporter=text-lcov', 'output lcov report after running your tests') .epilog('visit https://git.io/vHysA for list of available reporters') - .boolean('help') .boolean('h') .boolean('version') + .config(config) + .help(false) + .version(false) } -// decorate yargs with all the actions -// that would make it exit: help, version, command. -Config.decorateYargs = function (yargs) { +// we add operations that would make yargs +// exit post-hoc, allowing for a multi-pass +// parsing step. +Config.addCommandsAndHelp = function (yargs) { return yargs .help('h') .alias('h', 'help') .version() + .command(require('../lib/commands/check-coverage')) .command(require('../lib/commands/instrument')) + .command(require('../lib/commands/report')) } module.exports = Config |