stratumn-cli
Version:
CLI tools for Stratumn
200 lines (161 loc) • 6.64 kB
JavaScript
;
var _util = require('util');
var _util2 = _interopRequireDefault(_util);
var _child_process = require('child_process');
var _commander = require('commander');
var _commander2 = _interopRequireDefault(_commander);
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _readPackageSync = require('../utils/readPackageSync');
var _readPackageSync2 = _interopRequireDefault(_readPackageSync);
var _get = require('../utils/get');
var _get2 = _interopRequireDefault(_get);
var _config = require('../config');
var _config2 = _interopRequireDefault(_config);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function collect(val, memo) {
memo.push(val);
return memo;
}
_commander2.default.version((0, _readPackageSync2.default)('version'))
/*eslint-disable*/
.usage('<app-name> [show-app|create-map|show-map|show-link|create-link|show-branches] [mapId|hash] [func] [...args]')
/*eslint-enable*/
.option('-x, --exec', 'execute route').option('-p, --pretty', 'pretty output when executing').option('-d, --debug', 'add debug flag to urls').option('-t, --tags <string>', 'filter by tags (can be used multiple times)', collect, []).parse(process.argv);
if (_commander2.default.args.length < 1) {
_commander2.default.help();
}
if (_commander2.default.exec && _commander2.default.args.length > 1) {
_chalk2.default.enabled = false;
}
function handleError(err) {
process.stderr.write(err.message + '\n', function () {
return process.exit(1);
});
}
var baseUrl = _util2.default.format(_config2.default.applicationUrl, _commander2.default.args[0]);
function makeRoute(method, path, args, desc) {
var parsedArgs = args ? args.map(function (val) {
if (['null', 'true', 'false'].indexOf(val) > -1 || val.match(/^[0-9]+$/)) {
/*eslint-disable*/
return eval(val);
/*eslint-enable*/
}
return val;
}) : [];
var str = '';
str += _chalk2.default.cyan('curl -X ' + method);
str += _chalk2.default.cyan(' "' + baseUrl + path);
if (_commander2.default.debug) {
str += _chalk2.default.cyan('?debug');
}
str += _chalk2.default.cyan('"');
if (parsedArgs.length) {
str += _chalk2.default.cyan(' -d ');
str += _chalk2.default.green.bold('"' + JSON.stringify(parsedArgs).replace(/"/g, '\\"') + '"');
}
if (desc) {
str += '\n\t' + desc + '\n';
}
return str;
}
if (_commander2.default.args.length > 1) {
var route = void 0;
var path = void 0;
switch (_commander2.default.args[1]) {
case 'show-app':
if (_commander2.default.args.length !== 2) {
_commander2.default.help();
}
route = makeRoute('GET', '/');
break;
case 'show-map':
if (_commander2.default.args.length !== 3) {
_commander2.default.help();
}
path = '/maps/' + _commander2.default.args[2];
if (_commander2.default.tags) {
path += '?tags=' + _commander2.default.tags.join('&tags=');
}
route = makeRoute('GET', path);
break;
case 'create-map':
route = makeRoute('POST', '/maps', _commander2.default.args.slice(2));
break;
case 'show-link':
if (_commander2.default.args.length !== 3) {
_commander2.default.help();
}
route = makeRoute('GET', '/links/' + _commander2.default.args[2]);
break;
case 'create-link':
if (_commander2.default.args.length < 4) {
_commander2.default.help();
}
route = makeRoute('POST', '/links/' + _commander2.default.args[2] + '/' + _commander2.default.args[3], _commander2.default.args.slice(4));
break;
case 'show-branches':
if (_commander2.default.args.length !== 3) {
_commander2.default.help();
}
path = '/branches/' + _commander2.default.args[2];
if (_commander2.default.tags) {
path += '?tags=' + _commander2.default.tags.join('&tags=');
}
route = makeRoute('GET', path);
break;
default:
handleError(new Error('Unknown route: ' + _commander2.default.args[1]));
}
if (_commander2.default.exec) {
(0, _child_process.exec)(route, {
env: process.env,
cwd: process.cwd()
}, function (err, stdout) {
if (err) {
handleError(err);
return;
}
var output = _commander2.default.pretty ? JSON.stringify(JSON.parse(stdout), null, ' ') : stdout;
process.stdout.write(output + '\n', function () {
return process.exit(0);
});
});
} else {
process.stdout.write(route + '\n', process.exit);
}
} else {
(0, _get2.default)('/', false, _commander2.default.args[0]).then(function (_ref) {
var agentInfo = _ref.agentInfo;
var functions = agentInfo.functions;
var routes = [];
functions.init = functions.init || { args: [] };
routes.push(makeRoute('GET', '/', null, 'Shows application information.'));
routes.push(makeRoute('POST', '/maps', functions.init.args, 'Executes function Agent#init(' + functions.init.args.join(', ') + ') to create a new map.'));
routes.push(makeRoute('GET', '/maps/' + _chalk2.default.green.bold(':mapId') + '?tags=' + _chalk2.default.green.bold(':tag'), null, 'Shows the links (meta only) of the map for the given ID, optionally filter by tags.'));
routes.push(makeRoute('GET', '/links/' + _chalk2.default.green.bold(':hash'), null, 'Shows the link and evidence for the given hash.'));
routes.push(makeRoute('GET', '/branches/' + _chalk2.default.green.bold(':hash') + '?tags=' + _chalk2.default.green.bold(':tag'), null,
/*eslint-disable*/
'Shows the links (meta only) whose previous hash is the given hash, optionally filter by tags.'
/*eslint-enable*/
));
Object.keys(functions).filter(function (name) {
return ['init', 'catchAll'].indexOf(name) === -1;
}).forEach(function (name) {
var func = functions[name];
routes.push(makeRoute('POST', '/links/' + _chalk2.default.green.bold(':hash') + '/' + name, func.args,
/*eslint-disable*/
'Executes function Agent#' + name + '(' + func.args.join(', ') + ') on the link for the given hash.'
/*eslint-enable*/
));
});
if (functions.catchAll) {
routes.push(makeRoute('POST', '/links/' + _chalk2.default.green.bold(':hash') + '/' + _chalk2.default.green.bold('*'), [],
/*eslint-disable*/
'Executes function Agent#catchAll(' + functions.catchAll.args.join(', ') + ') on the given hash for all unhandled functions.'
/*eslint-enable*/
));
}
process.stdout.write(routes.join('\n'), process.exit);
}).catch(handleError);
}