diff --git a/package.json b/package.json index bab3436..ef9583a 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ }, "homepage": "https://github.com/hacksalot/HackMyResume", "dependencies": { - "colors": "^1.1.2", + "chalk": "^1.1.1", "copy": "^0.1.3", "fresca": "~0.2.4", "fresh-themes": "~0.9.3-beta", diff --git a/src/core/error-handler.js b/src/core/error-handler.js index a2ade77..62d4af7 100644 --- a/src/core/error-handler.js +++ b/src/core/error-handler.js @@ -9,7 +9,8 @@ , FS = require('fs') , FCMD = require('../hackmycmd') , PATH = require('path') - , title = ('\n*** HackMyResume v' + PKG.version + ' ***').bold.white; + , chalk = require('chalk') + , title = chalk.white.bold('\n*** HackMyResume v' + PKG.version + ' ***'); var ErrorHandler = module.exports = { @@ -29,46 +30,45 @@ break; case HACKMYSTATUS.resumeNotFound: - msg = 'Please '.guide + 'feed me a resume'.guide.bold + - ' in FRESH or JSON Resume format.'.guide; + msg = chalk.yellow('Please ') + chalk.yellow.bold('feed me a resume') + + chalk.yellow(' in FRESH or JSON Resume format.'); break; case HACKMYSTATUS.missingCommand: - msg = title + "\nPlease ".guide + "give me a command".guide.bold + - " (".guide; + msg = title + chalk.yellow("\nPlease ") + chalk.yellow.bold("give me a command") + + chalk.yellow(" ("); msg += Object.keys( FCMD.verbs ).map( function(v, idx, ar) { - return (idx === ar.length - 1 ? 'or '.guide : '') + - v.toUpperCase().guide; - }).join(', '.guide) + ").\n\n".guide; + return (idx === ar.length - 1 ? chalk.yellow('or ') : '') + + chalk.yellow.bold(v.toUpperCase()); + }).join( chalk.yellow(', ')) + chalk.yellow(").\n\n"); - msg += FS.readFileSync( - PATH.resolve(__dirname, '../use.txt'), 'utf8' ).info.bold; + msg += chalk.gray(FS.readFileSync( PATH.resolve(__dirname, '../use.txt'), 'utf8' )); break; case HACKMYSTATUS.invalidCommand: - msg = 'Please '.guide + 'specify the output resume file'.guide.bold + - ' that should be created.'.guide; + msg = chalk.yellow('Please ') + chalk.yellow.bold('specify the output resume file') + + chalk.yellow(' that should be created.'); break; case HACKMYSTATUS.resumeNotFoundAlt: - msg = 'Please '.guide + 'feed me a resume'.guide.bold + - ' in either FRESH or JSON Resume format.'.guide; + msg = chalk.yellow('Please ') + chalk.yellow.bold('feed me a resume') + + chalk.yellow(' in either FRESH or JSON Resume format.'); break; case HACKMYSTATUS.inputOutputParity: - msg = 'Please '.guide + 'specify an output file name'.guide.bold + - ' for every input file you wish to convert.'.guide; + msg = chalk.yellow('Please ') + chalk.yellow.bold('specify an output file name') + + chalk.yellow(' for every input file you wish to convert.'); break; case HACKMYSTATUS.createNameMissing: - msg = 'Please '.guide + 'specify the filename of the resume'.guide.bold + - ' to create.'.guide; + msg = chalk.yellow('Please ') + chalk.yellow.bold('specify the filename of the resume') + + chalk.yellow(' to create.'); break; case HACKMYSTATUS.wkhtmltopdf: - msg = 'ERROR: PDF generation failed. '.red.bold + ('Make sure wkhtmltopdf is ' + - 'installed and accessible from your path.').red; + msg = chalk.red.bold('ERROR: PDF generation failed. ') + chalk.red('Make sure wkhtmltopdf is ' + + 'installed and accessible from your path.'); break; } @@ -83,8 +83,8 @@ var idx = msg.indexOf('Error: '); var trimmed = idx === -1 ? msg : msg.substring( idx + 7 ); if( !ex.fluenterror || ex.fluenterror < 3 ) { // TODO: magic #s - console.log( ('ERROR: ' + trimmed.toString()).red.bold ); - console.log( ex.stack.gray); + console.log( chalk.red.bold('ERROR: ' + trimmed.toString()) ); + console.log( chalk.gray(ex.stack) ); } else { console.log( trimmed.toString() ); diff --git a/src/core/resume-factory.js b/src/core/resume-factory.js index b8d4265..08becdc 100644 --- a/src/core/resume-factory.js +++ b/src/core/resume-factory.js @@ -13,6 +13,7 @@ Definition of the ResumeFactory class. require('string.prototype.startswith'); var FS = require('fs'); var ResumeConverter = require('./convert'); + var chalk = require('chalk'); @@ -85,8 +86,7 @@ Definition of the ResumeFactory class. try { // TODO: Core should not log - log( 'Reading '.info + /*orgFormat.toUpperCase().infoBold +*/ - 'resume: '.info + fileName.cyan.bold ); + log( chalk.gray('Reading resume: ') + chalk.cyan.bold(fileName) ); rawData = FS.readFileSync( fileName, 'utf8' ); return { diff --git a/src/hackmycmd.js b/src/hackmycmd.js index be9e69b..75f69f3 100644 --- a/src/hackmycmd.js +++ b/src/hackmycmd.js @@ -9,7 +9,8 @@ Internal resume generation logic for HackMyResume. var unused = require('./utils/string') , PATH = require('path') - , FS = require('fs'); + , FS = require('fs') + , chalk = require('chalk'); /** @@ -17,7 +18,7 @@ Internal resume generation logic for HackMyResume. */ function help() { var manPage = FS.readFileSync( PATH.join(__dirname, 'use.txt'), 'utf8' ); - console.log( manPage.useful.bold ); + console.log( chalk.green.bold(manPage) ); } /** @@ -25,7 +26,7 @@ Internal resume generation logic for HackMyResume. */ var v = { build: require('./verbs/generate'), - analyze: require('./verbs/analyze'), + analyze: require('./verbs/analyze'), validate: require('./verbs/validate'), convert: require('./verbs/convert'), new: require('./verbs/create'), diff --git a/src/index.js b/src/index.js index 904d790..81fa89f 100644 --- a/src/index.js +++ b/src/index.js @@ -12,12 +12,12 @@ var SPAWNW = require('./core/spawn-watch') , ARGS = require( 'minimist' ) , FCMD = require( './hackmycmd') , PKG = require('../package.json') - , COLORS = require('colors') , FS = require('fs') + , chalk = require('chalk') , PATH = require('path') , HACKMYSTATUS = require('./core/status-codes') , opts = { } - , title = ('\n*** HackMyResume v' + PKG.version + ' ***').bold.white + , title = chalk.white('\n*** HackMyResume v' + PKG.version + ' ***') , _ = require('underscore'); @@ -35,16 +35,16 @@ catch( ex ) { function main() { // Colorize - COLORS.setTheme({ - title: ['white','bold'], - info: process.platform === 'win32' ? 'gray' : ['white','dim'], - infoBold: ['white','dim'], - warn: 'yellow', - error: 'red', - guide: 'yellow', - status: 'gray',//['white','dim'], - useful: 'green', - }); + // COLORS.setTheme({ + // title: ['white','bold'], + // info: process.platform === 'win32' ? 'gray' : ['white','dim'], + // infoBold: ['white','dim'], + // warn: 'yellow', + // error: 'red', + // guide: 'yellow', + // status: 'gray',//['white','dim'], + // useful: 'green', + // }); // Setup if( process.argv.length <= 2 ) { throw { fluenterror: 4 }; } @@ -56,7 +56,7 @@ function main() { var params = a._.map( function(p){ return p.toLowerCase().trim(); }); var verb = params[0]; if( !FCMD.verbs[ verb ] && !FCMD.alias[ verb ] ) { - logMsg('Invalid command: "'.warn + verb.warn.bold + '"'.warn); + logMsg(chalk.yellow('Invalid command: "') + chalk.yellow.bold(verb) + chalk.yellow('"')); return; } diff --git a/src/verbs/analyze.js b/src/verbs/analyze.js index 3392add..cf5b395 100644 --- a/src/verbs/analyze.js +++ b/src/verbs/analyze.js @@ -39,8 +39,8 @@ Implementation of the 'analyze' verb for HackMyResume. function _analyze( resumeObject, nlzrs, opts, log ) { var rez = resumeObject.rez; var safeFormat = rez.meta.format.startsWith('FRESH') ? 'FRESH' : 'JRS'; - log('Analyzing '.useful + safeFormat.useful.bold + - ' resume: '.useful + resumeObject.file.useful.bold); + log(chalk.cyan('Analyzing ') + chalk.cyan.bold(safeFormat) + + chalk.cyan(' resume: ') + chalk.cyan.bold(resumeObject.file)); var info = _.mapObject( nlzrs, function(val, key) { return val.run( resumeObject.rez ); }); diff --git a/src/verbs/convert.js b/src/verbs/convert.js index a2f80fe..50b1a62 100644 --- a/src/verbs/convert.js +++ b/src/verbs/convert.js @@ -27,9 +27,9 @@ Implementation of the 'convert' verb for HackMyResume. var sheet = src.rez; var sourceFormat = ((sheet.basics && sheet.basics.imp) || sheet.imp).orgFormat === 'JRS' ? 'JRS' : 'FRESH'; var targetFormat = sourceFormat === 'JRS' ? 'FRESH' : 'JRS'; - _log( 'Converting '.useful + src.file.useful.bold + (' (' + - sourceFormat + ') to ').useful + dst[0].useful.bold + - (' (' + targetFormat + ').').useful ); + _log( chalk.green('Converting ') + chalk.green.bold(src.file) + chalk.green(' (' + + sourceFormat + ') to ') + chalk.green.bold(dst[0]) + + chalk.green(' (' + targetFormat + ').') ); sheet.saveAs( dst[idx], targetFormat ); }); }; diff --git a/src/verbs/create.js b/src/verbs/create.js index 1183320..7b9fd6a 100644 --- a/src/verbs/create.js +++ b/src/verbs/create.js @@ -18,8 +18,8 @@ Implementation of the 'create' verb for HackMyResume. if( !src || !src.length ) throw { fluenterror: 8 }; src.forEach( function( t ) { var safeFormat = opts.format.toUpperCase(); - _log('Creating new '.useful +safeFormat.useful.bold + - ' resume: '.useful + t.useful.bold); + _log(chalk.green('Creating new ') + chalk.green.bold(safeFormat) + + chalk.green(' resume: ') + chalk.green.bold(t)); MKDIRP.sync( PATH.dirname( t ) ); // Ensure dest folder exists; FLUENT[ safeFormat + 'Resume' ].default().save( t ); }); diff --git a/src/verbs/generate.js b/src/verbs/generate.js index 7dea1a5..5b7de95 100644 --- a/src/verbs/generate.js +++ b/src/verbs/generate.js @@ -21,6 +21,7 @@ Implementation of the 'generate' verb for HackMyResume. , _ = require('underscore') , _fmts = require('../core/default-formats') , extend = require('../utils/extend') + , chalk = require('chalk') , _err, _log, rez; @@ -64,9 +65,10 @@ Implementation of the 'generate' verb for HackMyResume. var msg = ''; var rezRep = _.reduceRight( sheets, function( a, b, idx ) { msg += ((idx == sheets.length - 2) ? - 'Merging '.gray + a.rez.imp.fileName : '') + ' onto '.gray + b.rez.fileName; + chalk.gray('Merging ') + a.rez.imp.fileName : '') + chalk.gray(' onto ') + b.rez.fileName; return extend( true, b.rez, a.rez ); }); + rez = rezRep.rez; msg && _log(msg); @@ -102,9 +104,9 @@ Implementation of the 'generate' verb for HackMyResume. , fName = PATH.basename(f, '.' + fType) , theFormat; - _log( 'Generating '.useful + - targInfo.fmt.outFormat.toUpperCase().useful.bold + - ' resume: '.useful + PATH.relative(process.cwd(), f ).useful.bold ); + _log( chalk.green('Generating ') + + chalk.green.bold(targInfo.fmt.outFormat.toUpperCase()) + + chalk.green(' resume: ') + chalk.green.bold( PATH.relative(process.cwd(), f )) ); // If targInfo.fmt.files exists, this format is backed by a document. // Fluent/FRESH themes are handled here. @@ -273,8 +275,8 @@ Implementation of the 'generate' verb for HackMyResume. // Output a message TODO: core should not log var numFormats = Object.keys(theTheme.formats).length; - _log( 'Applying '.info + theTheme.name.toUpperCase().infoBold + - (' theme (' + numFormats + ' formats)').info); + _log( chalk.gray('Applying ') + chalk.gray.bold(theTheme.name.toUpperCase()) + + chalk.gray(' theme (' + numFormats + ' formats)')); return theTheme; } diff --git a/src/verbs/validate.js b/src/verbs/validate.js index a2c89f2..0d12ce4 100644 --- a/src/verbs/validate.js +++ b/src/verbs/validate.js @@ -9,6 +9,7 @@ Implementation of the 'validate' verb for HackMyResume. var FS = require('fs'); var ResumeFactory = require('../core/resume-factory'); var SyntaxErrorEx = require('../utils/syntax-error-ex'); + var chalk = require('chalk'); module.exports = @@ -31,25 +32,25 @@ Implementation of the 'validate' verb for HackMyResume. var result = ResumeFactory.loadOne( src, function(){}, null, false ); if( result.error ) { - _log( 'Validating '.info + src.infoBold + ' against '.info + 'AUTO'.infoBold + ' schema:'.info + ' BROKEN'.red.bold ); + _log( chalk.white('Validating ') + chalk.gray.bold(src) + chalk.white(' against ') + chalk.gray.bold('AUTO') + chalk.white(' schema:') + chalk.red.bold(' BROKEN') ); var ex = result.error; // alias if ( ex instanceof SyntaxError) { var info = new SyntaxErrorEx( ex, result.raw ); - _log( ('--> '.warn.bold + src.toUpperCase() + ' contains invalid JSON on line ' + - info.line + ' column ' + info.col + '.').warn + - ' Unable to validate.'.warn ); - _log( (' INTERNAL: ' + ex).warn ); + _log( chalk.red.bold('--> ') + chalk.red(src.toUpperCase() + ' contains invalid JSON on line ' + + info.line + ' column ' + info.col + '.') + + chalk.red(' Unable to validate.') ); + _log( chalk.red(' INTERNAL: ' + ex) ); } else { - _log(('ERROR: ' + ex.toString()).warn.bold); + _log(chalk.red.bold('ERROR: ' + ex.toString())); } return; } var json = result.json; var isValid = false; - var style = 'useful'; + var style = 'green'; var errors = []; var fmt = json.meta && (json.meta.format==='FRESH@0.1.0') ? 'fresh':'jars'; @@ -62,7 +63,7 @@ Implementation of the 'validate' verb for HackMyResume. isValid = validate( json ); if( !isValid ) { - style = 'warn'; + style = 'yellow'; errors = validate.errors; } @@ -71,14 +72,14 @@ Implementation of the 'validate' verb for HackMyResume. return; } - _log( 'Validating '.info + result.file.infoBold + ' against '.info + - fmt.replace('jars','JSON Resume').toUpperCase().infoBold + - ' schema: '.info + (isValid ? 'VALID!' : 'INVALID')[style].bold ); + _log( chalk.white('Validating ') + chalk.white.bold(result.file) + chalk.white(' against ') + + chalk.white.bold(fmt.replace('jars','JSON Resume').toUpperCase()) + + chalk.white(' schema: ') + chalk[style].bold(isValid ? 'VALID!' : 'INVALID') ); errors.forEach(function(err,idx) { - _log( '--> '.bold.yellow + - (err.field.replace('data.','resume.').toUpperCase() + ' ' + - err.message).yellow ); + _log( chalk.yellow.bold('--> ') + + chalk.yellow(err.field.replace('data.','resume.').toUpperCase() + ' ' + + err.message) ); }); });