bin/jsmd

Summary

Maintainability
Test Coverage
#!/usr/bin/env node

if (require('v8-argv')) return;

/**
 * Core dependencies.
 */

var resolve = require('path').resolve;

/**
 * Internal dependencies.
 */

var jsmd = require('..');

/**
 * Help message.
 */

var help = [
   'Usage: jsmd <path>',
   '',
   'Options:',
   '',
   '  --show      display the compiled JS after execution',
   '  --help      display this help message',
   '  --version   display the version number',
   '',
].join('\n');

/**
 * Args.
 */

var args = process.argv.slice(2);

/**
 * Readme file.
 */

var file = args.filter(function(arg) {
  return arg.indexOf('--') !== 0;
})[0];

/**
 * Debug mode.
 */

var show = args.indexOf('--show') > -1;

// --version

if (args.indexOf('--version') > -1) {
  console.log(require('../package.json').version);
  process.exit(0);
}

// --help

if (args.indexOf('--help') > -1) {
  console.log(help);
  process.exit(0);
}

if (file) {
  // process file

  // make path absolute
  file = resolve(process.cwd(), file);

  jsmd.verifyFile(file, end);
} else {
  // process stdin

  var md = '';
  // give default name
  file = process.cwd() + '/stdin';
  process.stdin.setEncoding('utf8');
  process.stdin.on('data', function(chunk){ md += chunk; });
  process.stdin.on('end', function(){
    jsmd.verify(md, file, end);
  }).resume();
}

function end(err, js) {
  if (err) {
    console.error(err.stack);
    console.error('');
    console.error(file + ':\n');
    console.error(number(js));
    console.error('');
    process.exit(1);
  }

  if (show) {
    console.error(file + ':\n');
    console.log(number(js));
  }
}

function number(src){
  var i = 1;
  return src.replace(/^/gm, function(){
    var n = ' ' + String(i++);
    while (n.length < 4) n += ' ';
    return '\033[90m' + n + '| \033[0m';
  });
}