UNPKG

express-api-cli

Version:

Cli tool for generating an express project. Instead of wasting extra time creating your project structure, start building right away

131 lines (104 loc) 3.66 kB
/* eslint-disable max-len */ const fs = require('fs-extra'); const path = require('path'); const ora = require('ora'); exports.addRouteToRouteIndex = (route, lang) => { const data = fs.readFileSync(`./src/routes/index.${lang}`).toString().split('\n'); let processComplete = false; data.forEach((item, index) => { if (item.includes('return router') && processComplete === false) { let newRoute = ` router.use('/${route}', ${route}Route);`; if (lang === 'ts') { newRoute = ` router.use('/${route}', new ${route}Route().getRoutes());`; } data.splice(index, 0, newRoute); const addNewRoute = data.join('\n'); fs.writeFileSync(`./src/routes/index.${lang}`, addNewRoute); processComplete = true; } }); }; exports.addImportToRouteIndex = (route, lang) => { const data = fs.readFileSync(`./src/routes/index.${lang}`).toString().split('\n'); let processComplete = false; data.forEach((item, index) => { if (item.includes('import') && processComplete === false && index !== 0) { const newImport = `import ${route}Route from './${route}.route';`; data.splice(index, 0, newImport); const addNewImport = data.join('\n'); fs.writeFileSync(`./src/routes/index.${lang}`, addNewImport); processComplete = true; } }); }; exports.generateFile = async (dir, fileName, lang, dbDriver) => { const FileName = fileName.charAt(0).toUpperCase() + fileName.slice(1); let dirExt = `${dir}.${lang}`; //conditonal case for sequelize when generating model if (dbDriver === 'sequelize' && dir === 'model') { dirExt = `${lang}`; } let srcCopy; let destinationCopy; //conditonal case for test folder let dirs = dir + 's'; if (dir.includes('test')) { dirs = dir; dirExt = `test.${lang}`; srcCopy = `./../lib/${dbDriver}/${lang}/express/${dirs}/user.${dirExt}`; destinationCopy = `./${dirs}/${fileName}.${dirExt}`; } else { srcCopy = `./../lib/${dbDriver}/${lang}/express/src/${dirs}/user.${dirExt}`; destinationCopy = `./src/${dirs}/${fileName}.${dirExt}`; } await fs.copy(path.resolve(__dirname, srcCopy), destinationCopy); const data = fs.readFileSync(destinationCopy).toString(); let newData = data.replace(/user/g, fileName); newData = newData.replace(/User/g, FileName); fs.writeFileSync(destinationCopy, newData); }; exports.checkLangAndDB = async () => { let config = { lang: 'js', dbDriver: 'mongoose' }; let files = fs.readdirSync('./src/'); const file = files.find((item) => item.includes('.ts')); if (file) { config.lang = 'ts'; } let db = null; try { if (config.lang === 'js') { db = await fs.readFile('./src/config/database.js'); } else { db = await fs.readFile('./src/config/database.ts'); } db = db.toString(); } catch (error) { console.log( chalk.yellow(` Database config not detected in src/config. express-api-cli shall assume project default database config uses mongoose. Thank you. `) ); } if (db && db.includes('mongoose') && db.includes('sequelize')) { console.log( chalk.yellow(` Application contains more than one DB configuration in src/config/database.js. Please use one db configuration or remove unused imports to allow express-api-cli function properly. In the meantime Express-api-cli shall use mongoose database configuration Thank you. `) ); } else { if (db && db.includes('sequelize')) { config.dbDriver = 'sequelize'; } } return config; }; exports.spinner = ora({ spinner: 'star2' });