UNPKG

composr-cli

Version:
458 lines (397 loc) 11.6 kB
#!/usr/bin/env node 'use strict'; var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _commandLineArgs = require('command-line-args'); var _commandLineArgs2 = _interopRequireDefault(_commandLineArgs); var _safe = require('colors/safe'); var _safe2 = _interopRequireDefault(_safe); var _jsonfile = require('jsonfile'); var _jsonfile2 = _interopRequireDefault(_jsonfile); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _yamljs = require('yamljs'); var _yamljs2 = _interopRequireDefault(_yamljs); var _prompt = require('prompt'); var _prompt2 = _interopRequireDefault(_prompt); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _simpleSpinner = require('simple-spinner'); var _simpleSpinner2 = _interopRequireDefault(_simpleSpinner); var _login = require('./login'); var _login2 = _interopRequireDefault(_login); var _writeCredentials = require('./writeCredentials'); var _writeCredentials2 = _interopRequireDefault(_writeCredentials); var _status = require('./status'); var _status2 = _interopRequireDefault(_status); var _publish = require('./publish'); var _publish2 = _interopRequireDefault(_publish); var _build = require('./build'); var _build2 = _interopRequireDefault(_build); var _print = require('./print'); var _print2 = _interopRequireDefault(_print); var _cliUi = require('./generators/cli-ui'); var _cliUi2 = _interopRequireDefault(_cliUi); var _bootstrap = require('./generators/bootstrap'); var _bootstrap2 = _interopRequireDefault(_bootstrap); var _asciiArt = require('ascii-art'); var _asciiArt2 = _interopRequireDefault(_asciiArt); var _unpublisher = require('./unpublisher'); var _unpublisher2 = _interopRequireDefault(_unpublisher); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } process.bin = process.title = 'composr-cli'; // Lib modules /** * [getUserHome description] * @return {[type]} [description] */ var getUserHome = function getUserHome() { return process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME']; }; // CONST var USER_HOME_ROOT = getUserHome() + '/.composr'; _prompt2.default.message = _safe2.default.cyan('CompoSR'); _prompt2.default.delimiter = _safe2.default.green('><'); /** * [init description] * @return {[type]} [description] */ var init = function init(options) { //spinner.start() initRC(function (err, result) { //spinner.stop() if (err) _print2.default.error(err); locateComposrJson(function (err, result) { if (err) _print2.default.error(err); _print2.default.ok('CompoSR ready to rock!'); }); }); }; /** * PUBLISH */ var publish = function publish(options) { //spinner.start() initRC(function (err, result) { if (err) _print2.default.error(err); locateComposrJson(function (err, config) { if (err) return _print2.default.error(err); (0, _publish2.default)(config, options); }); }); }; /** * UNPUBLISH */ var unpublish = function unpublish(options) { initRC(function (err, result) { if (err) _print2.default.error(err); locateComposrJson(function (err, config) { if (err) return _print2.default.error(err); (0, _unpublisher2.default)(config, options); }); }); }; /** * Build */ var build = function build() { locateComposrJson(function (err, config) { if (err) return _print2.default.error(err); (0, _build2.default)(config, function (err, results) { if (err) _print2.default.error(err); }); }); }; /** * Get environments status */ var getStatus = function getStatus(options) { locateComposrJson(function (err, obj) { if (err) return _print2.default.error(err); if (obj.environments && Array.isArray(obj.environments)) { var envStatus = obj.environments.map(function (env) { var status_ = '/status'; var urlBase = env.urlBase.replace('{{module}}/v1.0/', 'composr'); if (urlBase.slice(-1) === '/') { status_ = 'status'; } return urlBase + status_; }); (0, _status2.default)(envStatus, _simpleSpinner2.default); } else { _print2.default.info('Unable to find valid environments properties in your local composr.json'); } }); }; /** * [locateComposrJson description]i * @param {Function} next [description] * @return {[type]} [description] */ var locateComposrJson = function locateComposrJson(next) { _jsonfile2.default.readFile(process.cwd() + '/composr.json', function (err, obj) { if (!err) { next(null, obj); } else { var schema = { properties: { name: { message: _safe2.default.cyan('Your project name'), default: _path2.default.basename(process.cwd()), type: 'string' }, subdomain: { message: 'Your domain', default: 'mydomain', type: 'string' }, baseUri: { message: 'Composr Endpoint', default: 'https://composr-int.bqws.io/', type: 'string' }, author: { message: 'Your name', default: _path2.default.basename(getUserHome()), type: 'string' }, version: { message: 'Version', default: '1.0.0', type: 'string' }, source_location: { message: 'Where is my code?', default: 'src/', type: 'string', required: true }, git: { message: 'Git repository url', default: '', type: 'string' }, license: { message: 'License', default: 'MIT', type: 'string' } } }; _prompt2.default.start(); _prompt2.default.get(schema, function (err, result) { if (err) _print2.default.error(err); result.vd_dependencies = {}; //result.domain = DOMAIN //result.id = DOMAIN + '!' + result.name result.environments = []; // creating composr.json _fs2.default.writeFile(process.cwd() + '/composr.json', (0, _stringify2.default)(result, null, 2), function (err) { if (err) return next(err, false); return next(null, result); }); }); } }); }; /** * initRC * @return next */ var initRC = function initRC(next) { if (!_fs2.default.existsSync(USER_HOME_ROOT)) _fs2.default.mkdirSync(USER_HOME_ROOT); locateRc(false, next); }; /** * [locateRc description] * @return {[type]} [description] */ var locateRc = function locateRc(rewrite, next) { _fs2.default.readFile(USER_HOME_ROOT + '/.composrc', 'utf8', function (err, credentialsYml) { if (err || rewrite) { // start prompt _prompt2.default.start(); // _prompt2.default.get([{ name: 'clientId', required: true, conform: function conform(value) { return true; } }, { name: 'clientSecret', required: true, conform: function conform(value) { return true; } }, { name: 'scopes', required: true, conform: function conform(value) { return true; } }, { name: 'urlBase', required: true, conform: function conform(value) { return true; } }], function (err, result) { if (err) return _print2.default.error(err); var credentials = { clientId: result.clientId || null, clientSecret: result.clientSecret || null, scopes: result.scopes || null, urlBase: result.urlBase || null }; loginClient(credentials, next); }); } else { loginClient(_yamljs2.default.parse(credentialsYml), next); } }); }; /** * [login description] * @param {[type]} credentials [description] * @return {[type]} [description] */ var loginClient = function loginClient(credentials, next) { (0, _login2.default)(credentials, function (err, creds, domain) { if (err) { _print2.default.error(err); return next(err, null); } else { _print2.default.ok('Credentials verified... OK'); process.env.ACCESS_TOKEN = creds.accessToken; return (0, _writeCredentials2.default)(USER_HOME_ROOT + '/.composrc', creds, next); } }); }; function startCommandLine() { /** * ------------------ * CLI INITIALIZATION * ------------------ */ var cli = (0, _commandLineArgs2.default)([{ name: 'publish', alias: 'p', type: Boolean }, { name: 'unpublish', alias: 'u', type: Boolean }, { name: 'init', alias: 'i', type: Boolean }, { name: 'status', alias: 's', type: Boolean }, { name: 'generate', alias: 'g', type: Boolean, defaultOption: false }, { name: 'help', alias: 'h', type: Boolean, defaultOption: true }, { name: 'phrases', type: String, multiple: true }, { name: 'version', alias: 'v', type: String }, { name: 'env', alias: 'e', type: String, multiple: true }, { name: 'verbose', alias: 'd', type: Boolean }, { name: 'build', alias: 'b', type: Boolean }, { name: 'force', alias: 'f', type: Boolean }, { name: 'login', alias: 'l', type: Boolean }, { name: 'new', alias: 'n', type: Boolean }]); var options = cli.parse(); if (options.init === true) { _print2.default.ok('Initialization ...'); init(options); } else if (options.build === true) { _print2.default.ok('Building definitions ...'); build(options); } else if (options.publish === true) { _print2.default.ok('Publish Loading ...'); publish(options); } else if (options.unpublish === true) { _print2.default.ok('Unpublish Loading ...'); unpublish(options); } else if (options.status === true) { _print2.default.ok('Loading environments status ...'); getStatus(options); } else if (options.new === true) { _print2.default.ok('Creating project ...'); (0, _bootstrap2.default)(null, function () { _print2.default.ok('Your project is built'); }); } else if (options.generate === true) { _print2.default.ok('Launching generator ...'); locateComposrJson(function (err, config) { if (err) return _print2.default.error(err); (0, _cliUi2.default)(config); }); } else if (options.help === true) { console.log(cli.getUsage()); } else if (options.login === true) { locateRc(true, function (err, creds) { _print2.default.ok('You are logged successfully'); }); } else { salute(); //dashboard() } /** * uncaughtException handler */ process.on('uncaughtException', function (err) { _print2.default.error('Caught exception: ' + err); }); } var salute = function salute() { _asciiArt2.default.font('Composr', 'Doom', 'bright_green', function (rendered) { console.log(rendered); console.log('Composr is a command line utility for bootstrapping your own composr projects'); console.log('Use -h to see the options. If you want to bootstrap a new project use composr -g'); console.log('-----------------------------------'); console.dir({ version: '0.5.0', madeby: 'BQ' }); }); }; module.exports = { cli: startCommandLine, build: build };