mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-11-22 16:30:11 +00:00
...
This commit is contained in:
parent
630cf59cfb
commit
80c36b96bc
298
dist/cli/error.js
vendored
298
dist/cli/error.js
vendored
@ -1,280 +1,234 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Error-handling routines for HackMyResume.
|
Error-handling routines for HackMyResume.
|
||||||
@module cli/error
|
@module cli/error
|
||||||
@license MIT. See LICENSE.md for details.
|
@license MIT. See LICENSE.md for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
var ErrorHandler, FCMD, FS, HMSTATUS, M2C, PATH, PKG, SyntaxErrorEx, WRAP, YAML, _defaultLog, assembleError, chalk, extend, printf;
|
||||||
|
|
||||||
|
HMSTATUS = require('hackmycore/dist/core/status-codes');
|
||||||
|
|
||||||
|
PKG = require('../../package.json');
|
||||||
|
|
||||||
|
FS = require('fs');
|
||||||
|
|
||||||
|
FCMD = require('hackmycore');
|
||||||
|
|
||||||
|
PATH = require('path');
|
||||||
|
|
||||||
|
WRAP = require('word-wrap');
|
||||||
|
|
||||||
|
M2C = require('hackmycore/dist/utils/md2chalk.js');
|
||||||
|
|
||||||
|
chalk = require('chalk');
|
||||||
|
|
||||||
|
extend = require('extend');
|
||||||
|
|
||||||
|
YAML = require('yamljs');
|
||||||
|
|
||||||
|
printf = require('printf');
|
||||||
|
|
||||||
|
SyntaxErrorEx = require('hackmycore/dist/utils/syntax-error-ex');
|
||||||
|
|
||||||
var HMSTATUS = require('hackmycore/dist/core/status-codes')
|
|
||||||
, PKG = require('../../package.json')
|
|
||||||
, FS = require('fs')
|
|
||||||
, FCMD = require('hackmycore')
|
|
||||||
, PATH = require('path')
|
|
||||||
, WRAP = require('word-wrap')
|
|
||||||
, M2C = require('hackmycore/dist/utils/md2chalk.js')
|
|
||||||
, chalk = require('chalk')
|
|
||||||
, extend = require('extend')
|
|
||||||
, YAML = require('yamljs')
|
|
||||||
, printf = require('printf')
|
|
||||||
, SyntaxErrorEx = require('hackmycore/dist/utils/syntax-error-ex');
|
|
||||||
require('string.prototype.startswith');
|
require('string.prototype.startswith');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error handler for HackMyResume. All errors are handled here.
|
Error handler for HackMyResume. All errors are handled here.
|
||||||
@class ErrorHandler
|
@class ErrorHandler
|
||||||
*/
|
*/
|
||||||
var ErrorHandler = module.exports = {
|
|
||||||
|
|
||||||
|
ErrorHandler = module.exports = {
|
||||||
|
init: function(debug, assert, silent) {
|
||||||
init: function( debug, assert, silent ) {
|
|
||||||
this.debug = debug;
|
this.debug = debug;
|
||||||
this.assert = assert;
|
this.assert = assert;
|
||||||
this.silent = silent;
|
this.silent = silent;
|
||||||
this.msgs = require('./msg.js').errors;
|
this.msgs = require('./msg').errors;
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
err: function(ex, shouldExit) {
|
||||||
|
var o, objError, stack, stackTrace;
|
||||||
|
o = this.silent ? function() {} : _defaultLog;
|
||||||
err: function( ex, shouldExit ) {
|
if (ex.pass) {
|
||||||
|
throw ex;
|
||||||
// Short-circuit logging output if --silent is on
|
|
||||||
var o = this.silent ? function() { } : _defaultLog;
|
|
||||||
|
|
||||||
// Special case; can probably be removed.
|
|
||||||
if( ex.pass ) throw ex;
|
|
||||||
|
|
||||||
// Load error messages
|
|
||||||
this.msgs = this.msgs || require('./msg.js').errors;
|
|
||||||
|
|
||||||
// Handle packaged HMR exceptions
|
|
||||||
if( ex.fluenterror ) {
|
|
||||||
|
|
||||||
// Output the error message
|
|
||||||
var objError = assembleError.call( this, ex );
|
|
||||||
o( this[ 'format_' + objError.etype ]( objError.msg ));
|
|
||||||
|
|
||||||
// Output the stack (sometimes)
|
|
||||||
if( objError.withStack ) {
|
|
||||||
var stack = ex.stack || (ex.inner && ex.inner.stack);
|
|
||||||
stack && o( chalk.gray( stack ) );
|
|
||||||
}
|
}
|
||||||
|
this.msgs = this.msgs || require('./msg').errors;
|
||||||
// Quit if necessary
|
if (ex.fluenterror) {
|
||||||
if( ex.quit || objError.quit ) {
|
objError = assembleError.call(this, ex);
|
||||||
this.debug && o(
|
o(this['format_' + objError.etype](objError.msg));
|
||||||
chalk.cyan('Exiting with error code ' + ex.fluenterror.toString()));
|
if (objError.withStack) {
|
||||||
if( this.assert ) { ex.pass = true; throw ex; }
|
stack = ex.stack || (ex.inner && ex.inner.stack);
|
||||||
process.exit( ex.fluenterror );
|
stack && o(chalk.gray(stack));
|
||||||
}
|
}
|
||||||
|
if (ex.quit || objError.quit) {
|
||||||
|
if (this.debug) {
|
||||||
|
o(chalk.cyan('Exiting with error code ' + ex.fluenterror.toString()));
|
||||||
|
}
|
||||||
|
if (this.assert) {
|
||||||
|
ex.pass = true;
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
return process.exit(ex.fluenterror);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
o(ex);
|
||||||
|
stackTrace = ex.stack || (ex.inner && ex.inner.stack);
|
||||||
|
if (stackTrace && this.debug) {
|
||||||
|
return o(M2C(ex.stack || ex.inner.stack, 'gray'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle raw exceptions
|
|
||||||
else {
|
|
||||||
o( ex );
|
|
||||||
var stackTrace = ex.stack || (ex.inner && ex.inner.stack);
|
|
||||||
if( stackTrace && this.debug )
|
|
||||||
o( M2C(ex.stack || ex.inner.stack, 'gray') );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
format_error: function(msg) {
|
||||||
|
|
||||||
|
|
||||||
format_error: function( msg ) {
|
|
||||||
msg = msg || '';
|
msg = msg || '';
|
||||||
return chalk.red.bold(
|
return chalk.red.bold(msg.toUpperCase().startsWith('ERROR:') ? msg : 'Error: ' + msg);
|
||||||
msg.toUpperCase().startsWith('ERROR:') ? msg : 'Error: ' + msg );
|
|
||||||
},
|
},
|
||||||
|
format_warning: function(brief, msg) {
|
||||||
|
|
||||||
|
|
||||||
format_warning: function( brief, msg ) {
|
|
||||||
return chalk.yellow(brief) + chalk.yellow(msg || '');
|
return chalk.yellow(brief) + chalk.yellow(msg || '');
|
||||||
},
|
},
|
||||||
|
format_custom: function(msg) {
|
||||||
|
|
||||||
format_custom: function( msg ) {
|
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_defaultLog = function() {
|
||||||
|
return console.log.apply(console.log, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
assembleError = function(ex) {
|
||||||
function _defaultLog() {
|
var etype, msg, quit, se, withStack;
|
||||||
console.log.apply( console.log, arguments );
|
msg = '';
|
||||||
|
withStack = false;
|
||||||
|
quit = false;
|
||||||
|
etype = 'warning';
|
||||||
|
if (this.debug) {
|
||||||
|
withStack = true;
|
||||||
}
|
}
|
||||||
|
switch (ex.fluenterror) {
|
||||||
|
|
||||||
|
|
||||||
function assembleError( ex ) {
|
|
||||||
|
|
||||||
var msg = '', withStack = false, quit = false, etype = 'warning';
|
|
||||||
if( this.debug ) withStack = true;
|
|
||||||
|
|
||||||
switch( ex.fluenterror ) {
|
|
||||||
|
|
||||||
case HMSTATUS.themeNotFound:
|
case HMSTATUS.themeNotFound:
|
||||||
msg = printf( M2C( this.msgs.themeNotFound.msg, 'yellow' ), ex.data);
|
msg = printf(M2C(this.msgs.themeNotFound.msg, 'yellow'), ex.data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.copyCSS:
|
case HMSTATUS.copyCSS:
|
||||||
msg = M2C( this.msgs.copyCSS.msg, 'red' );
|
msg = M2C(this.msgs.copyCSS.msg, 'red');
|
||||||
quit = false;
|
quit = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.resumeNotFound:
|
case HMSTATUS.resumeNotFound:
|
||||||
msg = M2C( this.msgs.resumeNotFound.msg, 'yellow' );
|
msg = M2C(this.msgs.resumeNotFound.msg, 'yellow');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.missingCommand:
|
case HMSTATUS.missingCommand:
|
||||||
msg = M2C( this.msgs.missingCommand.msg + " (", 'yellow');
|
msg = M2C(this.msgs.missingCommand.msg + " (", 'yellow');
|
||||||
msg += Object.keys( FCMD.verbs ).map( function(v, idx, ar) {
|
msg += Object.keys(FCMD.verbs).map(function(v, idx, ar) {
|
||||||
return (idx === ar.length - 1 ? chalk.yellow('or ') : '') +
|
return (idx === ar.length - 1 ? chalk.yellow('or ') : '') + chalk.yellow.bold(v.toUpperCase());
|
||||||
chalk.yellow.bold(v.toUpperCase());
|
}).join(chalk.yellow(', ')) + chalk.yellow(").\n\n");
|
||||||
}).join( chalk.yellow(', ')) + chalk.yellow(").\n\n");
|
msg += chalk.gray(FS.readFileSync(PATH.resolve(__dirname, '../cli/use.txt'), 'utf8'));
|
||||||
|
|
||||||
msg += chalk.gray(FS.readFileSync(
|
|
||||||
PATH.resolve(__dirname, '../cli/use.txt'), 'utf8' ));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.invalidCommand:
|
case HMSTATUS.invalidCommand:
|
||||||
msg = printf( M2C( this.msgs.invalidCommand.msg, 'yellow'), ex.attempted );
|
msg = printf(M2C(this.msgs.invalidCommand.msg, 'yellow'), ex.attempted);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.resumeNotFoundAlt:
|
case HMSTATUS.resumeNotFoundAlt:
|
||||||
msg = M2C( this.msgs.resumeNotFoundAlt.msg, 'yellow' );
|
msg = M2C(this.msgs.resumeNotFoundAlt.msg, 'yellow');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.inputOutputParity:
|
case HMSTATUS.inputOutputParity:
|
||||||
msg = M2C( this.msgs.inputOutputParity.msg );
|
msg = M2C(this.msgs.inputOutputParity.msg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.createNameMissing:
|
case HMSTATUS.createNameMissing:
|
||||||
msg = M2C( this.msgs.createNameMissing.msg );
|
msg = M2C(this.msgs.createNameMissing.msg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.pdfGeneration:
|
case HMSTATUS.pdfGeneration:
|
||||||
msg = M2C( this.msgs.pdfGeneration.msg, 'bold' );
|
msg = M2C(this.msgs.pdfGeneration.msg, 'bold');
|
||||||
if( ex.inner ) msg += chalk.red('\n' + ex.inner);
|
if (ex.inner) {
|
||||||
withStack = true; quit = false; etype = 'error';
|
msg += chalk.red('\n' + ex.inner);
|
||||||
break;
|
}
|
||||||
|
withStack = true;
|
||||||
case HMSTATUS.invalid:
|
quit = false;
|
||||||
msg = M2C( this.msgs.invalid.msg, 'red' );
|
etype = 'error';
|
||||||
|
break;
|
||||||
|
case HMSTATUS.invalid:
|
||||||
|
msg = M2C(this.msgs.invalid.msg, 'red');
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.generateError:
|
case HMSTATUS.generateError:
|
||||||
msg = (ex.inner && ex.inner.toString()) || ex;
|
msg = (ex.inner && ex.inner.toString()) || ex;
|
||||||
quit = false;
|
quit = false;
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.fileSaveError:
|
case HMSTATUS.fileSaveError:
|
||||||
msg = printf( M2C( this.msgs.fileSaveError.msg ), (ex.inner || ex).toString() );
|
msg = printf(M2C(this.msgs.fileSaveError.msg), (ex.inner || ex).toString());
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
quit = false;
|
quit = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.invalidFormat:
|
case HMSTATUS.invalidFormat:
|
||||||
ex.data.forEach(function(d){
|
ex.data.forEach(function(d) {
|
||||||
msg += printf( M2C( this.msgs.invalidFormat.msg, 'bold' ),
|
return msg += printf(M2C(this.msgs.invalidFormat.msg, 'bold'), ex.theme.name.toUpperCase(), d.format.toUpperCase());
|
||||||
ex.theme.name.toUpperCase(), d.format.toUpperCase());
|
|
||||||
}, this);
|
}, this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.missingParam:
|
case HMSTATUS.missingParam:
|
||||||
msg = printf( M2C( this.msgs.missingParam.msg ), ex.expected, ex.helper );
|
msg = printf(M2C(this.msgs.missingParam.msg), ex.expected, ex.helper);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.invalidHelperUse:
|
case HMSTATUS.invalidHelperUse:
|
||||||
msg = printf( M2C( this.msgs.invalidHelperUse.msg ), ex.helper );
|
msg = printf(M2C(this.msgs.invalidHelperUse.msg), ex.helper);
|
||||||
if( ex.error ) {
|
if (ex.error) {
|
||||||
msg += '\n--> ' + assembleError.call( this, extend( true, {}, ex, {fluenterror: ex.error} )).msg;
|
msg += '\n--> ' + assembleError.call(this, extend(true, {}, ex, {
|
||||||
//msg += printf( '\n--> ' + M2C( this.msgs.invalidParamCount.msg ), ex.expected );
|
fluenterror: ex.error
|
||||||
|
})).msg;
|
||||||
}
|
}
|
||||||
quit = false;
|
quit = false;
|
||||||
etype = 'warning';
|
etype = 'warning';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.notOnPath:
|
case HMSTATUS.notOnPath:
|
||||||
msg = printf( M2C(this.msgs.notOnPath.msg, 'bold'), ex.engine);
|
msg = printf(M2C(this.msgs.notOnPath.msg, 'bold'), ex.engine);
|
||||||
quit = false;
|
quit = false;
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.readError:
|
case HMSTATUS.readError:
|
||||||
if( !ex.quiet )
|
if (!ex.quiet) {
|
||||||
console.error(printf( M2C(this.msgs.readError.msg, 'red'), ex.file));
|
console.error(printf(M2C(this.msgs.readError.msg, 'red'), ex.file));
|
||||||
|
}
|
||||||
msg = ex.inner.toString();
|
msg = ex.inner.toString();
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.mixedMerge:
|
case HMSTATUS.mixedMerge:
|
||||||
msg = M2C( this.msgs.mixedMerge.msg );
|
msg = M2C(this.msgs.mixedMerge.msg);
|
||||||
quit = false;
|
quit = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.invokeTemplate:
|
case HMSTATUS.invokeTemplate:
|
||||||
msg = M2C( this.msgs.invokeTemplate.msg, 'red' );
|
msg = M2C(this.msgs.invokeTemplate.msg, 'red');
|
||||||
msg += M2C( '\n' + WRAP(ex.inner.toString(), { width: 60, indent: ' ' }), 'gray' );
|
msg += M2C('\n' + WRAP(ex.inner.toString(), {
|
||||||
|
width: 60,
|
||||||
|
indent: ' '
|
||||||
|
}), 'gray');
|
||||||
etype = 'custom';
|
etype = 'custom';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.compileTemplate:
|
case HMSTATUS.compileTemplate:
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.themeLoad:
|
case HMSTATUS.themeLoad:
|
||||||
msg = M2C( printf( this.msgs.themeLoad.msg, ex.attempted.toUpperCase() ), 'red');
|
msg = M2C(printf(this.msgs.themeLoad.msg, ex.attempted.toUpperCase()), 'red');
|
||||||
if( ex.inner && ex.inner.fluenterror ) {
|
if (ex.inner && ex.inner.fluenterror) {
|
||||||
msg += M2C('\nError: ', 'red') + assembleError.call( this, ex.inner ).msg;
|
msg += M2C('\nError: ', 'red') + assembleError.call(this, ex.inner).msg;
|
||||||
}
|
}
|
||||||
quit = true;
|
quit = true;
|
||||||
etype = 'custom';
|
etype = 'custom';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HMSTATUS.parseError:
|
case HMSTATUS.parseError:
|
||||||
if( SyntaxErrorEx.is( ex.inner )) {
|
if (SyntaxErrorEx.is(ex.inner)) {
|
||||||
console.error( printf( M2C(this.msgs.readError.msg, 'red'), ex.file ) );
|
console.error(printf(M2C(this.msgs.readError.msg, 'red'), ex.file));
|
||||||
var se = new SyntaxErrorEx( ex, ex.raw );
|
se = new SyntaxErrorEx(ex, ex.raw);
|
||||||
msg = printf( M2C( this.msgs.parseError.msg, 'red' ),
|
msg = printf(M2C(this.msgs.parseError.msg, 'red'), se.line, se.col);
|
||||||
se.line, se.col);
|
} else if (ex.inner && ex.inner.line !== void 0 && ex.inner.col !== void 0) {
|
||||||
}
|
msg = printf(M2C(this.msgs.parseError.msg, 'red'), ex.inner.line, ex.inner.col);
|
||||||
else if( ex.inner && ex.inner.line !== undefined && ex.inner.col !== undefined ) {
|
} else {
|
||||||
msg = printf( M2C( this.msgs.parseError.msg, 'red' ),
|
|
||||||
ex.inner.line, ex.inner.col);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
msg = ex;
|
msg = ex;
|
||||||
}
|
}
|
||||||
etype = 'error';
|
etype = 'error';
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
msg: msg, // The error message to display
|
msg: msg,
|
||||||
withStack: withStack, // Whether to include the stack
|
withStack: withStack,
|
||||||
quit: quit,
|
quit: quit,
|
||||||
etype: etype
|
etype: etype
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
|
||||||
|
}).call(this);
|
||||||
|
|
||||||
|
|
||||||
}());
|
|
||||||
|
6
dist/cli/main.js
vendored
6
dist/cli/main.js
vendored
@ -136,7 +136,7 @@ Definition of the `main` function.
|
|||||||
|
|
||||||
initOptions = function(ar) {
|
initOptions = function(ar) {
|
||||||
oVerb;
|
oVerb;
|
||||||
var args, cleanArgs, inf, isDebug, isSilent, oJSON, oVerb, optStr, optsIdx, verb, vidx;
|
var args, cleanArgs, inf, isDebug, isMono, isSilent, oJSON, oVerb, optStr, optsIdx, verb, vidx;
|
||||||
verb = '';
|
verb = '';
|
||||||
args = ar.slice();
|
args = ar.slice();
|
||||||
cleanArgs = args.slice(2);
|
cleanArgs = args.slice(2);
|
||||||
@ -177,7 +177,11 @@ Definition of the `main` function.
|
|||||||
isSilent = _.some(args, function(v) {
|
isSilent = _.some(args, function(v) {
|
||||||
return v === '-s' || v === '--silent';
|
return v === '-s' || v === '--silent';
|
||||||
});
|
});
|
||||||
|
isMono = _.some(args, function(v) {
|
||||||
|
return v === '--no-color';
|
||||||
|
});
|
||||||
return {
|
return {
|
||||||
|
color: !isMono,
|
||||||
debug: isDebug,
|
debug: isDebug,
|
||||||
silent: isSilent,
|
silent: isSilent,
|
||||||
orgVerb: oVerb,
|
orgVerb: oVerb,
|
||||||
|
19
dist/cli/msg.js
vendored
19
dist/cli/msg.js
vendored
@ -1,18 +1,17 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Message-handling routines for HackMyResume.
|
Message-handling routines for HackMyResume.
|
||||||
@module msg.js
|
@module cli/msg
|
||||||
@license MIT. See LICENSE.md for details.
|
@license MIT. See LICENSE.md for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
var PATH, YAML;
|
||||||
|
|
||||||
var PATH = require('path');
|
PATH = require('path');
|
||||||
var YAML = require('yamljs');
|
|
||||||
|
|
||||||
var cache = module.exports = function() {
|
YAML = require('yamljs');
|
||||||
return cache ? cache : YAML.load( PATH.join(__dirname, 'msg.yml') );
|
|
||||||
}();
|
|
||||||
|
|
||||||
}());
|
module.exports = YAML.load(PATH.join(__dirname, 'msg.yml'));
|
||||||
|
|
||||||
|
}).call(this);
|
||||||
|
3
dist/cli/out.js
vendored
3
dist/cli/out.js
vendored
@ -25,6 +25,7 @@ Output routines for HackMyResume.
|
|||||||
, pad = require('string-padding')
|
, pad = require('string-padding')
|
||||||
, dbgStyle = 'cyan';
|
, dbgStyle = 'cyan';
|
||||||
|
|
||||||
|
chalk.enabled = false;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -159,7 +160,7 @@ Output routines for HackMyResume.
|
|||||||
case HME.afterAnalyze:
|
case HME.afterAnalyze:
|
||||||
var info = evt.info;
|
var info = evt.info;
|
||||||
var rawTpl = FS.readFileSync( PATH.join( __dirname, 'analyze.hbs' ), 'utf8');
|
var rawTpl = FS.readFileSync( PATH.join( __dirname, 'analyze.hbs' ), 'utf8');
|
||||||
HANDLEBARS.registerHelper( require('hackmycore/src/helpers/console-helpers') );
|
HANDLEBARS.registerHelper( require('hackmycore/dist/helpers/console-helpers') );
|
||||||
var template = HANDLEBARS.compile(rawTpl, { strict: false, assumeObjects: false });
|
var template = HANDLEBARS.compile(rawTpl, { strict: false, assumeObjects: false });
|
||||||
var tot = 0;
|
var tot = 0;
|
||||||
info.keywords.forEach(function(g) { tot += g.count; });
|
info.keywords.forEach(function(g) { tot += g.count; });
|
||||||
|
@ -79,6 +79,7 @@
|
|||||||
"jsonresume-theme-modern": "0.0.18",
|
"jsonresume-theme-modern": "0.0.18",
|
||||||
"jsonresume-theme-sceptile": "^1.0.5",
|
"jsonresume-theme-sceptile": "^1.0.5",
|
||||||
"mocha": "*",
|
"mocha": "*",
|
||||||
"resample": "fluentdesk/resample"
|
"resample": "fluentdesk/resample",
|
||||||
|
"stripcolorcodes": "^0.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
221
src/cli/error.coffee
Normal file
221
src/cli/error.coffee
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
###*
|
||||||
|
Error-handling routines for HackMyResume.
|
||||||
|
@module cli/error
|
||||||
|
@license MIT. See LICENSE.md for details.
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HMSTATUS = require('hackmycore/dist/core/status-codes')
|
||||||
|
PKG = require('../../package.json')
|
||||||
|
FS = require('fs')
|
||||||
|
FCMD = require('hackmycore')
|
||||||
|
PATH = require('path')
|
||||||
|
WRAP = require('word-wrap')
|
||||||
|
M2C = require('hackmycore/dist/utils/md2chalk.js')
|
||||||
|
chalk = require('chalk')
|
||||||
|
extend = require('extend')
|
||||||
|
YAML = require('yamljs')
|
||||||
|
printf = require('printf')
|
||||||
|
SyntaxErrorEx = require('hackmycore/dist/utils/syntax-error-ex')
|
||||||
|
require('string.prototype.startswith')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###*
|
||||||
|
Error handler for HackMyResume. All errors are handled here.
|
||||||
|
@class ErrorHandler
|
||||||
|
###
|
||||||
|
ErrorHandler = module.exports =
|
||||||
|
|
||||||
|
init: ( debug, assert, silent ) ->
|
||||||
|
@debug = debug
|
||||||
|
@assert = assert
|
||||||
|
@silent = silent
|
||||||
|
@msgs = require('./msg').errors
|
||||||
|
@
|
||||||
|
|
||||||
|
err: ( ex, shouldExit ) ->
|
||||||
|
|
||||||
|
# Short-circuit logging output if --silent is on
|
||||||
|
o = if this.silent then () -> else _defaultLog
|
||||||
|
|
||||||
|
# Special case; can probably be removed.
|
||||||
|
throw ex if ex.pass
|
||||||
|
|
||||||
|
# Load error messages
|
||||||
|
@msgs = @msgs || require('./msg').errors
|
||||||
|
|
||||||
|
# Handle packaged HMR exceptions
|
||||||
|
if ex.fluenterror
|
||||||
|
|
||||||
|
# Output the error message
|
||||||
|
objError = assembleError.call @, ex
|
||||||
|
o( this[ 'format_' + objError.etype ]( objError.msg ))
|
||||||
|
|
||||||
|
# Output the stack (sometimes)
|
||||||
|
if objError.withStack
|
||||||
|
stack = ex.stack || (ex.inner && ex.inner.stack);
|
||||||
|
stack && o( chalk.gray( stack ) );
|
||||||
|
|
||||||
|
# Quit if necessary
|
||||||
|
if ex.quit || objError.quit
|
||||||
|
if @debug
|
||||||
|
o chalk.cyan('Exiting with error code ' + ex.fluenterror.toString())
|
||||||
|
if this.assert
|
||||||
|
ex.pass = true
|
||||||
|
throw ex
|
||||||
|
process.exit ex.fluenterror
|
||||||
|
|
||||||
|
# Handle raw exceptions
|
||||||
|
else
|
||||||
|
o( ex )
|
||||||
|
stackTrace = ex.stack || (ex.inner && ex.inner.stack)
|
||||||
|
if stackTrace && this.debug
|
||||||
|
o( M2C(ex.stack || ex.inner.stack, 'gray') )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
format_error: ( msg ) ->
|
||||||
|
msg = msg || ''
|
||||||
|
chalk.red.bold( if msg.toUpperCase().startsWith('ERROR:') then msg else 'Error: ' + msg )
|
||||||
|
|
||||||
|
|
||||||
|
format_warning: ( brief, msg ) ->
|
||||||
|
chalk.yellow(brief) + chalk.yellow(msg || '')
|
||||||
|
|
||||||
|
|
||||||
|
format_custom: ( msg ) -> msg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_defaultLog = () -> console.log.apply console.log, arguments
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
assembleError = ( ex ) ->
|
||||||
|
|
||||||
|
msg = ''
|
||||||
|
withStack = false
|
||||||
|
quit = false
|
||||||
|
etype = 'warning'
|
||||||
|
withStack = true if @debug
|
||||||
|
|
||||||
|
switch ex.fluenterror
|
||||||
|
|
||||||
|
when HMSTATUS.themeNotFound
|
||||||
|
msg = printf( M2C( this.msgs.themeNotFound.msg, 'yellow' ), ex.data)
|
||||||
|
|
||||||
|
when HMSTATUS.copyCSS
|
||||||
|
msg = M2C( this.msgs.copyCSS.msg, 'red' )
|
||||||
|
quit = false
|
||||||
|
|
||||||
|
when HMSTATUS.resumeNotFound
|
||||||
|
msg = M2C( this.msgs.resumeNotFound.msg, 'yellow' );
|
||||||
|
|
||||||
|
when HMSTATUS.missingCommand
|
||||||
|
msg = M2C( this.msgs.missingCommand.msg + " (", 'yellow');
|
||||||
|
msg += Object.keys( FCMD.verbs ).map( (v, idx, ar) ->
|
||||||
|
return ( if idx == ar.length - 1 then chalk.yellow('or ') else '') +
|
||||||
|
chalk.yellow.bold(v.toUpperCase());
|
||||||
|
).join( chalk.yellow(', ')) + chalk.yellow(").\n\n");
|
||||||
|
|
||||||
|
msg += chalk.gray(FS.readFileSync(
|
||||||
|
PATH.resolve(__dirname, '../cli/use.txt'), 'utf8' ))
|
||||||
|
|
||||||
|
when HMSTATUS.invalidCommand
|
||||||
|
msg = printf( M2C( this.msgs.invalidCommand.msg, 'yellow'), ex.attempted )
|
||||||
|
|
||||||
|
when HMSTATUS.resumeNotFoundAlt
|
||||||
|
msg = M2C( this.msgs.resumeNotFoundAlt.msg, 'yellow' )
|
||||||
|
|
||||||
|
when HMSTATUS.inputOutputParity
|
||||||
|
msg = M2C( this.msgs.inputOutputParity.msg )
|
||||||
|
|
||||||
|
when HMSTATUS.createNameMissing
|
||||||
|
msg = M2C( this.msgs.createNameMissing.msg )
|
||||||
|
|
||||||
|
when HMSTATUS.pdfGeneration
|
||||||
|
msg = M2C( this.msgs.pdfGeneration.msg, 'bold' )
|
||||||
|
msg += chalk.red('\n' + ex.inner) if ex.inner
|
||||||
|
withStack = true
|
||||||
|
quit = false
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
|
when HMSTATUS.invalid
|
||||||
|
msg = M2C( this.msgs.invalid.msg, 'red' )
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
|
when HMSTATUS.generateError
|
||||||
|
msg = (ex.inner && ex.inner.toString()) || ex
|
||||||
|
quit = false
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
|
when HMSTATUS.fileSaveError
|
||||||
|
msg = printf( M2C( this.msgs.fileSaveError.msg ), (ex.inner || ex).toString() )
|
||||||
|
etype = 'error'
|
||||||
|
quit = false
|
||||||
|
|
||||||
|
when HMSTATUS.invalidFormat
|
||||||
|
ex.data.forEach( (d) ->
|
||||||
|
msg += printf( M2C( this.msgs.invalidFormat.msg, 'bold' ),
|
||||||
|
ex.theme.name.toUpperCase(), d.format.toUpperCase())
|
||||||
|
, @);
|
||||||
|
|
||||||
|
when HMSTATUS.missingParam
|
||||||
|
msg = printf(M2C( this.msgs.missingParam.msg ), ex.expected, ex.helper)
|
||||||
|
|
||||||
|
when HMSTATUS.invalidHelperUse
|
||||||
|
msg = printf( M2C( this.msgs.invalidHelperUse.msg ), ex.helper )
|
||||||
|
if ex.error
|
||||||
|
msg += '\n--> ' + assembleError.call( this, extend( true, {}, ex, {fluenterror: ex.error} )).msg;
|
||||||
|
#msg += printf( '\n--> ' + M2C( this.msgs.invalidParamCount.msg ), ex.expected );
|
||||||
|
quit = false
|
||||||
|
etype = 'warning'
|
||||||
|
|
||||||
|
when HMSTATUS.notOnPath
|
||||||
|
msg = printf( M2C(this.msgs.notOnPath.msg, 'bold'), ex.engine)
|
||||||
|
quit = false
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
|
when HMSTATUS.readError
|
||||||
|
if !ex.quiet
|
||||||
|
console.error(printf( M2C(this.msgs.readError.msg, 'red'), ex.file))
|
||||||
|
msg = ex.inner.toString()
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
|
when HMSTATUS.mixedMerge
|
||||||
|
msg = M2C this.msgs.mixedMerge.msg
|
||||||
|
quit = false
|
||||||
|
|
||||||
|
when HMSTATUS.invokeTemplate
|
||||||
|
msg = M2C this.msgs.invokeTemplate.msg, 'red'
|
||||||
|
msg += M2C( '\n' + WRAP(ex.inner.toString(), { width: 60, indent: ' ' }), 'gray' );
|
||||||
|
etype = 'custom'
|
||||||
|
|
||||||
|
when HMSTATUS.compileTemplate
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
|
when HMSTATUS.themeLoad
|
||||||
|
msg = M2C( printf( this.msgs.themeLoad.msg, ex.attempted.toUpperCase() ), 'red');
|
||||||
|
if ex.inner && ex.inner.fluenterror
|
||||||
|
msg += M2C('\nError: ', 'red') + assembleError.call( this, ex.inner ).msg
|
||||||
|
quit = true
|
||||||
|
etype = 'custom'
|
||||||
|
|
||||||
|
when HMSTATUS.parseError
|
||||||
|
if SyntaxErrorEx.is( ex.inner )
|
||||||
|
console.error printf( M2C(this.msgs.readError.msg, 'red'), ex.file )
|
||||||
|
se = new SyntaxErrorEx ex, ex.raw
|
||||||
|
msg = printf M2C( this.msgs.parseError.msg, 'red' ), se.line, se.col
|
||||||
|
else if ex.inner && ex.inner.line != undefined && ex.inner.col != undefined
|
||||||
|
msg = printf( M2C( this.msgs.parseError.msg, 'red' ), ex.inner.line, ex.inner.col)
|
||||||
|
else
|
||||||
|
msg = ex
|
||||||
|
etype = 'error'
|
||||||
|
|
||||||
|
msg: msg # The error message to display
|
||||||
|
withStack: withStack # Whether to include the stack
|
||||||
|
quit: quit
|
||||||
|
etype: etype
|
280
src/cli/error.js
280
src/cli/error.js
@ -1,280 +0,0 @@
|
|||||||
/**
|
|
||||||
Error-handling routines for HackMyResume.
|
|
||||||
@module cli/error
|
|
||||||
@license MIT. See LICENSE.md for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var HMSTATUS = require('hackmycore/dist/core/status-codes')
|
|
||||||
, PKG = require('../../package.json')
|
|
||||||
, FS = require('fs')
|
|
||||||
, FCMD = require('hackmycore')
|
|
||||||
, PATH = require('path')
|
|
||||||
, WRAP = require('word-wrap')
|
|
||||||
, M2C = require('hackmycore/dist/utils/md2chalk.js')
|
|
||||||
, chalk = require('chalk')
|
|
||||||
, extend = require('extend')
|
|
||||||
, YAML = require('yamljs')
|
|
||||||
, printf = require('printf')
|
|
||||||
, SyntaxErrorEx = require('hackmycore/dist/utils/syntax-error-ex');
|
|
||||||
require('string.prototype.startswith');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Error handler for HackMyResume. All errors are handled here.
|
|
||||||
@class ErrorHandler
|
|
||||||
*/
|
|
||||||
var ErrorHandler = module.exports = {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
init: function( debug, assert, silent ) {
|
|
||||||
this.debug = debug;
|
|
||||||
this.assert = assert;
|
|
||||||
this.silent = silent;
|
|
||||||
this.msgs = require('./msg.js').errors;
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
err: function( ex, shouldExit ) {
|
|
||||||
|
|
||||||
// Short-circuit logging output if --silent is on
|
|
||||||
var o = this.silent ? function() { } : _defaultLog;
|
|
||||||
|
|
||||||
// Special case; can probably be removed.
|
|
||||||
if( ex.pass ) throw ex;
|
|
||||||
|
|
||||||
// Load error messages
|
|
||||||
this.msgs = this.msgs || require('./msg.js').errors;
|
|
||||||
|
|
||||||
// Handle packaged HMR exceptions
|
|
||||||
if( ex.fluenterror ) {
|
|
||||||
|
|
||||||
// Output the error message
|
|
||||||
var objError = assembleError.call( this, ex );
|
|
||||||
o( this[ 'format_' + objError.etype ]( objError.msg ));
|
|
||||||
|
|
||||||
// Output the stack (sometimes)
|
|
||||||
if( objError.withStack ) {
|
|
||||||
var stack = ex.stack || (ex.inner && ex.inner.stack);
|
|
||||||
stack && o( chalk.gray( stack ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Quit if necessary
|
|
||||||
if( ex.quit || objError.quit ) {
|
|
||||||
this.debug && o(
|
|
||||||
chalk.cyan('Exiting with error code ' + ex.fluenterror.toString()));
|
|
||||||
if( this.assert ) { ex.pass = true; throw ex; }
|
|
||||||
process.exit( ex.fluenterror );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle raw exceptions
|
|
||||||
else {
|
|
||||||
o( ex );
|
|
||||||
var stackTrace = ex.stack || (ex.inner && ex.inner.stack);
|
|
||||||
if( stackTrace && this.debug )
|
|
||||||
o( M2C(ex.stack || ex.inner.stack, 'gray') );
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
format_error: function( msg ) {
|
|
||||||
msg = msg || '';
|
|
||||||
return chalk.red.bold(
|
|
||||||
msg.toUpperCase().startsWith('ERROR:') ? msg : 'Error: ' + msg );
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
format_warning: function( brief, msg ) {
|
|
||||||
return chalk.yellow(brief) + chalk.yellow(msg || '');
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
format_custom: function( msg ) {
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function _defaultLog() {
|
|
||||||
console.log.apply( console.log, arguments );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function assembleError( ex ) {
|
|
||||||
|
|
||||||
var msg = '', withStack = false, quit = false, etype = 'warning';
|
|
||||||
if( this.debug ) withStack = true;
|
|
||||||
|
|
||||||
switch( ex.fluenterror ) {
|
|
||||||
|
|
||||||
case HMSTATUS.themeNotFound:
|
|
||||||
msg = printf( M2C( this.msgs.themeNotFound.msg, 'yellow' ), ex.data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.copyCSS:
|
|
||||||
msg = M2C( this.msgs.copyCSS.msg, 'red' );
|
|
||||||
quit = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.resumeNotFound:
|
|
||||||
msg = M2C( this.msgs.resumeNotFound.msg, 'yellow' );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.missingCommand:
|
|
||||||
msg = M2C( this.msgs.missingCommand.msg + " (", 'yellow');
|
|
||||||
msg += Object.keys( FCMD.verbs ).map( function(v, idx, ar) {
|
|
||||||
return (idx === ar.length - 1 ? chalk.yellow('or ') : '') +
|
|
||||||
chalk.yellow.bold(v.toUpperCase());
|
|
||||||
}).join( chalk.yellow(', ')) + chalk.yellow(").\n\n");
|
|
||||||
|
|
||||||
msg += chalk.gray(FS.readFileSync(
|
|
||||||
PATH.resolve(__dirname, '../cli/use.txt'), 'utf8' ));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.invalidCommand:
|
|
||||||
msg = printf( M2C( this.msgs.invalidCommand.msg, 'yellow'), ex.attempted );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.resumeNotFoundAlt:
|
|
||||||
msg = M2C( this.msgs.resumeNotFoundAlt.msg, 'yellow' );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.inputOutputParity:
|
|
||||||
msg = M2C( this.msgs.inputOutputParity.msg );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.createNameMissing:
|
|
||||||
msg = M2C( this.msgs.createNameMissing.msg );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.pdfGeneration:
|
|
||||||
msg = M2C( this.msgs.pdfGeneration.msg, 'bold' );
|
|
||||||
if( ex.inner ) msg += chalk.red('\n' + ex.inner);
|
|
||||||
withStack = true; quit = false; etype = 'error';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.invalid:
|
|
||||||
msg = M2C( this.msgs.invalid.msg, 'red' );
|
|
||||||
etype = 'error';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.generateError:
|
|
||||||
msg = (ex.inner && ex.inner.toString()) || ex;
|
|
||||||
quit = false;
|
|
||||||
etype = 'error';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.fileSaveError:
|
|
||||||
msg = printf( M2C( this.msgs.fileSaveError.msg ), (ex.inner || ex).toString() );
|
|
||||||
etype = 'error';
|
|
||||||
quit = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.invalidFormat:
|
|
||||||
ex.data.forEach(function(d){
|
|
||||||
msg += printf( M2C( this.msgs.invalidFormat.msg, 'bold' ),
|
|
||||||
ex.theme.name.toUpperCase(), d.format.toUpperCase());
|
|
||||||
}, this);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.missingParam:
|
|
||||||
msg = printf( M2C( this.msgs.missingParam.msg ), ex.expected, ex.helper );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.invalidHelperUse:
|
|
||||||
msg = printf( M2C( this.msgs.invalidHelperUse.msg ), ex.helper );
|
|
||||||
if( ex.error ) {
|
|
||||||
msg += '\n--> ' + assembleError.call( this, extend( true, {}, ex, {fluenterror: ex.error} )).msg;
|
|
||||||
//msg += printf( '\n--> ' + M2C( this.msgs.invalidParamCount.msg ), ex.expected );
|
|
||||||
}
|
|
||||||
quit = false;
|
|
||||||
etype = 'warning';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.notOnPath:
|
|
||||||
msg = printf( M2C(this.msgs.notOnPath.msg, 'bold'), ex.engine);
|
|
||||||
quit = false;
|
|
||||||
etype = 'error';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.readError:
|
|
||||||
if( !ex.quiet )
|
|
||||||
console.error(printf( M2C(this.msgs.readError.msg, 'red'), ex.file));
|
|
||||||
msg = ex.inner.toString();
|
|
||||||
etype = 'error';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.mixedMerge:
|
|
||||||
msg = M2C( this.msgs.mixedMerge.msg );
|
|
||||||
quit = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.invokeTemplate:
|
|
||||||
msg = M2C( this.msgs.invokeTemplate.msg, 'red' );
|
|
||||||
msg += M2C( '\n' + WRAP(ex.inner.toString(), { width: 60, indent: ' ' }), 'gray' );
|
|
||||||
etype = 'custom';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.compileTemplate:
|
|
||||||
etype = 'error';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.themeLoad:
|
|
||||||
msg = M2C( printf( this.msgs.themeLoad.msg, ex.attempted.toUpperCase() ), 'red');
|
|
||||||
if( ex.inner && ex.inner.fluenterror ) {
|
|
||||||
msg += M2C('\nError: ', 'red') + assembleError.call( this, ex.inner ).msg;
|
|
||||||
}
|
|
||||||
quit = true;
|
|
||||||
etype = 'custom';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case HMSTATUS.parseError:
|
|
||||||
if( SyntaxErrorEx.is( ex.inner )) {
|
|
||||||
console.error( printf( M2C(this.msgs.readError.msg, 'red'), ex.file ) );
|
|
||||||
var se = new SyntaxErrorEx( ex, ex.raw );
|
|
||||||
msg = printf( M2C( this.msgs.parseError.msg, 'red' ),
|
|
||||||
se.line, se.col);
|
|
||||||
}
|
|
||||||
else if( ex.inner && ex.inner.line !== undefined && ex.inner.col !== undefined ) {
|
|
||||||
msg = printf( M2C( this.msgs.parseError.msg, 'red' ),
|
|
||||||
ex.inner.line, ex.inner.col);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
msg = ex;
|
|
||||||
}
|
|
||||||
etype = 'error';
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
msg: msg, // The error message to display
|
|
||||||
withStack: withStack, // Whether to include the stack
|
|
||||||
quit: quit,
|
|
||||||
etype: etype
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}());
|
|
@ -33,7 +33,7 @@ line interface as a single method accepting a parameter array.
|
|||||||
@param rawArgs {Array} An array of command-line parameters. Will either be
|
@param rawArgs {Array} An array of command-line parameters. Will either be
|
||||||
process.argv (in production) or custom parameters (in test).
|
process.argv (in production) or custom parameters (in test).
|
||||||
###
|
###
|
||||||
main = module.exports = (rawArgs ) ->
|
main = module.exports = (rawArgs) ->
|
||||||
|
|
||||||
initInfo = initialize( rawArgs )
|
initInfo = initialize( rawArgs )
|
||||||
args = initInfo.args
|
args = initInfo.args
|
||||||
@ -175,21 +175,20 @@ initOptions = ( ar ) ->
|
|||||||
oVerb
|
oVerb
|
||||||
verb = ''
|
verb = ''
|
||||||
args = ar.slice()
|
args = ar.slice()
|
||||||
cleanArgs = args.slice(2)
|
cleanArgs = args.slice( 2 )
|
||||||
oJSON
|
oJSON
|
||||||
|
|
||||||
if cleanArgs.length
|
if cleanArgs.length
|
||||||
|
|
||||||
# Support case-insensitive sub-commands (build, generate, validate, etc)
|
# Support case-insensitive sub-commands (build, generate, validate, etc)
|
||||||
vidx = _.findIndex( cleanArgs, (v) -> return v[0] != '-' )
|
vidx = _.findIndex cleanArgs, (v) -> v[0] != '-'
|
||||||
if vidx != -1
|
if vidx != -1
|
||||||
oVerb = cleanArgs[ vidx ]
|
oVerb = cleanArgs[ vidx ]
|
||||||
verb = args[ vidx + 2 ] = oVerb.trim().toLowerCase()
|
verb = args[ vidx + 2 ] = oVerb.trim().toLowerCase()
|
||||||
|
|
||||||
# Remove --options --opts -o and process separately
|
# Remove --options --opts -o and process separately
|
||||||
optsIdx = _.findIndex( cleanArgs, (v) ->
|
optsIdx = _.findIndex cleanArgs, (v) ->
|
||||||
return v == '-o' || v == '--options' || v == '--opts'
|
v == '-o' || v == '--options' || v == '--opts'
|
||||||
);
|
|
||||||
|
|
||||||
if optsIdx != -1
|
if optsIdx != -1
|
||||||
optStr = cleanArgs[ optsIdx + 1]
|
optStr = cleanArgs[ optsIdx + 1]
|
||||||
@ -206,7 +205,6 @@ initOptions = ( ar ) ->
|
|||||||
oJSON = inf.json
|
oJSON = inf.json
|
||||||
# TODO: Error handling
|
# TODO: Error handling
|
||||||
|
|
||||||
|
|
||||||
# Grab the --debug flag
|
# Grab the --debug flag
|
||||||
isDebug = _.some( args, (v) ->
|
isDebug = _.some( args, (v) ->
|
||||||
return v == '-d' || v == '--debug'
|
return v == '-d' || v == '--debug'
|
||||||
@ -217,7 +215,11 @@ initOptions = ( ar ) ->
|
|||||||
return v == '-s' || v == '--silent'
|
return v == '-s' || v == '--silent'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Grab the --no-color flag
|
||||||
|
isMono = _.some args, (v) -> v == '--no-color'
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
color: !isMono,
|
||||||
debug: isDebug,
|
debug: isDebug,
|
||||||
silent: isSilent,
|
silent: isSilent,
|
||||||
orgVerb: oVerb,
|
orgVerb: oVerb,
|
||||||
@ -279,11 +281,11 @@ loadOptions = ( o, cmdO ) ->
|
|||||||
logMsg('');
|
logMsg('');
|
||||||
|
|
||||||
# Cache
|
# Cache
|
||||||
EXTEND(true, _opts, o)
|
EXTEND( true, _opts, o )
|
||||||
return
|
return
|
||||||
|
|
||||||
### Split multiple command-line filenames by the 'TO' keyword ###
|
### Split multiple command-line filenames by the 'TO' keyword ###
|
||||||
splitSrcDest = ->
|
splitSrcDest = () ->
|
||||||
|
|
||||||
params = this.parent.args.filter((j) -> return String.is(j) )
|
params = this.parent.args.filter((j) -> return String.is(j) )
|
||||||
if params.length == 0
|
if params.length == 0
|
||||||
@ -309,5 +311,5 @@ splitSrcDest = ->
|
|||||||
|
|
||||||
|
|
||||||
### Simple logging placeholder. ###
|
### Simple logging placeholder. ###
|
||||||
logMsg = ->
|
logMsg = () ->
|
||||||
_opts.silent || console.log.apply( console.log, arguments )
|
_opts.silent || console.log.apply( console.log, arguments )
|
||||||
|
10
src/cli/msg.coffee
Normal file
10
src/cli/msg.coffee
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
###*
|
||||||
|
Message-handling routines for HackMyResume.
|
||||||
|
@module cli/msg
|
||||||
|
@license MIT. See LICENSE.md for details.
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
|
PATH = require 'path'
|
||||||
|
YAML = require 'yamljs'
|
||||||
|
module.exports = YAML.load PATH.join __dirname, 'msg.yml'
|
@ -1,18 +0,0 @@
|
|||||||
/**
|
|
||||||
Message-handling routines for HackMyResume.
|
|
||||||
@module msg.js
|
|
||||||
@license MIT. See LICENSE.md for details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
|
|
||||||
var PATH = require('path');
|
|
||||||
var YAML = require('yamljs');
|
|
||||||
|
|
||||||
var cache = module.exports = function() {
|
|
||||||
return cache ? cache : YAML.load( PATH.join(__dirname, 'msg.yml') );
|
|
||||||
}();
|
|
||||||
|
|
||||||
}());
|
|
@ -25,6 +25,7 @@ Output routines for HackMyResume.
|
|||||||
, pad = require('string-padding')
|
, pad = require('string-padding')
|
||||||
, dbgStyle = 'cyan';
|
, dbgStyle = 'cyan';
|
||||||
|
|
||||||
|
chalk.enabled = false;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -159,7 +160,7 @@ Output routines for HackMyResume.
|
|||||||
case HME.afterAnalyze:
|
case HME.afterAnalyze:
|
||||||
var info = evt.info;
|
var info = evt.info;
|
||||||
var rawTpl = FS.readFileSync( PATH.join( __dirname, 'analyze.hbs' ), 'utf8');
|
var rawTpl = FS.readFileSync( PATH.join( __dirname, 'analyze.hbs' ), 'utf8');
|
||||||
HANDLEBARS.registerHelper( require('hackmycore/src/helpers/console-helpers') );
|
HANDLEBARS.registerHelper( require('hackmycore/dist/helpers/console-helpers') );
|
||||||
var template = HANDLEBARS.compile(rawTpl, { strict: false, assumeObjects: false });
|
var template = HANDLEBARS.compile(rawTpl, { strict: false, assumeObjects: false });
|
||||||
var tot = 0;
|
var tot = 0;
|
||||||
info.keywords.forEach(function(g) { tot += g.count; });
|
info.keywords.forEach(function(g) { tot += g.count; });
|
||||||
|
@ -12,6 +12,7 @@ var chai = require('chai')
|
|||||||
, FS = require('fs')
|
, FS = require('fs')
|
||||||
, PATH = require('path')
|
, PATH = require('path')
|
||||||
, PKG = require('../package.json')
|
, PKG = require('../package.json')
|
||||||
|
, STRIPCOLOR = require('stripcolorcodes')
|
||||||
, _ = require('underscore');
|
, _ = require('underscore');
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +28,8 @@ describe('Testing Ouput interface', function () {
|
|||||||
// TODO: use sinon
|
// TODO: use sinon
|
||||||
// Replacement for console.log
|
// Replacement for console.log
|
||||||
function MyConsoleLog( msg ) {
|
function MyConsoleLog( msg ) {
|
||||||
gather += Array.prototype.slice.call(arguments).join(' ');
|
var tx = Array.prototype.slice.call(arguments).join(' ');
|
||||||
|
gather += STRIPCOLOR( tx );
|
||||||
ConsoleLogOrg.apply(this, arguments);
|
ConsoleLogOrg.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user