UNPKG

beater-cli

Version:

A command-line interface for beater

57 lines (56 loc) 2.15 kB
"use strict"; var existsSync = require('exists-sync'); var path = require('path'); var fs = require('fs'); var loadRcOptions = function loadRcOptions(configFile) { if (!existsSync(configFile)) return {}; var config = fs.readFileSync(configFile, { encoding: 'utf-8' }); return JSON.parse(config) || {}; }; var loadPackageOptions = function loadPackageOptions(cwd) { var file = cwd + '/package.json'; if (!existsSync(file)) return {}; var packageJson = fs.readFileSync(file, { encoding: 'utf-8' }); return JSON.parse(packageJson)['beater'] || {}; }; var loadCommandLineOptions = function loadCommandLineOptions(argv, execArgv) { var require = typeof argv['require'] === 'undefined' ? [] : [argv['require']]; var execRequire = typeof argv['require'] === 'undefined' ? [] : [execArgv['require']]; Array.prototype.push.apply(require, execRequire); return { reporter: argv['reporter'], dir: argv['dir'], ext: argv['ext'], procs: Number(argv['procs']), require: require.length === 0 ? undefined : require, help: argv['help'] || argv['h'], version: argv['version'] || argv['v'], files: argv._ }; }; var removeUndefinedKeys = function removeUndefinedKeys(obj) { Object.keys(obj).forEach(function (key) { if (typeof obj[key] === 'undefined') { delete obj[key]; } }); }; var optionsParser = function optionsParser(argv, execArgv, cwd) { var configFile = argv['beaterrc'] || path.join(cwd, '.beaterrc'); var defaultOptions = { dir: 'test/', ext: '.js', files: undefined, procs: undefined, reporter: undefined, require: undefined }; var rcOptions = loadRcOptions(configFile); removeUndefinedKeys(rcOptions); var packageOptions = loadPackageOptions(cwd); removeUndefinedKeys(packageOptions); var commandLineOptions = loadCommandLineOptions(argv, execArgv); removeUndefinedKeys(commandLineOptions); return Object.assign(defaultOptions, rcOptions, packageOptions, commandLineOptions); }; exports.optionsParser = optionsParser;