beater-cli
Version:
A command-line interface for beater
63 lines (62 loc) • 2.9 kB
JavaScript
;
var minimist = require('minimist');
var existsSync = require('exists-sync');
var fs = require('fs');
var path = require('path');
var beater_1 = require('./beater');
var options_parser_1 = require('./options-parser');
var process_1 = require('./globals/process');
var listupFiles = function listupFiles(dir, ext) {
return fs.readdirSync(dir).map(function (file) {
return path.join(dir, file);
}).reduce(function (files, file) {
return fs.statSync(file).isDirectory() ? files.concat(listupFiles(file, ext)) : file.endsWith(ext) ? files.concat([file]) : files;
}, []);
};
var help = function help() {
return '\n beater [--dir test directroy default \'test/\'] [--ext test file extension default \'.js\'] [--reporter fooreporter] [--procs max process number default cpu core num] [--require prerequire modules]\n beater --dir test/lib\n beater --dir spec --ext .js\n beater --dir test/lib --ext .test.js\n beater --dir test/lib --ext .test.js --reporter SomeCustomReporter\n beater --dir test/lib --ext .test.js --procs 10\n beater --require foo/bar\n beater --beaterrc example/dir/.beaterrc\n beater test/foo.js test/bar.js test/buz.js\n ';
};
var requireReporter = function requireReporter(reporterName) {
var obj = require(reporterName);
return new (obj && obj.__esModule ? obj['default'] : obj)();
};
var version = function version() {
var packageJson = fs.readFileSync(path.join(__dirname, '/../package.json'), { encoding: 'utf-8' });
var pack = JSON.parse(packageJson);
return pack.version;
};
var run = function run() {
var execArgv = minimist(process_1.process.execArgv);
var argv = minimist(process_1.process.argv.slice(2));
var opts = options_parser_1.optionsParser(argv, execArgv, process_1.process.cwd());
if (opts.help) {
console.log(help());
process_1.process.exit(0);
}
if (opts.version) {
console.log(version());
process_1.process.exit(0);
}
var reporterName = opts.reporter ? opts.reporter : 'beater-cli-reporter';
var reporter = requireReporter(reporterName);
var requires = (typeof opts.require === 'string' ? [opts.require] : Array.isArray(opts.require) ? opts.require : []).map(function (r) {
var isLocalFile = existsSync(r) || existsSync(r + '.js');
return isLocalFile ? path.resolve(r) : r;
});
requires.forEach(function (moduleName) {
return require(moduleName);
});
var dir = opts.dir || 'test/';
var ext = opts.ext || '.js';
var files = (opts.files || []).length > 0 ? opts.files : listupFiles(dir, ext);
var beater = new beater_1.Beater({
files: files,
procs: opts.procs,
reporter: reporter,
requires: requires
});
beater.start().catch(function () {
return process_1.process.exit(1);
});
};
exports.run = run;