carvalholeo/generator-dh

View on GitHub
bin/express-cli.min.js

Summary

Maintainability
A
0 mins
Test Coverage
#!/usr/bin/env node
"use strict";var _require=require("commander"),program=_require.program;var sortedObject=require("sorted-object");var _require2=require("path"),join=_require2.join,resolve=_require2.resolve,sep=_require2.sep;var _require3=require("fs-extra"),mkdirpSync=_require3.mkdirpSync,readFileSync=_require3.readFileSync,readdirSync=_require3.readdirSync;var _require4=require("minimatch"),filter=_require4.filter;var _require5=require("util"),inspect=_require5.inspect;var ejs=require("ejs");var around=require("../dist/utils/around");var before=require("../dist/utils/before");var confirm=require("../dist/utils/confirm");var write=require("../dist/utils/write");var createAppName=require("../dist/utils/createAppName");var emptyDirectory=require("../dist/utils/emptyDirectory");var launchedFromCmd=require("../dist/utils/launchedFromCmd");var renamedOption=require("../dist/utils/renamedOption");var silentInstallation=require("../dist/silentInstallation");var exit=process.exit;var _require6=require("../dist/utils/consts"),MODE_0755=_require6.MODE_0755,VERSION=_require6.VERSION,TEMPLATE_DIR=_require6.TEMPLATE_DIR;around(program,"optionMissingArgument",function(fn,args){program.outputHelp();fn.apply(this,args);return{args:[],unknown:[]}});before(program,"outputHelp",function(){this._helpShown=true});before(program,"unknownOption",function(){this._allowUnknownOption=this._helpShown;if(!this._helpShown){program.outputHelp()}});program.storeOptionsAsProperties().name("express-dh").version(VERSION,"    --version").usage("[opcoes] [dir]").option("-i, --integrador","adiciona os pacotes usados no projeto integrador").option("-e, --ejs","adiciona suporte \xE0 engine EJS",renamedOption("--ejs","--view=ejs")).option("    --pug","adiciona suporte \xE0 engine PUG",renamedOption("--pug","--view=pug")).option("    --hbs","adiciona suporte \xE0 engine Handlebars",renamedOption("--hbs","--view=hbs")).option("-H, --hogan","adiciona suporte \xE0 engine Hogan.js",renamedOption("--hogan","--view=hogan")).option("-v, --view <engine>","adiciona suporte \xE0 engine <engine> (dust|ejs|hbs|hjs|jade|pug|twig|vash) (o padr\xE3o \xE9 PUG)").option("    --no-view","usa HTML est\xE1tico ao inv\xE9s de template engine").option("-c, --css <engine>","adiciona suporte \xE0 engine CSS <engine> (less|stylus|compass|sass) (o padr\xE3o \xE9 CSS puro, texto plano)").option("    --git","adiciona .gitignore").option("    --dotenv","adiciona o pacote dotenv, para trabalhar com vari\xE1veis de ambiente. Chama automaticamente --git").option("-s, --silent","executa instala\xE7\xE3o silenciosa (entra no diret\xF3rio, instala as depend\xEAncias e faz o primeiro commit)").option("-a, --api","usar um template de web api sem uma view engine").option("-f, --force","for\xE7a a cria\xE7\xE3o em diret\xF3rios n\xE3o-vazios").parse(process.argv);if(typeof program.view==="undefined"){program.view=true}main();function createApplication(name,dir){console.log();var pkg={name:name,version:"0.0.0","private":true,scripts:{start:"node ./bin/www"},dependencies:{debug:"~4.3.1",express:"~4.17.1"},devDependencies:{}};var app=loadTemplate("js/app.js");var www=loadTemplate("js/www");www.locals.name=name;app.locals.localModules=Object.create(null);app.locals.modules=Object.create(null);app.locals.mounts=[];app.locals.uses=[];app.locals.dotenv=false;app.locals.modules.logger="morgan";app.locals.uses.push("logger('dev')");pkg.dependencies.morgan="~1.10.0";app.locals.uses.push("express.json()");app.locals.uses.push("express.urlencoded({ extended: false })");app.locals.modules.cookieParser="cookie-parser";app.locals.uses.push("cookieParser()");pkg.dependencies["cookie-parser"]="~1.4.5";if(dir!=="."){mkdir(dir,".")}mkdir(dir,"public");mkdir(dir,"public/javascripts");mkdir(dir,"public/images");mkdir(dir,"public/stylesheets");if(program.integrador){pkg.dependencies["express-session"]="~1.17.1";pkg.dependencies["express-validator"]="~6.10.0";pkg.dependencies["method-override"]="~3.0.0";pkg.dependencies.sequelize="~6.6.2";pkg.dependencies.mysql2="~2.2.5";pkg.dependencies.mariadb="~2.5.3";pkg.dependencies.axios="~0.21.1";pkg.dependencies.bcrypt="~5.0.1";pkg.dependencies.multer="~1.4.2";pkg.devDependencies.nodemon="~2.0.7";pkg.devDependencies["sequelize-cli"]="~6.2.0";app.locals.modules.session="express-session";app.locals.uses.push("session({\n  secret: 'senha super secreta',\n  resave: true,\n  saveUninitialized: true,\n})");app.locals.modules.methodOverride="method-override";app.locals.uses.push("methodOverride(\"_method\")");pkg.scripts.dev="npx nodemon ./bin/www";program.git=true;program.view="ejs"}if(program.dotenv){program.git=true;app.locals.dotenv=true;pkg.dependencies.dotenv="~8.2.0";copyTemplate("js/env",join(dir,".env"));copyTemplate("js/env.example",join(dir,".env.example"))}if(program.silent){program.git=true}var stylesheetDirectory="".concat(dir,"/public/stylesheets");switch(program.css){case"less":copyTemplateMulti("css",stylesheetDirectory,"*.less");break;case"stylus":copyTemplateMulti("css",stylesheetDirectory,"*.styl");break;case"compass":copyTemplateMulti("css",stylesheetDirectory,"*.scss");break;case"sass":copyTemplateMulti("css",stylesheetDirectory,"*.sass");break;default:copyTemplateMulti("css",stylesheetDirectory,"*.css");break;}mkdir(dir,"routes");if(program.api){copyTemplateMulti("js/routes/api","".concat(dir,"/routes"),"*.js")}else{copyTemplateMulti("js/routes","".concat(dir,"/routes"),"*.js")}if(program.view){mkdir(dir,"views");pkg.dependencies["http-errors"]="~1.8.0";var viewsDirectory="".concat(dir,"/views");switch(program.view){case"dust":copyTemplateMulti("views",viewsDirectory,"*.dust");break;case"ejs":copyTemplateMulti("views",viewsDirectory,"*.ejs");break;case"hbs":copyTemplateMulti("views",viewsDirectory,"*.hbs");break;case"hjs":copyTemplateMulti("views",viewsDirectory,"*.hjs");break;case"pug":copyTemplateMulti("views",viewsDirectory,"*.pug");break;case"twig":copyTemplateMulti("views",viewsDirectory,"*.twig");break;case"vash":copyTemplateMulti("views",viewsDirectory,"*.vash");break;}}else if(program.api){pkg.dependencies["http-errors"]="~1.8.0";pkg.dependencies["express-validator"]="~6.10.0";pkg.dependencies.jsonwebtoken="^8.5.1";pkg.dependencies.helmet="^4.4.1";pkg.dependencies.cors="^2.8.5"}else{copyTemplate("js/index.html",join(dir,"public/index.html"))}switch(program.css){case"compass":app.locals.modules.compass="node-compass";app.locals.uses.push("compass({ mode: 'expanded' })");pkg.dependencies["node-compass"]="0.2.4";break;case"less":app.locals.modules.lessMiddleware="less-middleware";app.locals.uses.push("lessMiddleware(path.join(__dirname, 'public'))");pkg.dependencies["less-middleware"]="~3.1.0";break;case"sass":app.locals.modules.sassMiddleware="node-sass-middleware";app.locals.uses.push("sassMiddleware({\n  src: path.join(__dirname, 'public'),\n  dest: path.join(__dirname, 'public'),\n  indentedSyntax: true, // true = .sass and false = .scss\n  sourceMap: true\n})");pkg.dependencies["node-sass-middleware"]="0.11.0";break;case"stylus":app.locals.modules.stylus="stylus";app.locals.uses.push("stylus.middleware(path.join(__dirname, 'public'))");pkg.dependencies.stylus="0.54.8";break;}if(program.api){app.locals.localModules.apiRouter="./routes/values";app.locals.mounts.push({path:"/api",code:"apiRouter"})}else{app.locals.localModules.indexRouter="./routes/index";app.locals.mounts.push({path:"/",code:"indexRouter"});app.locals.localModules.usersRouter="./routes/users";app.locals.mounts.push({path:"/users",code:"usersRouter"})}switch(program.view){case"dust":app.locals.modules.adaro="adaro";app.locals.view={engine:"dust",render:"adaro.dust()"};pkg.dependencies.adaro="~1.0.4";break;case"ejs":app.locals.view={engine:"ejs"};pkg.dependencies.ejs="~3.1.6";break;case"hbs":app.locals.view={engine:"hbs"};pkg.dependencies.hbs="~4.1.1";break;case"hjs":app.locals.view={engine:"hjs"};pkg.dependencies.hjs="~0.0.6";break;case"pug":app.locals.view={engine:"pug"};pkg.dependencies.pug="3.0.2";break;case"twig":app.locals.view={engine:"twig"};pkg.dependencies.twig="~1.15.4";break;case"vash":app.locals.view={engine:"vash"};pkg.dependencies.vash="~0.13.0";break;default:app.locals.view=false;break;}app.locals.api=program.api;app.locals.uses.push("express.static(path.join(__dirname, 'public'))");if(program.git){copyTemplate("js/gitignore",join(dir,".gitignore"))}pkg.dependencies=sortedObject(pkg.dependencies);write(join(dir,"app.js"),app.render());write(join(dir,"package.json"),"".concat(JSON.stringify(pkg,null,2),"\n"));mkdir(dir,"bin");write(join(dir,"bin/www"),www.render(),MODE_0755);var prompt=launchedFromCmd()?">":"$";if(program.silent){silentInstallation(dir)}else{if(dir!=="."){console.log();console.log("   change directory:");console.log("     %s cd %s",prompt,dir)}console.log();console.log("   install dependencies:");console.log("     %s npm install",prompt);console.log();console.log("   run the app:");if(launchedFromCmd()){console.log("     %s SET DEBUG=%s:* & npm start",prompt,name)}else{console.log("     %s DEBUG=%s:* npm start",prompt,name)}}console.log()}function main(){var destinationPath=program.args.shift()||".";var appName=createAppName(resolve(destinationPath))||"hello-world";if(program.view===true){if(program.ejs){program.view="ejs"}if(program.hbs){program.view="hbs"}if(program.hogan){program.view="hjs"}if(program.pug){program.view="pug"}}if(program.view===true&&!program.api){program.view="pug"}else if(program.api){program.view=false}emptyDirectory(destinationPath,function(empty){if(empty||program.force){createApplication(appName,destinationPath)}else{confirm("a pasta destino n\xE3o est\xE1 vazio, deseja continuar? [s/N] ",function(ok){if(ok){process.stdin.destroy();createApplication(appName,destinationPath)}else{console.error("cancelando");exit(1)}})}})}function copyTemplate(from,to){write(to,readFileSync(join(TEMPLATE_DIR,from),"utf-8"))}function loadTemplate(name){var contents=readFileSync(join(__dirname,"..","templates","".concat(name,".ejs")),"utf-8");var locals=Object.create(null);function render(){return ejs.render(contents,locals,{escape:inspect})}return{locals:locals,render:render}}function copyTemplateMulti(fromDir,toDir,nameGlob){readdirSync(join(TEMPLATE_DIR,fromDir)).filter(filter(nameGlob,{matchBase:true})).forEach(function(name){copyTemplate(join(fromDir,name),join(toDir,name))})}function mkdir(base,dir){var loc=join(base,dir);console.log("   \x1B[36mcreate\x1B[0m : ".concat(loc).concat(sep));mkdirpSync(loc,MODE_0755)}