From 7bcbe6f4694033132d8ac44b2d906dfa52618ea5 Mon Sep 17 00:00:00 2001 From: fardog Date: Sun, 28 Dec 2014 00:26:37 -0800 Subject: [PATCH] Show help and version even if phantom isn't present. Fixes #71 --- lib/cli.js | 130 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 76 insertions(+), 54 deletions(-) diff --git a/lib/cli.js b/lib/cli.js index 14ee904da..3a4f79e9e 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -10,7 +10,11 @@ var PHANTOM_VERSION = "^1.9.0" var info = chalk.blue.bold , note = chalk.green.bold -var cli = function(options) { +module.exports = function() { + return new cli() +}() + +function cli(options) { this.options = { alias: { help: 'h' @@ -52,9 +56,11 @@ cli.prototype.parse = function(argv, next) { if (options.version) { var pkg = require('../package.json') this.message = "" + pkg.version + next(null, this.message) } else if (options.help) { this.message = this.helpMessage.join('\n') + next(null, this.message) } else { options.files = options._ @@ -71,65 +77,81 @@ cli.prototype.parse = function(argv, next) { } } }.bind(this)) - } - if (options.svg && !options.png) { - options.png = false - } - else { - options.png = true - } + // set svg/png flags appropriately + if (options.svg && !options.png) { + options.png = false + } + else { + options.png = true + } - // If phantom hasn't been specified, see if we can find it - if (!options.phantomPath) { - try { - var phantom = require('phantomjs') - options.phantomPath = phantom.path - } catch (e) { + this.checkPhantom = createCheckPhantom(options.phantomPath) + + this.checkPhantom(function(err, path) { + if(err) { + this.errors.push(err) + } + options.phantomPath = path + next( + this.errors.length > 0 ? this.errors : null + , this.message + , options + ) + }.bind(this)) + } +} + +function createCheckPhantom(_phantomPath) { + var phantomPath = _phantomPath + , phantomVersion + + return function checkPhantom(_next) { + var next = _next || function() {} + , err + + if (typeof phantomPath === 'undefined') { try { - options.phantomPath = which.sync('phantomjs') + var phantom = require('phantomjs') + phantomPath = phantom.path } catch (e) { - if (!options.phantomPath) { - var err = [ - "Cannot find phantomjs in your PATH. If phantomjs is installed" - , "you may need to specify its path manually with the '-e' option." - , "If it is not installed, you should view the README for further" - , "details." - ] - - this.errors.push(new Error(err.join('\n'))) - next( - this.errors.length > 0 ? this.errors : null - , this.message - , options) - - return + try { + phantomPath = which.sync('phantomjs') + } catch (e) { + if (!phantomPath) { + phantomPath = null + err = new Error( + [ + "Cannot find phantomjs in your PATH. If phantomjs is installed" + , "you may need to specify its path manually with the '-e' option." + , "Run this executable with '--help' or view the README for more" + , "details." + ].join('\n') + ) + + next(err) + return + } } } } + + // If we have phantompath, see if its version satisfies our requirements + exec(phantomPath + ' --version', function(err, stdout, stderr) { + if (err) { + next(new Error("Could not find phantomjs at the specified path.")) + } + else if (!semver.satisfies(stdout, PHANTOM_VERSION)) { + next(new Error( + 'mermaid requires phantomjs ' + + PHANTOM_VERSION + + ' to be installed, found version ' + + stdout + )) + } + else { + next(null, phantomPath) + } + }) } - - // If we have phantompath, see if its version satisfies our requirements - exec(options.phantomPath + ' --version', function(err, stdout, stderr) { - if (err) { - this.errors.push( - new Error("Could not find phantomjs at the specified path.") - ) - } - else if (!semver.satisfies(stdout, PHANTOM_VERSION)) { - this.message = note( - 'mermaid requires phantomjs ' - + PHANTOM_VERSION - + ' to be installed, found version ' - + stdout - ) - } - next(this.errors.length > 0 ? this.errors : null, this.message, options) - }.bind(this)) - } - - -module.exports = function() { - return new cli() -}()