UNPKG

easy-templates

Version:

easy-templates - A library for creating various templates easily and efficiently using NPX.

102 lines (101 loc) 7.13 kB
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; import * as fs from "fs"; import { exec } from "child_process"; import spawn from "cross-spawn"; function tsExpressSequeliseDotenvNodemonServerFolderStruct(_a) { var packageManager = _a.packageManager, appAuthor = _a.appAuthor, appDescription = _a.appDescription, appLicense = _a.appLicense, appName = _a.appName; var packageJsonContent = "{\n\t\"name\": \"".concat(appName, "\",\n\t\"version\": \"1.0.0\",\n\t\"description\": \"").concat(appDescription, "\",\n\t\"author\": \"").concat(appAuthor, "\",\n\t\"keywords\": [],\n\t\"license\": \"").concat(appLicense, "\",\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n\t\t\"dev\": \"nodemon src/server.ts\",\n\t\t\"build\": \"tsc\",\n\t\t\"start\": \"node dist/server.js\"\n\t},\n\t\"dependencies\": {},\n\t\"devDependencies\": {}\n}"); var readmeContent = "#MY app"; var gitIgnoreContent = "node_modules\n.env\n*.jpg\n*.png\n*.gif\njunk.js\npull-server.sh\nsync.sh\ndb.sqlite"; var appJsFile = "import express, { Express, Request, Response } from 'express';\n\nclass App {\n\tpublic app: Express;\n\n\tconstructor() {\n\t\tthis.app = express();\n\n\t\t// Rota de exemplo\n\t\tthis.app.get('/', (req: Request, res: Response) => {\n\t\t\tres.send('Hello, World!');\n\t\t});\n\t}\n}\n\nexport default new App().app;\n"; var serverJsFile = "import app from './app';\n\nconst PORT: number = Number(process.env.APP_PORT) || 3000;\n\napp.listen(PORT, () => {\n\tconsole.log(`Server is running on port ${PORT}`);\n});"; var envFileExample = "DATABASE='api_database'\nDATABASE_HOST='127.0.0.1'\nDATABASE_PORT=3306\nDATABASE_USERNAME='root'\nDATABASE_PASSWORD='root'\n\nTOKEN_SECRET='sua_secret_key_aqui'\nTOKEN_EXPIRATION=7d\n\nAPP_PORT=3000\nAPP_URL=http://localhost:3000"; var sequelizeFile = "const { resolve } = require('path');\n\nmodule.exports = {\n\tconfig: resolve(__dirname, 'src', 'config', 'database.js'),\n\t'models-path': resolve(__dirname, 'src', 'models'),\n\t'migrations-path': resolve(__dirname, 'src', 'database', 'migrations'),\n\t'seeders-path': resolve(__dirname, 'src', 'database','seeds'),\n}"; var nodemonFile = "{\n\t\"execMap\": {\n\t\t\"ts\": \"node -r ts-node/register\"\n\t}\n}"; var tsconfigJsonFile = "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"es6\",\n\t\t\"module\": \"commonjs\",\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\",\n\t\t\"strict\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"moduleResolution\": \"node\",\n\t\t\"resolveJsonModule\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"strictPropertyInitialization\": false,\n\t\t\"strictNullChecks\": false,\n\t\t\"removeComments\": true,\n\t\t\"allowJs\": true\n\t},\n}"; var folderName = appName; if (fs.existsSync(folderName)) { fs.rmSync(folderName, { recursive: true, force: true }); } fs.mkdirSync(folderName); fs.mkdirSync(folderName + "/src"); fs.mkdirSync(folderName + "/src/configs"); fs.mkdirSync(folderName + "/src/controllers"); fs.mkdirSync(folderName + "/src/database"); fs.mkdirSync(folderName + "/src/middlewares"); fs.mkdirSync(folderName + "/src/models"); fs.mkdirSync(folderName + "/src/routes"); fs.writeFileSync(folderName + "/src/app.ts", appJsFile); fs.writeFileSync(folderName + "/src/server.ts", serverJsFile); fs.mkdirSync(folderName + "/uploads"); fs.mkdirSync(folderName + "/uploads/images"); fs.writeFileSync(folderName + "/.env", envFileExample); fs.writeFileSync(folderName + "/.gitignore", gitIgnoreContent); fs.writeFileSync(folderName + "/.sequelizerc", sequelizeFile); fs.writeFileSync(folderName + "/nodemon.json", nodemonFile); fs.writeFileSync(folderName + "/package.json", packageJsonContent); fs.writeFileSync(folderName + "/README.md", readmeContent); fs.writeFileSync(folderName + "/tsconfig.json", tsconfigJsonFile); var installDependencies, installDevDependencies = ["install"]; var dependencies = ["express", "cors", "dotenv", "helmet", "sequelize"]; var devDependencies = [ "nodemon", "sequelize-cli", "@types/express", "@types/node", "ts-node", "typescript", ]; switch (packageManager) { case "yarn": installDependencies = __spreadArray(["add"], dependencies, true); installDevDependencies = __spreadArray(["add", "--dev"], devDependencies, true); break; default: installDependencies = __spreadArray(["install"], dependencies, true); installDevDependencies = __spreadArray(["install", "save-dev"], devDependencies, true); break; } var child = spawn(packageManager, installDependencies, { cwd: folderName, stdio: "inherit" }); child.on("exit", function (code) { if (code === 0) { var child2devDep = spawn(packageManager, installDevDependencies, { cwd: folderName, stdio: "inherit", }); child2devDep.on("exit", function (code) { if (code === 0) { console.log("\nFolder structure created and dependencies installed successfully\n"); console.log("# My App\n\nThis is my app.\n\n## Getting Started\n\nTo get started, run the following commands:\n\n### npm start\n\n### 'npm run dev'\n\n### 'npm run build'\n\n### yarn start\n\n### yarn dev\n\n### yarn build\n\nThen, open [http://localhost:3000] to view it in the browser.\n\n## License Gabriel Logan Copyright 2023\n\n## Happy hacking (: \n"); exec(packageManager === "npm" ? "cd ".concat(folderName, " && npm run lint") : "cd ".concat(folderName, " && yarn lint")); var child2 = spawn("cd", [folderName]); child2.on("exit", function (code) { if (code === 0) { console.log("Run npm start or yarn start - ".concat(folderName, " directory")); } else { console.error("Error navigating to the ".concat(folderName, " directory")); } }); } else { console.error("Error running '".concat(packageManager, " install' with exit code ").concat(code)); } }); } else { console.error("Error running '".concat(packageManager, " install' with exit code ").concat(code)); } }); } export default tsExpressSequeliseDotenvNodemonServerFolderStruct;