beater-cli
Version:
A command-line interface for beater
57 lines (56 loc) • 2.15 kB
JavaScript
;
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;