1
0
mirror of https://github.com/JuanCanham/HackMyResume.git synced 2024-11-23 00:40:10 +00:00
HackMyResume/dist/cli/out.js

158 lines
5.9 KiB
JavaScript
Raw Permalink Normal View History

2016-01-26 16:43:49 +00:00
2016-01-25 15:34:57 +00:00
/**
Output routines for HackMyResume.
@license MIT. See LICENSE.md for details.
2016-01-26 16:43:49 +00:00
@module cli/out
*/
2016-01-25 15:34:57 +00:00
(function() {
2016-01-26 16:43:49 +00:00
var Class, EXTEND, FS, HANDLEBARS, HME, LO, M2C, OutputHandler, PATH, YAML, _, chalk, dbgStyle, pad, printf;
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
chalk = require('chalk');
2016-01-25 15:34:57 +00:00
HME = require('../core/event-codes');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
_ = require('underscore');
2016-01-25 15:34:57 +00:00
Class = require('../utils/class.js');
2016-01-25 15:34:57 +00:00
M2C = require('../utils/md2chalk.js');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
PATH = require('path');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
LO = require('lodash');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
FS = require('fs');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
EXTEND = require('extend');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
HANDLEBARS = require('handlebars');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
YAML = require('yamljs');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
printf = require('printf');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
pad = require('string-padding');
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
dbgStyle = 'cyan';
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
/** A stateful output module. All HMR console output handled here. */
2016-01-25 15:34:57 +00:00
2016-01-26 16:43:49 +00:00
OutputHandler = module.exports = Class.extend({
init: function(opts) {
this.opts = EXTEND(true, this.opts || {}, opts);
2016-01-27 10:29:26 +00:00
this.msgs = YAML.load(PATH.join(__dirname, 'msg.yml')).events;
2016-01-26 16:43:49 +00:00
},
log: function(msg) {
var finished;
msg = msg || '';
printf = require('printf');
finished = printf.apply(printf, arguments);
return this.opts.silent || console.log(finished);
},
"do": function(evt) {
2016-01-26 19:43:48 +00:00
var L, WRAP, info, msg, numFormats, output, rawTpl, sty, style, suffix, template, that, themeName, tot;
2016-01-26 16:43:49 +00:00
that = this;
L = function() {
return that.log.apply(that, arguments);
};
switch (evt.sub) {
2016-01-25 15:34:57 +00:00
case HME.begin:
2016-01-26 16:43:49 +00:00
return this.opts.debug && L(M2C(this.msgs.begin.msg, dbgStyle), evt.cmd.toUpperCase());
2016-01-25 15:34:57 +00:00
case HME.beforeCreate:
2016-01-26 16:43:49 +00:00
L(M2C(this.msgs.beforeCreate.msg, 'green'), evt.fmt, evt.file);
2016-01-25 15:34:57 +00:00
break;
case HME.beforeTheme:
2016-01-26 16:43:49 +00:00
return this.opts.debug && L(M2C(this.msgs.beforeTheme.msg, dbgStyle), evt.theme.toUpperCase());
2016-01-25 15:34:57 +00:00
case HME.afterParse:
2016-01-26 16:43:49 +00:00
return L(M2C(this.msgs.afterRead.msg, 'gray', 'white.dim'), evt.fmt.toUpperCase(), evt.file);
2016-01-25 15:34:57 +00:00
case HME.beforeMerge:
2016-01-26 16:43:49 +00:00
msg = '';
evt.f.reverse().forEach(function(a, idx) {
return msg += printf((idx === 0 ? this.msgs.beforeMerge.msg[0] : this.msgs.beforeMerge.msg[1]), a.file);
2016-01-25 15:34:57 +00:00
}, this);
2016-01-26 19:43:48 +00:00
return L(M2C(msg, (evt.mixed ? 'yellow' : 'gray'), 'white.dim'));
2016-01-25 15:34:57 +00:00
case HME.applyTheme:
this.theme = evt.theme;
2016-01-26 16:43:49 +00:00
numFormats = Object.keys(evt.theme.formats).length;
2016-01-26 19:43:48 +00:00
return L(M2C(this.msgs.applyTheme.msg, evt.status === 'error' ? 'red' : 'gray', evt.status === 'error' ? 'bold' : 'white.dim'), evt.theme.name.toUpperCase(), numFormats, numFormats === 1 ? '' : 's');
2016-01-25 15:34:57 +00:00
case HME.end:
2016-01-26 16:43:49 +00:00
if (evt.cmd === 'build') {
themeName = this.theme.name.toUpperCase();
if (this.opts.tips && (this.theme.message || this.theme.render)) {
WRAP = require('word-wrap');
if (this.theme.message) {
L(M2C(this.msgs.afterBuild.msg[0], 'cyan'), themeName);
return L(M2C(this.theme.message, 'white'));
} else if (this.theme.render) {
L(M2C(this.msgs.afterBuild.msg[0], 'cyan'), themeName);
return L(M2C(this.msgs.afterBuild.msg[1], 'white'));
2016-01-25 15:34:57 +00:00
}
}
}
break;
case HME.afterGenerate:
2016-01-26 16:43:49 +00:00
suffix = '';
if (evt.fmt === 'pdf') {
if (this.opts.pdf) {
if (this.opts.pdf !== 'none') {
suffix = printf(M2C(this.msgs.afterGenerate.msg[0], evt.error ? 'red' : 'green'), this.opts.pdf);
} else {
L(M2C(this.msgs.afterGenerate.msg[1], 'gray'), evt.fmt.toUpperCase(), evt.file);
2016-01-25 15:34:57 +00:00
return;
}
}
}
2016-01-26 16:43:49 +00:00
return L(M2C(this.msgs.afterGenerate.msg[2] + suffix, evt.error ? 'red' : 'green'), pad(evt.fmt.toUpperCase(), 4, null, pad.RIGHT), PATH.relative(process.cwd(), evt.file));
2016-01-25 15:34:57 +00:00
case HME.beforeAnalyze:
2016-01-26 16:43:49 +00:00
return L(M2C(this.msgs.beforeAnalyze.msg, 'green'), evt.fmt, evt.file);
2016-01-25 15:34:57 +00:00
case HME.afterAnalyze:
2016-01-26 16:43:49 +00:00
info = evt.info;
rawTpl = FS.readFileSync(PATH.join(__dirname, 'analyze.hbs'), 'utf8');
HANDLEBARS.registerHelper(require('../helpers/console-helpers'));
2016-01-26 16:43:49 +00:00
template = HANDLEBARS.compile(rawTpl, {
strict: false,
assumeObjects: false
});
tot = 0;
info.keywords.forEach(function(g) {
return tot += g.count;
});
2016-01-25 15:34:57 +00:00
info.keywords.totalKeywords = tot;
2016-01-26 16:43:49 +00:00
output = template(info);
return this.log(chalk.cyan(output));
2016-01-25 15:34:57 +00:00
case HME.beforeConvert:
2016-01-26 16:43:49 +00:00
return L(M2C(this.msgs.beforeConvert.msg, 'green'), evt.srcFile, evt.srcFmt, evt.dstFile, evt.dstFmt);
2016-01-25 15:34:57 +00:00
case HME.afterInlineConvert:
2016-01-26 16:43:49 +00:00
return L(M2C(this.msgs.afterInlineConvert.msg, 'gray', 'white.dim'), evt.file, evt.fmt);
2016-01-25 15:34:57 +00:00
case HME.afterValidate:
2016-01-26 19:43:48 +00:00
style = evt.isValid ? 'green' : 'yellow';
2016-01-26 16:43:49 +00:00
L(M2C(this.msgs.afterValidate.msg[0], 'white') + chalk[style].bold(evt.isValid ? this.msgs.afterValidate.msg[1] : this.msgs.afterValidate.msg[2]), evt.file, evt.fmt);
if (evt.errors) {
return _.each(evt.errors, function(err, idx) {
return L(chalk.yellow.bold('--> ') + chalk.yellow(err.field.replace('data.', 'resume.').toUpperCase() + ' ' + err.message));
2016-01-25 15:34:57 +00:00
}, this);
}
break;
case HME.afterPeek:
2016-01-26 16:43:49 +00:00
sty = evt.error ? 'red' : (evt.target !== void 0 ? 'green' : 'yellow');
if (evt.requested) {
2016-01-25 15:34:57 +00:00
L(M2C(this.msgs.beforePeek.msg[0], sty), evt.requested, evt.file);
2016-01-26 16:43:49 +00:00
} else {
2016-01-25 15:34:57 +00:00
L(M2C(this.msgs.beforePeek.msg[1], sty), evt.file);
2016-01-26 16:43:49 +00:00
}
if (evt.target !== void 0) {
return console.dir(evt.target, {
depth: null,
colors: true
});
} else if (!evt.error) {
return L(M2C(this.msgs.afterPeek.msg, 'yellow'), evt.requested, evt.file);
}
2016-01-25 15:34:57 +00:00
}
}
});
2016-01-26 16:43:49 +00:00
}).call(this);