CleverStack/cleverstack-cli

View on GitHub
lib/repl.js

Summary

Maintainability
A
0 mins
Test Coverage
var repl     = require('repl')
  , path     = require('path')
  , semver   = require('semver')
  , major    = semver.major(process.version)
  , minor    = semver.minor(process.version)
  , lib      = require(process.env.libDir)
  , env      = require(path.join(__dirname, 'boot')).env
  , Table    = require('cli-table')
  , injector = require('clever-injector')()
  , cmds     = require('require-folder-tree')(path.resolve(path.join(__dirname, 'repl', 'commands')));

injector.instance('_',     require('lodash'));
injector.instance('repl',  repl);
injector.instance('lib',   lib);
injector.instance('env',   env);
injector.instance('Table', Table);
injector.instance('util',  require('util'));

lib.utils.success('Welcome to CleverStack ' + lib.colors.darkGray(' using seed version ' + env.packageJson.version));
lib.utils.success('Type .commands or .help for a list of commands');

var local = repl.start({
  prompt          : 'cleverstack::' + (process.env.NODE_ENV ? process.env.NODE_ENV : 'local') +  '> ',
  useGlobal       : true,
  ignoreUndefined : true
});
injector.instance('local', local);

Object.keys(cmds).forEach(function addCommandToRepl(cmdName) {
  injector.inject(cmds[cmdName], function(Command) {
    var name = (major === 0 && minor <= 10) ? ('.' + cmdName) : cmdName;

    cmds[cmdName] = new Command();

    local.commands[name] = {
      help   : cmds[cmdName].help,
      action : cmds[cmdName].action.bind(cmds[cmdName])
    };

    if (cmds[cmdName].aliases) {
      cmds[cmdName].aliases.forEach(function(alias) {
        var aliasName = (major === 0 && minor <= 10) ? '.' + alias : alias;

        local.commands[aliasName] = {
          help   : 'Alias for .' + cmdName,
          action : cmds[cmdName].action.bind(cmds[cmdName])
        };
      });
    }
  });
});

local.on('exit', function() {
  process.exit(0);
});