module.exports.run = function()

in src/cli/index.js [3:82]


module.exports.run = function(argv = process.argv) {
  const args = require('../../lib/cli/parseargv')(argv);
  const config = {
    host: args.host || null,
    token: args.token || null,
    output: args.output || null,
    cwd: process.cwd()
  };

  if (args.version || args.v) {
    return printVersion();
  }

  switch (args._[0]) {
    case 'list':
    case 'download':
    case 'upload':
      checkRequiredParams(['host'], args, () => {
        require('./' + args._[0])(config, args._.slice(1)[0]);
      });
      return;
    case 'version':
      printVersion();
      return;
    default:
      printHelp();
      return;
  }

  function printHelp() {
    br();
    printLine(i18n('list     --host [--token]     '), i18n('View a list of installed workflows'));
    printLine(i18n('download <workflow> [--output]'), i18n('Download a workflow'));
    printLine(i18n('upload   <directory>          '), i18n('Upload workflow to server'));
    br();

    function br() {
      console.log('');
    }

    /**
     * @param {string} option
     * @param {string} description
     */
    function printLine(option, description) {
      console.log('    ' + option + '   ' + description);
    }
  }

  /**
   * @param {string[]} required
   * @param {Object<string,*>} args
   * @param {*} fn
   * @returns {void}
   */
  function checkRequiredParams(required, args, fn) {
    const exit = require('../../lib/cli/exit');

    /**
     * @param {string[]} params
     * @param {Object<string,*>} args
     * @returns {Boolean}
     */
    function allParamsProvided(params, args) {
      return params.every(param => {
        if (!args.hasOwnProperty(param) || !args[param]) {
          exit(new Error(i18n('Option "--' + param + '" is required')));
          return false;
        }
        return true;
      });
    }

    if (allParamsProvided(required, args)) fn();
  }

  function printVersion() {
    console.log(require('../../package.json').version);
  }
};