JonAbrams/synth

View on GitHub
bin/synth

Summary

Maintainability
Test Coverage
#!/usr/bin/env node
process.title = 'synth';

/* Third-party Modules */
var mkdirp = require('mkdirp'),
    pkg = require('../package.json'),
    version = pkg.version,
    os = require('os'),
    fs = require('fs'),
    path = require('path'),
    _ = require('lodash'),
    npm = require('npm'),
    bower = require('bower');

/* Local modules */
var commands = require('../lib/commands.js');

/* Global vars */
var validCommands = {
  'new': 'n',
  'install': 'i',
  'list': 'l',
  'search': 'se',
  'uninstall': 'u',
  'server': 's',
  'prod': 'p',
  'routes': 'r',
  'help': 'h'
};

// List of arguments passed in
var args = process.argv.slice(2);

// Determine which command is being executed
var command = (function () {
  // Substitute shortcut commands for the full version
  var supposedCommand = _.invert(validCommands)[ args[0] ] || args[0];

  // Replace unknown commands with 'help'
  if ( !_(validCommands).has(supposedCommand) ) {
    if (supposedCommand) console.log('Unrecognized command: ' + supposedCommand + '\n');
    return "help";
  }
  return supposedCommand;
})();

if (command === 'new' && args[1] && args[1][0] != '-') {
  commands.createNewApp(args[1]);
  return;
}

if ( _(['server', 'prod']).contains(command) ) {
  var mode = 'development';
  var port;

  if (command == 'prod' || process.env.NODE_ENV == 'production') {
    process.env.NODE_ENV = mode = 'production';
  }

  portFlagIndex = args.indexOf('-p');
  if (portFlagIndex == -1) portFlagIndex = args.indexOf('--port');
  if ( portFlagIndex != -1) port = parseInt(args[portFlagIndex+1], 10);

  port = port || process.env.PORT || 3000;
  commands.startServer(mode, port);
  return;
}

if ( _(['install', 'search', 'list']).contains(command) ) {
  commands.install(command, args.slice(1) );
  return;
} else if ( _(['uninstall']).contains(command) ) {
  commands.uninstall(command, args.slice(1) );
  return;
}

if (command === 'routes') {
  commands.printRoutes();
  return;
}

commands.showHelp(args[1]);