UNPKG

stratumn-cli

Version:
200 lines (161 loc) 6.64 kB
'use strict'; 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); }