c9-core/plugins/c9.cli.publish/list.js

133 wiersze
4.4 KiB
JavaScript

define(function(require, exports, module) {
main.consumes = ["Plugin", "cli_commands", "api"];
main.provides = ["cli.list"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var cmd = imports.cli_commands;
var api = imports.api;
var BASICAUTH = process.env.C9_TEST_AUTH;
var verbose = false;
var LIGHTBlUE = "\x1b[01;94m";
var RESETCOLOR = "\x1b[0m";
var PADDING = 2;
// Set up basic auth for api if needed
if (BASICAUTH) api.basicAuth = BASICAUTH;
/***** Initialization *****/
var plugin = new Plugin("Ajax.org", main.consumes);
// var emit = plugin.getEmitter();
var loaded;
function load() {
if (loaded) return;
loaded = true;
cmd.addCommand({
name: "list",
info: " Lists all available packages.",
usage: "[--json]",
options: {
"json": {
description: "",
"default": false,
"boolean": true
},
},
check: function(argv) {},
exec: function(argv) {
verbose = argv["verbose"];
list(argv.json, function(err) {
if (err)
console.error(err.message || err);
process.exit(err ? 1 : 0);
});
}
});
}
/***** Methods *****/
function stringifyError(err) {
return (verbose ? JSON.stringify(err, 4, " ") : (typeof err == "string" ? err : err.message));
}
function pad(str, nr) {
return str + Array(Math.max(0, nr - str.length)).join(" ");
}
function list(asJson, callback) {
callback = callback || function() {};
api.packages.get("", function(err, list) {
if (err) {
console.error("ERROR: Could not get list: ", stringifyError(err));
return callback(err);
}
// TODO if tty.isatty(process.stdout) use process.stdout.columns process.stdout.rows
// to give nicely wrapped output
if (asJson) {
console.log(JSON.stringify(list, 4, " "));
return callback(null, list);
}
else {
var max = [0, 0, 0, 0];
list.forEach(function(item) {
max[0] = Math.max(max[0], item.name.length);
max[1] = Math.max(max[1], Math.min(50, item.description.split(".")[0].length));
max[2] = Math.max(max[2], item.name.length + 33);
max[3] = Math.max(max[3], (item.website || item.repository.url).length);
});
list.forEach(function(item) {
console.log(
pad(item.name, max[0] + PADDING),
item.description.split(".")[0].replace(/[\r\n]/g, ""));
// pad(item.description.split(".")[0].replace(/[\r\n]/g, "-"), max[1] + PADDING));
// LIGHTBlUE + pad("https://c9.io/packages/" + item.name, max[2] + PADDING) + RESETCOLOR,
// item.website || item.repository.url); // do not pad last item
});
return callback(null, list);
}
});
}
/***** Lifecycle *****/
plugin.on("load", function() {
load();
});
plugin.on("enable", function() {
});
plugin.on("disable", function() {
});
plugin.on("unload", function() {
loaded = false;
verbose = false;
});
/***** Register and definfe API *****/
/**
*
**/
plugin.freezePublicAPI({
/**
*
*/
list: list
});
register(null, {
"cli.list": plugin
});
}
});