UNPKG

nt-arcane

Version:

App creator for arcane framework.

136 lines (124 loc) 2.83 kB
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: 'create', alias: 'c', 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); } }; var project_location = process.cwd(); if(options.src) { project_location = path.resolve(options.src.replace(/\/$/g, '')); } var default_name = options.src.split('/').slice(-1)[0]; if(options.create) { create_project(options); } else { inquirer.prompt([ { type: 'list', name: 'create', message: 'Select Project type', choices: [ 'Angular', 'API', 'Basic Web', // new inquirer.Separator(), // 'Custom' ] } ], create_project); } function create_project(answers) { var target_app = null; switch(answers.create.toLowerCase()) { case 'angular': target_app = __dirname + '/../files/applications/angular.web.app'; break; case 'api': target_app = __dirname + '/../files/applications/api.web.app'; break; case 'basic web': target_app = __dirname + '/../files/applications/basic.web.app'; break; case 'custom': break; default: console.log('Invalid project type.'); } if(target_app) { create_project_information(project_location, function(package) { create_directory(project_location); var unzipExtractor = unzip.Extract({ path: project_location }); var fscrs = fs.createReadStream(target_app); fscrs.pipe(unzipExtractor); unzipExtractor.on('close', update_package(package)); }); } } function create_project_information(path, cb) { inquirer.prompt([ { type: 'input', name: 'name', message: 'Project Name', default: default_name }, { type: 'input', name: 'description', message: 'Description' }, { type: 'input', name: 'version', message: 'Version', default: '1.0.0' }, { type: 'input', name: 'author', message: 'Author' }, ], cb); } function update_package(package) { return function() { var json_path = project_location + '/package.json'; var json = require(json_path); for(var i in json) { if(!package[i]) { package[i] = json[i]; } } fs.writeFileSync(json_path, JSON.stringify(package, null, 4)); process.chdir(project_location); npm.load(package, function(er) { if (er) throw er; npm.commands.install(function (er, data) { // console.log(data); }); npm.on('log', function(message) { console.log(message); }); }); } }