leetcode-cli
Version:
A cli tool to enjoy leetcode!
80 lines (63 loc) • 1.78 kB
JavaScript
var _ = require('underscore');
var chalk = require('./chalk');
var config = require('./config');
var core = require('./core');
var h = require('./helper');
var icon = require('./icon');
var log = require('./log');
var Plugin = require('./plugin');
// We are expecting a tier configuration like:
// global config < local config < cli params
// Color is a tricky one so we manually handle it here.
function initColor() {
chalk.enabled = config.color.enable && chalk.enabled;
chalk.init();
chalk.setTheme(config.color.theme);
}
function initIcon() {
icon.init();
icon.setTheme(config.icon.theme);
}
function initLogLevel() {
log.init();
var level = 'INFO';
if (process.argv.indexOf('-v') >= 0) level = 'DEBUG';
if (process.argv.indexOf('-vv') >= 0) level = 'TRACE';
// print HTTP details in TRACE
if (level === 'TRACE') {
var request = require('request');
request.debug = true;
console.error = _.wrap(console.error, function(func) {
var args = _.toArray(arguments);
args.shift();
// FIXME: hack HTTP request log, hope no one else use it...
if (args.length > 0 && args[0].indexOf('REQUEST ') === 0) {
args = args.map(function(arg) {
return h.printSafeHTTP(arg);
});
log.trace.apply(log, args);
} else {
log.info.apply(log, args);
}
});
}
log.setLevel(level);
}
var cli = {};
cli.run = function() {
config.init();
initColor();
initIcon();
initLogLevel();
Plugin.init(core);
process.stdout.on('error', function(e) {
if (e.code === 'EPIPE') process.exit();
});
var yargs = require('yargs');
yargs.commandDir('commands')
.completion()
.help()
.wrap(Math.min(yargs.terminalWidth(), 120))
.argv;
};
module.exports = cli;