nt-arcane
Version:
App creator for arcane framework.
73 lines (66 loc) • 2.03 kB
JavaScript
var commandLineArgs = require('command-line-args');
var inquirer = require('inquirer');
var path = require('path');
var unzip = require('unzip2');
var fs = require('fs');
var npm = require('npm');
var cli = commandLineArgs([
{name: 'name', alias: 'n', type: String},
{name: 'src', type: String, defaultOption: true}
]);
var options = cli.parse();
var directory_exists = function(path) {
try {
stats = fs.lstatSync(path);
if (stats.isDirectory()) {
return true;
}
} catch (e) {
return false;
}
};
var create_directory = function(path) {
if(!directory_exists(path)) {
fs.mkdirSync(path);
}
};
try {
var json = require(process.cwd() + '/arcane.json');
if(options.name) {
create_controller(options);
} else {
inquirer.prompt([
{
type: 'input',
name: 'name',
message: 'Controller Name'
}
], create_controller);
}
} catch (err) {
console.log('\nWorking directory is not a valid acane project.\n');
}
function create_controller(data) {
create_directory(process.cwd() + '/controller');
var controller = data.name.toLowerCase();
var controller_name = controller.replace(/^./g, function(match) {
return match.toUpperCase();
});
var controller_path = process.cwd() + '/controller/' + controller_name + 'Controller';
if(directory_exists(controller_path)) {
console.log('\nController is already exists.\n');
} else {
var data = fs.readFileSync(__dirname + '/../files/templates/controller.tpl', 'utf-8');
create_directory(controller_path);
data = data.replace(/\{\{name\}\}/g, controller_name);
data = data.replace(/\{\{url\}\}/g, controller);
fs.writeFileSync(controller_path + '/' + controller + '.ts', data);
if(json.modules.indexOf('orm') !== -1) {
create_directory(controller_path + '/models');
}
if(json.modules.indexOf('template') !== -1 || json.modules.indexOf('template-eco') !== -1) {
var view_data = fs.readFileSync(__dirname + '/../files/templates/view.tpl', 'utf-8');
fs.writeFileSync(controller_path + '/view.html', view_data);
}
}
}