UNPKG

node-folder-structure

Version:

Generate an Express.js app with 3-layer architecture. Quick start: npx node-folder-structure

119 lines (108 loc) 5.07 kB
const fs = require('fs-extra'); const path = require('path'); const { app_js, index_js, git_ignore, dotenv, dbconfig_js, dbindex_js, dbname_js, constant_index_js, user_controller_js, controller_index_js, cron_jobs_js, jobs_index, config_loaders_js, loaders_index_js, multer_middleware_js, auth_middleware_js, middleware_index_js, model_seeders_js, user_model_js, model_index_js, user_routes_js, routes_index_js, user_service_js, services_index_js, utils_apiError_js, utils_apiResponse_js, utils_asynchandler_js, utils_generateToken_js, utils_index_js, validators_user_js, validators_index_js, readmeFile, package_json, } = require("../contents"); // Function to create the required folder structure async function generateStructure(appName = 'express-app') { console.log("Generating file structure..."); const projectDir = appName === '.' ? process.cwd() : path.join(process.cwd(), appName); // Create project directory if it doesn't exist await fs.ensureDir(projectDir); // Define the new folders and subfolders const folders = [ 'public/temp', 'src/configs', 'src/constants', 'src/controllers', 'src/docs', 'src/jobs', 'src/loaders', 'src/middlewares', 'src/models', 'src/routes', 'src/services', 'src/utils', 'src/validators' ]; // Define the initial files to be created const files = { [path.join(projectDir, 'src', 'configs', 'db.config.js')]: `${dbconfig_js}`, [path.join(projectDir, 'src', 'configs', 'index.js')]: `${dbindex_js}`, [path.join(projectDir, 'src', 'constants', 'dbName.js')]: `${dbname_js}`, [path.join(projectDir, 'src', 'constants', 'index.js')]: `${constant_index_js}`, [path.join(projectDir, 'src', 'controllers', 'user.controller.js')]: `${user_controller_js}`, [path.join(projectDir, 'src', 'controllers', 'index.js')]: `${controller_index_js}`, [path.join(projectDir, 'src', 'docs', 'swagger.docs.js')]: `// Swagger docs`, [path.join(projectDir, 'src', 'docs', 'index.js')]: `// Docs index file`, [path.join(projectDir, 'src', 'jobs', 'cron.jobs.js')]: `${cron_jobs_js}`, [path.join(projectDir, 'src', 'jobs', 'index.js')]: `${jobs_index}`, [path.join(projectDir, 'src', 'loaders', 'config.loader.js')]: `${config_loaders_js}`, [path.join(projectDir, 'src', 'loaders', 'index.js')]: `${loaders_index_js}`, [path.join(projectDir, 'src', 'middlewares', 'auth.middleware.js')]: `${auth_middleware_js}`, [path.join(projectDir, 'src', 'middlewares', 'multer.middleware.js')]: `${multer_middleware_js}`, [path.join(projectDir, 'src', 'middlewares', 'index.js')]: `${middleware_index_js}`, [path.join(projectDir, 'src', 'models', 'user.model.js')]: `${user_model_js}`, [path.join(projectDir, 'src', 'models', 'seeders.js')]: `${model_seeders_js}`, [path.join(projectDir, 'src', 'models', 'index.js')]: `${model_index_js}`, [path.join(projectDir, 'src', 'routes', 'user.routes.js')]: `${user_routes_js}`, [path.join(projectDir, 'src', 'routes', 'index.js')]: `${routes_index_js}`, [path.join(projectDir, 'src', 'services', 'user.service.js')]: `${user_service_js}`, [path.join(projectDir, 'src', 'services', 'index.js')]: `${services_index_js}`, [path.join(projectDir, 'src', 'utils', 'ApiError.js')]: `${utils_apiError_js}`, [path.join(projectDir, 'src', 'utils', 'ApiResponse.js')]: `${utils_apiResponse_js}`, [path.join(projectDir, 'src', 'utils', 'asyncHandler.js')]: `${utils_asynchandler_js}`, [path.join(projectDir, 'src', 'utils', 'generateToken.js')]: `${utils_generateToken_js}`, [path.join(projectDir, 'src', 'utils', 'index.js')]: `${utils_index_js}`, [path.join(projectDir, 'src', 'validators', 'user.validator.js')]: `${validators_user_js}`, [path.join(projectDir, 'src', 'validators', 'index.js')]: `${validators_index_js}`, [path.join(projectDir, 'src', 'app.js')]: `${app_js}`, [path.join(projectDir, 'src', 'index.js')]: `${index_js}`, [path.join(projectDir, '.env')]: `${dotenv}`, [path.join(projectDir, '.gitignore')]: `${git_ignore}`, [path.join(projectDir, 'package.json')]: package_json.replace('{{app_name}}', path.basename(projectDir)), [path.join(projectDir, 'README.md')]: `${readmeFile}`, }; // Create the directories for (let folder of folders) { await fs.ensureDir(path.join(projectDir, folder)); } // Create the files for (let filePath in files) { await fs.outputFile(filePath, files[filePath]); } console.log('File structure created successfully!'); } module.exports = { generateStructure };