zeysdk
Version:
SDK for ZeyOS
174 lines (162 loc) • 4.65 kB
JavaScript
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;