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
JavaScript
;
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*/