UNPKG

gapp

Version:
364 lines (329 loc) 9.24 kB
#!/usr/bin/env node module.exports = (function() { const yeoman = require('yeoman-environment'); const env = yeoman.createEnv(); const args = process.argv; const fs = require('fs'); const request = require('request'); const search = require('node-modules'); const package_names = require("all-the-package-names"); const argv = require('yargs').argv; const shell = require('shelljs'); const exec = shell.exec; const npmCheck = require('npm-check'); const global_dir = require('global-modules'); const express = require('express') const app = express() const modules_installed = function() { return npmCheck({ global: true }) .then(function(modules) { return modules.get('packages'); }); }; var genran = false; function npmInstallPackage(deps, opts, cb) { if (!cb) { cb = opts opts = {} } deps = Array.isArray(deps) ? deps : [deps] opts = opts || opts cb = cb || noop var args = [] if (opts.save) args.push('--save') if (opts.saveDev) args.push('--save-dev') if (opts.global) args.push('-g') if (opts.silent === false) { deps.forEach(function(dep) { process.stdout.write('pkg: ' + dep + '\n') }) } var cliArgs = ['npm i'].concat(args, deps).join(' ') exec(cliArgs, function(err, name) { if (err) return cb(err) cb() }) } function npmUnInstallPackage(deps, opts, cb) { if (!cb) { cb = opts opts = {} } deps = Array.isArray(deps) ? deps : [deps] opts = opts || opts cb = cb || noop var args = [] if (opts.global) args.push('-g') if (opts.silent === false) { deps.forEach(function(dep) { process.stdout.write('pkg: ' + dep + '\n') }) } var cliArgs = ['npm uninstall'].concat(args, deps).join(' ') exec(cliArgs, function(err, name) { if (err) return cb(err) cb() }) } function noop() {} function runGenerator(ran) { var isgen = false; var modules = modules_installed(); var generator = argv.gen; var hasyo = false; if (!ran) { console.log("Let's go! Gapp generator started!"); modules.then(function(response) { for (var i = 0; i < response.length; i++) { if (response[i].moduleName == 'generator-' + generator) { try { env.register(require.resolve(global_dir + '/generator-' + generator + '/generators/app'), 'npm:app'); env.run('npm:app'); genran = true; } catch (e) { try { env.register(require.resolve(global_dir + '/generator-' + generator + '/app'), 'npm:app'); env.run('npm:app'); genran = true; } catch (e) { console.log("Doesn't look like " + argv.gen + " is installed! Let's install it and try to run it!"); genran = false; } } } else if (response.length - 1 == i) { if (!genran) { runGenerator(true); } } if (response[i].moduleName == 'yo') { hasyo = true; } } if (!hasyo) { npmInstallPackage('yo', { global: true }, function(err) {}); } }); } else { npmInstallPackage('generator-' + generator, { global: true }, function(err) { if (!err) { try { env.register(require.resolve(global_dir + '/generator-' + generator + '/generators/app'), 'npm:app'); env.run('npm:app'); } catch (e) { try { env.register(require.resolve(global_dir + '/generator-' + generator + '/app'), 'npm:app'); env.run('npm:app'); genran = true; } catch (e) { console.log(e) } } } else { console.log(err); } }); } } function conditional(args) { if (argv._.length) { var if_return, if_statement, else_return, elseif_return, elseif_statement, if_statement, else_return, conditional_if, conditional_if_else; var statement = argv._.join(' '); var converted_statment = statement.replace(/if/g, '-f').replace(/then/g, '-t').replace(/else/g, '-e'); var end_statement = ''; try { if_statement = converted_statment.match("-f (.*) -t (.*) -e-f")[1]; if_statement = '"' + if_statement.split(' ')[0] + '" ' + if_statement.split(' ')[1] + ' "' + if_statement.split(' ')[2] + '"'; if_return = converted_statment.match("-t (.*) -e-f")[1]; } catch (e) { try { if_statement = converted_statment.match("-f (.*) -t (.*)")[1]; if_return = converted_statment.match("-t (.*)")[1]; if_statement = '"' + if_statement.split(' ')[0] + '" ' + if_statement.split(' ')[1] + ' "' + if_statement.split(' ')[2] + '"'; } catch (e) {} } try { elseif_statement = converted_statment.match("-e-f (.*) -t (.*) -e")[1]; elseif_return = converted_statment.match("-e-f (.*) -t (.*) -e")[2]; elseif_statement = '"' + elseif_statement.split(' ')[0] + '" ' + elseif_statement.split(' ')[1] + ' "' + elseif_statement.split(' ')[2] + '"'; } catch (e) { try { elseif_statement = converted_statment.match("-e-f (.*) -t (.*)")[1]; elseif_return = converted_statment.match("-e-f (.*) -t (.*)")[2]; elseif_statement = '"' + elseif_statement.split(' ')[0] + '" ' + elseif_statement.split(' ')[1] + ' "' + elseif_statement.split(' ')[2] + '"'; } catch (e) {} } try { else_return = converted_statment.match("-e (.*)")[1]; } catch (e) {} return (eval(if_statement) ? shell.exec(if_return) : (eval(elseif_statement) ? shell.exec(elseif_return) : (eval(else_return != undefined) ? shell.exec(else_return) : false))) } } function uninstall() { if (argv.u) { var package_opts = {}; if (!argv.l) { package_opts.global = true; } if (package_names.includes(argv.u)) { console.log('Uninstalling ' + argv.u); npmUnInstallPackage(argv.u, package_opts, function(err) { if (err) { throw err; } else { console.log('Finished uninstalling ' + argv.u); } }); } else { console.log("That module doesn't exist!") } } } function install() { if (argv.i || argv.g || argv.s) { var package_name; var package_opts = {}; if (argv.i && argv.i != true) { package_name = argv.i; } else if (argv.g && argv.g != true) { package_name = argv.g; package_opts.global = true; } else if (argv.s && argv.s != true) { package_name = argv.s; package_opts.save = true; } else if (argv.d && argv.d != true) { package_name = argv.d; package_opts.saveDev = true; } else { package_name = argv.i; package_opts.save = true; } if (package_names.includes(package_name)) { console.log('Installing ' + package_name); npmInstallPackage(package_name, package_opts, function(err) { if (err) { throw err; } else { console.log('Finished installing ' + package_name); } }); } else { console.log("That module doesn't exist!") } } } function run() { if (argv.r) { var strings = ''; if (argv._.length) { strings = argv._.join(' '); } console.log('Running ' + argv.r + ' ' + strings); var proc = shell.exec(argv.r + ' ' + strings); } } function generator() { if (argv.gen) { runGenerator(); } } function serve() { if (argv.serve) { var PORT; if (argv.p) { PORT = parseInt(argv.p); } else { PORT = 3000; } if (!argv.m && !argv.file) { console.log("Message or file required. eg. gapp --serve / --type get --m 'Hey I'm at the get route!' or gapp --serve / --type [get, post, delete, put] --file app/index.html --static app/public"); } else { if (argv.type === 'get') { app.get(argv.serve, function(req, res) { if (argv.file) { res.sendFile(process.cwd() + '/' + argv.file); } else { res.send(argv.m); } }); } else if (argv.type === 'post') { app.post(argv.serve, function(req, res) { if (argv.file) { res.sendFile(process.cwd() + '/' + argv.file); } else { res.send(argv.m); } }); } else if (argv.type === 'delete') { app.delete(argv.serve, function(req, res) { if (argv.file) { res.sendFile(process.cwd() + '/' + argv.file); } else { res.send(argv.m); } }); } else if (argv.type === 'put') { app.put(argv.serve, function(req, res) { if (argv.file) { res.sendFile(process.cwd() + '/' + argv.file); } else { res.send(argv.m); } }); } else { app.get(argv.serve, function(req, res) { if (argv.file) { res.sendFile(process.cwd() + '/' + argv.file); } else { res.send(argv.m); } }); } if (argv.static) { app.use(express.static(process.cwd() + '/' + argv.static)) } app.listen(PORT, function() { console.log('Listening on port 3000!') }); } } else { console.log("Please specify a directory to serve!") } } var gapp = { generator: generator, serve: serve, install: install, uninstall: uninstall, run: run, conditional: conditional }; function map() { if (argv._.length) { gapp.conditional(); } if (argv.serve) { gapp.serve(); } if (argv.i || argv.g || argv.s) { gapp.install(); } if (argv.u) { gapp.uninstall(); } if (argv.r) { gapp.run(); } if (argv.gen) { gapp.generator(); } } return map(); })();