UNPKG

beater-cli

Version:

A command-line interface for beater

63 lines (62 loc) 2.9 kB
"use strict"; 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;