configure-express-app
Advanced tools
Comparing version 3.2.26 to 3.2.27
196
index.js
#!/usr/bin/env node | ||
const createExpressApp = async () => { | ||
const fs = require("fs"); | ||
const prompt = require("prompt-sync")(); | ||
const fs = require('fs'); | ||
const prompt = require('prompt-sync')(); | ||
const mainDir = "./app"; | ||
const mainDir = './app'; | ||
@@ -13,10 +13,10 @@ if (!fs.existsSync(mainDir)) { | ||
} else { | ||
console.log("Already app directory exist"); | ||
console.log('Already app directory exist'); | ||
} | ||
const controllerDir = "./app/controllers"; | ||
const modelDir = "./app/models"; | ||
const routesDir = "./app/routes"; | ||
const configDir = "./config"; | ||
const serviceDir = "./service"; | ||
const middlewaresDir = "./middlewares" | ||
const controllerDir = './app/controllers'; | ||
const modelDir = './app/models'; | ||
const routesDir = './app/routes'; | ||
const configDir = './config'; | ||
const serviceDir = './service'; | ||
const middlewaresDir = './middlewares'; | ||
if (!fs.existsSync(controllerDir)) { | ||
@@ -26,3 +26,3 @@ fs.mkdirSync(controllerDir); | ||
} else { | ||
console.log("Already controller directory exist"); | ||
console.log('Already controller directory exist'); | ||
} | ||
@@ -33,3 +33,3 @@ if (!fs.existsSync(modelDir)) { | ||
} else { | ||
console.log("Already model directory exist"); | ||
console.log('Already model directory exist'); | ||
} | ||
@@ -51,6 +51,5 @@ if (!fs.existsSync(routesDir)) { | ||
//console.log("routes directory created successfully !"); | ||
} else { | ||
console.log('Already routes directory exist'); | ||
} | ||
else { | ||
console.log("Already routes directory exist"); | ||
} | ||
@@ -64,12 +63,12 @@ let ProjectName = ''; | ||
const checkPackageDotJsonExistOrNot = "./package.json"; | ||
const checkPackageDotJsonExistOrNot = './package.json'; | ||
if (!fs.existsSync(checkPackageDotJsonExistOrNot)) { | ||
console.log("\n"); | ||
ProjectName = prompt("Project Name : ").trim().replace(/\s+/g,''); | ||
mainFileName = prompt("Main File Name : ").split('.')[0].trim().replace(/\s+/g,''); | ||
authorName = prompt("Author Name : ").trim(); | ||
description = prompt("Description : ").trim(); | ||
console.log('\n'); | ||
ProjectName = prompt('Project Name : ').trim().replace(/\s+/g, ''); | ||
mainFileName = prompt('Main File Name : ').split('.')[0].trim().replace(/\s+/g, ''); | ||
authorName = prompt('Author Name : ').trim(); | ||
description = prompt('Description : ').trim(); | ||
alterProjectName = "Express App"; | ||
alterMainFilename = "server"; | ||
alterProjectName = 'Express App'; | ||
alterMainFilename = 'server'; | ||
@@ -79,3 +78,3 @@ const packageJsonFileContent = `{ | ||
"version": "1.0.0", | ||
"description": \"${description ? description : ""}\", | ||
"description": \"${description ? description : ''}\", | ||
"main": \"${mainFileName ? mainFileName : alterMainFilename}.js\", | ||
@@ -89,3 +88,3 @@ "scripts": { | ||
}, | ||
"author": \"${authorName ? authorName : ""}\", | ||
"author": \"${authorName ? authorName : ''}\", | ||
"license": "ISC", | ||
@@ -97,36 +96,43 @@ "dependencies": { | ||
}`; | ||
fs.writeFileSync("package.json", packageJsonFileContent); | ||
fs.writeFileSync('package.json', packageJsonFileContent); | ||
console.log(`\nYour Project Name is : ${ProjectName ? ProjectName : alterProjectName}`); | ||
console.log(`Your Main File Name is : ${mainFileName ? mainFileName : alterProjectName}`); | ||
// console.log(`\nYour Project Name is : ${ProjectName ? ProjectName : alterProjectName}`); | ||
console.log(`\nYour Project Name is : ${ProjectName ? ProjectName : alterProjectName}`); | ||
console.log(`Your Main File Name is : ${mainFileName ? mainFileName : alterProjectName}`); | ||
// console.log(`\nYour Project Name is : ${ProjectName ? ProjectName : alterProjectName}`); | ||
console.log("\nIf you want change your projectname means go and change in package.json\n\n"); | ||
console.log('\nIf you want change your projectname means go and change in package.json\n\n'); | ||
} | ||
const config = require("./package.json"); | ||
const config = require('./package.json'); | ||
if (config?.main !== "") { | ||
if (config?.main !== '') { | ||
if (!fs.existsSync(`./${mainFileName ? mainFileName : alterMainFilename}`)) { | ||
const portNumber = prompt('Port Number : ', 8080); | ||
const port = isNaN(portNumber) ? 8080 : parseInt(portNumber); | ||
const portNumber = prompt("Port Number : ", 8080) | ||
const port = isNaN(portNumber) ? 8080 : parseInt(portNumber) | ||
console.log(`Your express app port number is : ${port ? port : 8080}`); | ||
const jsContent = `const express = require('express');\nconst helmet = require("helmet");\nrequire('dotenv').config();\nconst compression = require('compression'); | ||
\nconst app = express()\n\nconst helloWorldRoute = require('./app/routes/helloWorld.route');\nconst { requestId } = require('./service/uuidGenerator');\nconst { consoleWritter } = require('./service/consoleViewer');const notFound = require('./middlewares/notFound'); | ||
const erorrHandler = require('./middlewares/errorHandler');\n\nconst port = process.env.PORT\n | ||
const jsContent = `'use strict';\n\nconst express = require('express');\nconst helmet = require("helmet");\nrequire('dotenv').config();\nconst compression = require('compression'); | ||
\nconst cors = require('cors'); | ||
\nconst hpp = require('hpp'); | ||
\nconst expressMongoanitaize = require('express-mongo-sanitize'); | ||
\nconst app = express(); | ||
\n\nconst helloWorldRoute = require('./app/routes/helloWorld.route');\nconst { requestId } = require('./service/uuidGenerator');\nconst { consoleWritter } = require('./service/consoleViewer');const notFound = require('./middlewares/notFound'); | ||
const erorrHandler = require('./middlewares/errorHandler'); | ||
const { limiter } = require('./middlewares/rateLimiter');\n\nconst port = process.env.PORT\n | ||
process.on('uncaughtException', (error) => { | ||
console.error('Uncaught exception:', error); | ||
}); | ||
process.on('unhandledRejection', (error) => { | ||
}); | ||
process.on('unhandledRejection', (error) => { | ||
console.error('Unhandled rejection:', error); | ||
});\n | ||
app.use(compression({level: 1})) | ||
app.use(requestId) | ||
app.use(helmet()); | ||
app.use(express.json({ limit: '500mb', extended: true })); | ||
});\n | ||
app.use(limiter); | ||
app.use(expressMongoanitaize()); | ||
app.use(hpp()); | ||
app.use('*', cors()); | ||
app.use(compression({level: 1})) | ||
app.use(requestId) | ||
app.use(helmet()); | ||
app.use(express.json({ limit: '500mb', extended: true })); | ||
\napp.use('/api/', helloWorldRoute); | ||
@@ -140,16 +146,16 @@ \napp.get('/', (req, res) => res.send('Hello World!')) | ||
});`; | ||
fs.writeFileSync(`./${mainFileName ? mainFileName : alterMainFilename}.js`, jsContent); | ||
fs.writeFileSync(`./${mainFileName ? mainFileName : alterMainFilename}.js`, jsContent); | ||
const routeContent = `const express = require('express'); | ||
const routeContent = `'use strict';\nconst express = require('express'); | ||
\nconst router = express.Router(); | ||
\nconst helloWorld = require('../controllers/helloWorld.controller'); | ||
\nrouter.get('/helloworld', helloWorld.helloWorld); | ||
\nmodule.exports = router;` | ||
fs.writeFileSync('./app/routes/helloWorld.route.js', routeContent); | ||
\nmodule.exports = router;`; | ||
fs.writeFileSync('./app/routes/helloWorld.route.js', routeContent); | ||
//console.log("\nRoute file created successfully !"); | ||
const controllerContent = `const { logger } = require('../../config/logger');\nconst helloWorld = require('../models/helloWorld.model'); | ||
const controllerContent = `'use strict';\nconst { logger } = require('../../config/logger');\nconst helloWorld = require('../models/helloWorld.model'); | ||
\nexports.helloWorld = async (req, res, next) => {\n\ttry { | ||
\n\t\tlogger.info({requestId: req.id, message: \`ip: \${req.ip} \ \${req.method}/ \${req.originalUrl} helloworld received\`}) | ||
\n\t\tconst data = await helloWorld.helloWorld();\n\t\tres.status(200).json({\n\t\t\tMessage: "Hello World",\n\t\t\tdata: data,\n\t\t});\n\t} catch (error) {\n\t\tnext(error)\n\t}\n};` | ||
\n\t\tconst data = await helloWorld.helloWorld();\n\t\tres.status(200).json({\n\t\t\tMessage: "Hello World",\n\t\t\tdata: data,\n\t\t});\n\t} catch (error) {\n\t\tnext(error)\n\t}\n};`; | ||
@@ -160,7 +166,7 @@ fs.writeFileSync('./app/controllers/helloWorld.controller.js', controllerContent); | ||
const modelContent = `exports.helloWorld = async () => {\n\treturn "Hello World";\n}; | ||
` | ||
fs.writeFileSync('./app/models/helloWorld.model.js', modelContent); | ||
//console.log("\nModel file created successfully !"); | ||
`; | ||
fs.writeFileSync('./app/models/helloWorld.model.js', modelContent); | ||
//console.log("\nModel file created successfully !"); | ||
const loggerContent = `const winston = require('winston'); | ||
const loggerContent = `'use strict';\nconst winston = require('winston'); | ||
require('winston-daily-rotate-file'); | ||
@@ -197,3 +203,3 @@ | ||
module.exports = {logger}` | ||
module.exports = {logger}`; | ||
@@ -203,4 +209,3 @@ fs.writeFileSync('./config/logger.js', loggerContent); | ||
const uuidFunctioncontent = `const uuid = require('uuid')\n | ||
const uuidFunctioncontent = `'use strict';\nconst uuid = require('uuid')\n | ||
/** | ||
@@ -220,4 +225,3 @@ * uuid add in request ( find the sequence of logger and multipurpose ) | ||
const consoleWritter = `const { logger } = require('../config/logger'); | ||
const consoleWritter = `'use strict';\nconst { logger } = require('../config/logger'); | ||
\nconst consoleWritter = (port) => { | ||
@@ -237,8 +241,8 @@ logger.info({message: \`\\n------------------------------------------------- \\n Port running on \${port}\\n -------------------------------------------------\`}) | ||
//.env file write | ||
const envContent = `PORT = ${port ? port : 8080}`; | ||
fs.writeFileSync('./.env', envContent); | ||
//.env file write | ||
const envContent = `PORT = ${port ? port : 8080}`; | ||
fs.writeFileSync('./.env', envContent); | ||
//.gitignore | ||
const gitignore = `# dependencies | ||
//.gitignore | ||
const gitignore = `# dependencies | ||
/node_modules | ||
@@ -268,5 +272,5 @@ /.pnp | ||
.vs`; | ||
fs.writeFileSync('./.gitignore', gitignore); | ||
fs.writeFileSync('./.gitignore', gitignore); | ||
const prettier = `{ | ||
const prettier = `{ | ||
\"printWidth\": 200, | ||
@@ -279,5 +283,5 @@ \"singleQuote\": true, | ||
}`; | ||
fs.writeFileSync('./.prettierrc', prettier); | ||
fs.writeFileSync('./.prettierrc', prettier); | ||
const notFound = `const notFound = (req, res) => { | ||
const notFound = `'use strict';\nconst notFound = (req, res) => { | ||
res.status(404).send({ | ||
@@ -295,5 +299,5 @@ success: 'false', | ||
`; | ||
fs.writeFileSync('./middlewares/notFound.js', notFound); | ||
fs.writeFileSync('./middlewares/notFound.js', notFound); | ||
const _500Middleware = ` | ||
const _500Middleware = `'use strict'; | ||
const errorHandler = (req, res, next) => { | ||
@@ -325,5 +329,20 @@ // Middleware to handle 5XX errors | ||
fs.writeFileSync('./middlewares/errorHandler.js', _500Middleware); | ||
} else { | ||
const rateLimiter = `'use strict'; | ||
const rateLimit = require('express-rate-limit'); | ||
const minitues = 2; | ||
const limiter = rateLimit({ | ||
windowMs: minitues * 60 * 1000, // 15 minutes | ||
max: 10, // Limit each IP to 100 requests per \`window\` (here, per 15 minutes) | ||
standardHeaders: true, // Return rate limit info in the \`RateLimit-*\` headers | ||
legacyHeaders: false, // Disable the \`X-RateLimit-*\` headers | ||
message: \`Too many requests, please try again later after \${minitues} minitues.\` // Sent message to client too many requests are hitting | ||
}); | ||
module.exports = { limiter }; | ||
`; | ||
fs.writeFileSync('./middlewares/rateLimiter.js', rateLimiter); | ||
} else { | ||
console.log(`Already ${config?.main} Exist !`); | ||
@@ -333,11 +352,24 @@ } | ||
console.log("Wait for few minutues to install npm packages !!!"); | ||
console.log('Wait for few minutues to install npm packages !!!'); | ||
const { execSync } = require("child_process"); | ||
const packageArr = ['npm i express', 'npm i nodemon --save-dev', 'npm i winston', 'npm i winston-daily-rotate-file', 'npm i helmet', 'npm i uuid', 'npm i dotenv', 'npm i compression', 'npm i prettier --save-dev', 'npm run prettify'] | ||
const { execSync } = require('child_process'); | ||
const packageArr = [ | ||
'npm i express', | ||
'npm i nodemon --save-dev', | ||
'npm i winston', | ||
'npm i winston-daily-rotate-file', | ||
'npm i helmet', | ||
'npm i uuid', | ||
'npm i dotenv', | ||
'npm i compression', | ||
'npm i hpp', | ||
'npm i cors', | ||
'npm i express-mongo-sanitize', | ||
'npm i prettier --save-dev', | ||
'npm run prettify' | ||
]; | ||
for (let start = 0; start < packageArr.length; start++) { | ||
const element = packageArr[start]; | ||
const result = execSync(element).toString(); | ||
} | ||
const element = packageArr[start]; | ||
const result = execSync(element).toString(); | ||
} | ||
@@ -344,0 +376,0 @@ console.log(`\n |
{ | ||
"name": "configure-express-app", | ||
"version": "3.2.26", | ||
"version": "3.2.27", | ||
"description": "use npx configure-express-app", | ||
@@ -5,0 +5,0 @@ "bin": { |
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
14067
319