UNPKG

zeysdk

Version:
174 lines (162 loc) 4.65 kB
var mod = {}; var help = require('./_help.js'); var read = require('read'); var ora = require('ora'); var term = require('terminal-kit').terminal; var lockFile = require('lockfile'); // Get needed arguments var args = process.argv.slice(2); var check_files_result; // Create a method for each command mod.add = require('./commands/add'); mod.compare = require('./commands/compare'); mod.create = require('./commands/create'); mod.delete = require('./commands/delete'); mod.help = require('./commands/help'); mod.link = require('./commands/link'); mod.pull = require('./commands/pull'); mod.push = require('./commands/push'); mod.remove = require('./commands/remove'); mod.rename = require('./commands/rename'); mod.run = require('./commands/run'); mod.status = require('./commands/status'); mod.sync = require('./commands/sync'); mod.unlink = require('./commands/unlink'); mod.update = require('./commands/update'); mod.use = require('./commands/use'); mod.version = require('./commands/version'); mod.whoami = require('./commands/whoami'); mod.watch = require('./commands/watch'); // Private methods - helper methods not designed to be called from the command line mod._checkFiles = function(cb) { return true; } mod._ask = function(input, hide, cb) { var spinner = mod._spinner; var selected_index; spinner.stop(); if(typeof hide == 'function') { cb = hide; hide = false; } if(typeof input == 'string') { read({prompt: input, silent: hide}, function(err, response) { if(err) { cb(new Error('Input canceled.')); } else { spinner.start(); cb(null, response); } }); } else if(Array.isArray(input)) { if(!hide) { input = ['Cancel...'].concat(input); } if(hide === true) { selected_index = 0; } else if(hide > 0) { selected_index = hide; } else { selected_index = 0; } term.singleColumnMenu(input, {exitOnUnexpectedKey: true, selectedIndex: selected_index}, function(err, response) { term.grabInput(false); if(!hide) { if(err || typeof response.selectedIndex == 'undefined' || response.selectedIndex == 0) { cb(new Error('Input canceled.')); } else { cb(null, response.selectedIndex - 1); } } else { if(err || typeof response.selectedIndex == 'undefined') { cb(new Error('Input canceled.')); } else { cb(null, response.selectedIndex); } } }); } else if(typeof input == 'object' && typeof hide == 'string') { term.on('key', function( name , matches , data ) { if(name === 'CTRL_C') { cb(new Error('Input canceled.')); } }); term(hide); term.inputField(input, function(err, response) { if(err) { cb(new Error('Input canceled.')); } else { cb(null, response); } }); } } mod._api = require('./_api'); mod._spinner = ora({color: 'blue', text: 'Processing'}); mod._echo = function(input) { mod._spinner.stop(); console.log(input); mod._spinner.start(); }; mod._lock = function(input) { var file = '.zeysdk.sync.json.lock'; if(lockFile.checkSync(file)) { console.log('Error: \nThe .zeysdk.sync.json file is currently locked (another process is being ran).'); process.exit(); } lockFile.lockSync(file); }; // If we are not testing, run the method called if(!process.env.TEST) { mod._lock(); mod._spinner.start(); // if no args or the method doesn't exist, run help // methods that start with an underscore should not be callable if(args.length && args[0].slice(0, 1) != '_' && typeof mod[args[0]] == 'function') { check_files_result = mod._checkFiles(); if(check_files_result) { mod[args[0]](args.slice(1), function(err, contents) { mod._spinner.stop(); if(err) { if(help.messages[err]) { process.stderr.write(help.messages[err]); process.stderr.write('\n'); process.exitCode = 1; } else { process.stderr.write(err.toString()); process.stderr.write('\n'); process.exitCode = 1; } } else { //process.stdout.write('Success: Command completed.'); //process.stdout.write('\n'); if(contents) { process.stdout.write(contents); //process.stdout.write('\n'); } } process.exit(); }); } else { mod._spinner.stop(); process.stderr.write(check_files_result); process.stderr.write('\n'); process.exitCode = 1; process.exit(); } } else { mod._spinner.stop(); mod['help'](args, function(err, contents) { if(err) { process.stderr.write(err.toString()); process.stderr.write('\n'); process.exitCode = 1; } else { process.stdout.write(contents); process.stdout.write('\n'); } process.exit(); }); } } module.exports = mod;