UNPKG

heyjarvis

Version:

J.A.R.V.I.S. - Advanced Node.js MVC Framework with ORM, built-in validation, soft delete, and query builder

141 lines (129 loc) 4.04 kB
const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); const chalk = require('chalk'); const { createFolderStructure } = require('../generators/folders'); const { createFiles } = require('../generators/files'); const { installDependencies } = require('../utils/installer'); const createProject = async (projectName, options = {}) => { const { template = 'basic', database = 'mysql', install = true } = options; const projectPath = path.resolve(projectName); // Proje klasörü zaten var mı kontrol et if (fs.existsSync(projectPath)) { throw new Error(`Folder ${projectName} already exists`); } // Ana proje klasörünü oluştur fs.mkdirSync(projectPath, { recursive: true }); process.chdir(projectPath); // Package.json oluştur await createPackageJson(projectName, template); // Klasör yapısını oluştur await createFolderStructure(template); // Template'e göre dosyaları oluştur await createFiles(template, database); // Dependencies yükle if (install) { await installDependencies(template, database); } console.log(chalk.green(`\n✅ J.A.R.V.I.S. project "${projectName}" created successfully!`)); }; const createPackageJson = (projectName, template) => { const packageJson = { name: projectName, version: "1.0.0", description: `J.A.R.V.I.S. ${template} project`, main: "src/app.js", scripts: { start: "node src/app.js", dev: "nodemon src/app.js", test: "jest --passWithNoTests", "test:watch": "jest --watch", lint: "eslint src/", "lint:fix": "eslint src/ --fix" }, keywords: ["jarvis", "mvc", "express", "nodejs", "uuid", "api"], author: "", license: "MIT", dependencies: {}, devDependencies: {} }; fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 2)); console.log(chalk.green('📦 package.json created with enhanced scripts')); }; // Template seçenekleri const templates = { basic: { description: 'Basic MVC structure with Express, Sequelize and UUID', dependencies: [ 'express', 'sequelize', 'mysql2', 'uuid', 'dotenv', 'express-session', 'cors', 'helmet' ], devDependencies: ['nodemon', 'eslint'] }, api: { description: 'REST API with UUID, validation, security and testing', dependencies: [ 'express', 'sequelize', 'mysql2', 'uuid', 'dotenv', 'cors', 'helmet', 'express-rate-limit', 'compression', 'express-validator', 'morgan', 'jsonwebtoken', 'bcryptjs' ], devDependencies: [ 'nodemon', 'jest', 'supertest', 'eslint', 'cross-env' ] }, full: { description: 'Full-stack with UUID, authentication, file upload and more', dependencies: [ 'express', 'sequelize', 'mysql2', 'uuid', 'dotenv', 'express-session', 'bcryptjs', 'jsonwebtoken', 'multer', 'ejs', 'cors', 'helmet', 'express-rate-limit', 'compression', 'express-validator', 'morgan', 'nodemailer', 'redis' ], devDependencies: [ 'nodemon', 'jest', 'supertest', 'eslint', 'cross-env', 'faker' ] } }; module.exports = { createProject, templates };