UNPKG

compound-ex4

Version:

Compound-ex4 - MVC framework for NodeJS (ExpressJs 4 version), fork compoundjs(https://github.com/1602/compound)

152 lines (139 loc) 4.17 kB
#!/usr/bin/env node 'use strict'; var fs = require('fs'); var clc = require('cli-color'); var logy = { error: clc.red.bold, warn: clc.yellowBright, notice: clc.cyanBright, passed: clc.greenBright }; try { let _package = require(process.cwd() + '/package.json'); if (_package && !_package.main) { console.log('Please fill `main` field in your `package.json` file'); process.exit(); } var instantiateApp = require(process.cwd()); } catch (e) { var instantiateApp = null; } var app; var compound; if (typeof instantiateApp === 'function') { app = instantiateApp(); compound = app.compound; } if (!compound) { var Compound = require('../').Compound; compound = new Compound(); } compound.init(); var args = process.argv.slice(2); var exitAfterAction = true; var command = args.shift(); switch (command) { default: case 'h': case '-h': case 'help': if (command && command !== 'help' && command !== 'h') { var found = false; Object.keys(compound.tools).forEach(runner(compound.tools)); if (found) { break; } } var topic = args.shift(); if (topic) { showMan(topic); break; } var help = [ logy.passed('------------------------------------------------------------'), logy.passed('Compoundjs-ex4 framework version ' + compound.version), logy.passed('------------------------------------------------------------'), 'Usage: compound command [argument(s)]\n', 'Commands:' ]; var commands = [ ['h', '-h', 'help [topic]', 'Display compound man page'], ['i', '-i', 'init', 'Initialize compound app'], ['g', '-g', 'generate [smth]', 'Generate something awesome'] ]; Object.keys(compound.tools).forEach(function (cmd) { var h = compound.tools[cmd].help; if (h) { commands.push([h.shortcut || '', h.usage || cmd, h.description]); } }); var maxLen = 0; var addSpaces = compound.utils.addSpaces; commands.forEach(function (cmd) { if (cmd[1].length > maxLen) { maxLen = cmd[1].length; } }); commands.forEach(function (cmd) { help.push(' ' + addSpaces(cmd[0] + ',', 4) + addSpaces(cmd[1], maxLen + 1) + cmd[2]); }); compound.generators.init(compound, args); help.push(logy.passed('------------------------------------------------------------')); help.push('\nAvailable generators:\n'); help.push(' ' + compound.generators.list()); console.info(help.join('\n')); break; case 'i': case '-i': case 'init': compound.generators.init(compound); compound.generators.perform('app', args); break; case 'g': case '-g': case 'generate': var what = args.shift(); compound.generators.init(compound); if (typeof what === 'undefined' || what == null) { console.log('Generator not specified, available generators: ', compound.generators.list()); } else { exitAfterAction = !compound.generators.perform(what, args); } break; case 'v': case '-v': case '--version': console.log(compound.version); break; } if (exitAfterAction) { process.exit(0); } function showMan(topic) { var manDir = require('path').resolve(__dirname + '/../man'); require('child_process').spawn( 'man', [manDir + '/' + topic + '.3'], { customFds: [0, 1, 2], env: process.env, cwd: process.cwd() } ); } function runner(base) { return function (cmd) { if (!base) { return false; } var c = base[cmd]; if (cmd === command || (c && c.help && c.help.shortcut === command)) { if (cmd !== 'server' && cmd !== 's') { compound.app.enable('tools'); } exitAfterAction = false; c(compound, args); found = true; } } } /*vim ft:javascript*/