UNPKG

global-express

Version:

A Command line interface for instantly building an express

163 lines (143 loc) 5.87 kB
const fs = require('fs'); const path = require('path'); const chalk = require('chalk'); const lignator = require('lignator'); function writeFile(fileName, fileNameTemp, dir = '.') { if (!fs.existsSync(`${dir}/${fileName}`)) { const tempPath = path.join(__dirname, '../templates'); const lastPath = dir.substring(dir.indexOf('/') + 1); const fileTemp = fs.readFileSync(`${tempPath}/${dir === '.' ? fileNameTemp : lastPath + '/' + fileNameTemp}`); const indent = dir === '.' ? '' : ' '; fs.writeFileSync(`${dir}/${fileName}`, fileTemp); console.log(chalk.green(`${indent}✔ Create ${dir === '.' ? fileName : dir + '/' + fileName} successful`)); } else console.log(chalk.red(`✖ File ${fileName} already exists!`)); } function makeDir(dir) { if (!fs.existsSync(`./${dir}`)) { fs.mkdirSync(`./${dir}`, { recursive: true }); console.log(chalk.green(`✔ Make directory ${dir} successful`)); return true; } else { console.log(chalk.red(`✖ Directory ${dir} already exists!`)); return false; } } var actions = {}; actions.init = path => { var initSuccess = true; var startTime = process.hrtime(); /** make directory if path defined */ if (path) { makeDir(path); } else path = '.'; const expExists = fs.existsSync(`${path}/app.js`) || fs.existsSync(`${path}/package.json`); if (!expExists) { /** create package.json */ writeFile(`${path}/package.json`, 'packageTemp.json'); /** create app.js */ writeFile(`${path}/app.js`, 'appTemp.js'); /** create module apidoc */ const apiDocDir = `${path}/apidoc`; if (makeDir(apiDocDir)) { writeFile('apidoc.html', 'apiDocTemp.html', apiDocDir); writeFile('favicon.ico', 'faviconTemp.ico', apiDocDir); writeFile('icon.png', 'iconTemp.png', apiDocDir); } /** create module config */ const configDir = `${path}/config`; if (makeDir(configDir)) { writeFile('config.js', 'configTemp.js', configDir); writeFile('graphql.js', 'graphqlTemp.js', configDir); writeFile('swagger.js', 'swaggerTemp.js', configDir); } /** create module docs */ const docsDir = `${path}/docs`; if (makeDir(docsDir)) { writeFile('1-introduction.js', '1-introductionTemp.js', docsDir); writeFile('meta.js', 'metaTemp.js', docsDir); } /** create module graphql */ const graphqlDir = `${path}/graphql`; if (makeDir(graphqlDir)) { const graphqlResloversDir = `${graphqlDir}/resolvers`; if (makeDir(graphqlResloversDir)) { writeFile('ExampleResolvers.js', 'ExampleResolversTemp.js', graphqlResloversDir); writeFile('index.js', 'indexTemp.js', graphqlResloversDir); } const graphqlSchemaDir = `${graphqlDir}/schema`; if (makeDir(graphqlSchemaDir)) { writeFile('schemagraphql.js', 'schemagraphqlTemp.js', graphqlSchemaDir); } } /** create module logs */ const logsDir = `${path}/logs`; if (makeDir(logsDir)) { fs.writeFileSync(`${logsDir}/.keep`); } /** create module models */ const modelsDir = `${path}/models`; if (makeDir(modelsDir)) { writeFile('Example.js', 'ExampleTemp.js', modelsDir); writeFile('index.js', 'indexTemp.js', modelsDir); } /** create module restapi */ const restapiDir = `${path}/restapi`; if (makeDir(restapiDir)) { const restapiControllersDir = `${restapiDir}/controllers`; if (makeDir(restapiControllersDir)) { writeFile('BaseController.js', 'BaseControllerTemp.js', restapiControllersDir); writeFile('ExampleController.js', 'ExampleControllerTemp.js', restapiControllersDir); writeFile('HandleError.js', 'HandleErrorTemp.js', restapiControllersDir); writeFile('index.js', 'indexTemp.js', restapiControllersDir); } const restapiRoutesDir = `${restapiDir}/routes`; if (makeDir(restapiRoutesDir)) { writeFile('example.js', 'exampleTemp.js', restapiRoutesDir); } const restapiServicesDir = `${restapiDir}/services`; if (makeDir(restapiServicesDir)) { writeFile('BaseService.js', 'BaseServiceTemp.js', restapiServicesDir); writeFile('ExampleService.js', 'ExampleServiceTemp.js', restapiServicesDir); writeFile('index.js', 'indexTemp.js', restapiServicesDir); } } /** create module server */ const serverDir = `${path}/server`; if (makeDir(serverDir)) { writeFile('apiLimiter.js', 'apiLimiterTemp.js', serverDir); writeFile('cluster.js', 'clusterTemp.js', serverDir); writeFile('compression.js', 'compressionTemp.js', serverDir); writeFile('cors.js', 'corsTemp.js', serverDir); writeFile('graphql.js', 'graphqlTemp.js', serverDir); writeFile('log.js', 'logTemp.js', serverDir); writeFile('routes.js', 'routesTemp.js', serverDir); writeFile('swagger.js', 'swaggerTemp.js', serverDir); } /** create module utils */ const utilsDir = `${path}/utils`; if (makeDir(utilsDir)) { writeFile('index.js', 'indexTemp.js', utilsDir); writeFile('ResponseBuilder.js', 'ResponseBuilderTemp.js', utilsDir); } } else initSuccess = false; if (initSuccess) { console.log(chalk.green(`\n✨ Initialization done in ${process.hrtime(startTime)}s`)); return true; } else { console.log(chalk.red('✖ Application server already exists!')); return false; } }; actions.clean = async path => { const pathExists = await fs.existsSync(path); if (path !== undefined && pathExists) { const startTime = process.hrtime(); lignator.remove(path); console.log(chalk.green(`\n✨ Clean Directory ${path} done in ${process.hrtime(startTime)}s`)); return true; } else { console.log(chalk.red('✖ Please insert directory name to delete!')); return false; } }; module.exports = actions;