UNPKG

@bodheesh/create-bodhi-node-app

Version:

Create a production-ready Node.js REST API with zero configuration

74 lines (62 loc) 2.4 kB
const fs = require('fs').promises; const path = require('path'); const { generateMongoDBAPI } = require('./mongodb'); const { generatePostgresAPI } = require('./postgres'); const { generateFirebaseAPI } = require('./firebase'); const { generateGraphQLAPI } = require('./graphql'); const { generateValidationMiddleware } = require('./middleware/validationMiddleware'); const { generateSecurityMiddleware } = require('./middleware/securityMiddleware'); const { generateRBACMiddleware } = require('./middleware/rbacMiddleware'); const { generateMigrations } = require('./migrations/migrationGenerator'); async function generateAPI({ schema, database, type, outputDir }) { try { // Create output directory if it doesn't exist if (!fs.existsSync(outputDir)) { await fs.mkdir(outputDir, { recursive: true }); } // Generate base structure await generateBaseStructure(outputDir); // Generate security middleware await generateSecurityMiddleware(outputDir); // Generate validation middleware const validationMiddleware = generateValidationMiddleware(schema); fs.writeFileSync( path.join(outputDir, 'middleware', 'validation.js'), validationMiddleware ); // Generate RBAC configuration const rbacMiddleware = await generateRBACMiddleware( path.join(outputDir, 'config', 'rbac_model.conf'), path.join(outputDir, 'config', 'rbac_policy.csv') ); // Copy environment template fs.copyFileSync( path.join(__dirname, '../templates/env.template'), path.join(outputDir, '.env.example') ); // Generate database migrations if (database === 'postgres') { await generateMigrations(schema, outputDir, { dialect: 'postgres', username: 'postgres', password: 'postgres', database: 'postgres', host: 'localhost' }); } // Generate models, controllers, and routes await generateModels(schema, database, outputDir); await generateControllers(schema, type, outputDir); await generateRoutes(schema, type, outputDir); console.log('✅ API generation completed successfully!'); } catch (error) { console.error('❌ Error generating API:', error); throw error; } } async function generateSwaggerDocs(schema, outputDir) { // TODO: Implement Swagger documentation generation } module.exports = { generateAPI };