#!/usr/bin/env node const { execSync } = require('child_process'); const fs = require('fs'); const path = require('path'); /** * Build System Helper - Shows available build commands and their descriptions */ const commands = { 'Development Commands': { 'npm run dev': 'Start development server with hot reload', 'npm run watch': 'Watch mode TypeScript compilation', 'npm run typecheck': 'Type checking without code generation' }, 'Build Commands': { 'npm run build': 'Standard build: clean → compile → copy assets', 'npm run build:clean': 'Clean the dist directory', 'npm run build:compile': 'Compile TypeScript to JavaScript', 'npm run build:copy-assets': 'Copy non-TS files to dist directory', 'npm run build:docker': 'Build for Docker (no tests/migrations)' }, 'Production Build Commands': { 'npm run build:production': 'Full production build with linting, tests, and migrations', 'npm run build:advanced': 'Advanced build script with custom options', 'npm run build:advanced:prod': 'Advanced production build with all validations', 'npm run build:advanced:ci': 'CI/CD friendly build (skips linting)', 'npm run deploy:prod': 'Build for production deployment' }, 'Database Commands': { 'npm run migration:run': 'Run pending database migrations', 'npm run migration:show': 'Show migration status', 'npm run migration:generate ': 'Generate new migration', 'npm run migration:create ': 'Create empty migration', 'npm run migration:revert': 'Revert last migration', 'npm run migration:full ': 'Create, generate, and run migration' }, 'Testing Commands': { 'npm test': 'Run all tests', 'npm run test:watch': 'Run tests in watch mode', 'npm run test:coverage': 'Run tests with coverage report', 'npm run test:redis': 'Run Redis-specific tests' }, 'Deployment Scripts': { 'scripts/deploy.sh': 'Full Linux/Mac deployment script', 'scripts/deploy.bat': 'Full Windows deployment script' } }; function showCommands() { console.log('🔧 SerpentRace Backend Build System\n'); Object.entries(commands).forEach(([category, categoryCommands]) => { console.log(`\x1b[36m${category}\x1b[0m`); console.log('=' .repeat(category.length)); Object.entries(categoryCommands).forEach(([command, description]) => { console.log(` \x1b[32m${command.padEnd(35)}\x1b[0m ${description}`); }); console.log(''); }); console.log('\x1b[33mQuick Start:\x1b[0m'); console.log(' npm run build # Basic build'); console.log(' npm run build:production # Production build'); console.log(' npm run dev # Development server\n'); console.log('\x1b[33mDocumentation:\x1b[0m'); console.log(' See BUILD.md for detailed documentation'); } function checkBuildStatus() { const distPath = path.join(__dirname, '..', 'dist'); if (fs.existsSync(distPath)) { const stats = fs.statSync(distPath); console.log(`\x1b[32m✅ Last build:\x1b[0m ${stats.mtime.toLocaleString()}`); const indexPath = path.join(distPath, 'Api', 'index.js'); if (fs.existsSync(indexPath)) { console.log('\x1b[32m✅ Main entry point built successfully\x1b[0m'); } else { console.log('\x1b[31m❌ Main entry point missing\x1b[0m'); } } else { console.log('\x1b[33m⚠️ No build found - run "npm run build" first\x1b[0m'); } } // Handle command line arguments const args = process.argv.slice(2); if (args.includes('--help') || args.includes('-h')) { showCommands(); } else if (args.includes('--status') || args.includes('-s')) { checkBuildStatus(); } else if (args.includes('--quick') || args.includes('-q')) { console.log('🚀 Quick build starting...'); try { execSync('npm run build', { stdio: 'inherit' }); } catch (error) { console.error('❌ Quick build failed'); process.exit(1); } } else { showCommands(); checkBuildStatus(); console.log('\n\x1b[33mOptions:\x1b[0m'); console.log(' --help, -h Show this help'); console.log(' --status, -s Show build status only'); console.log(' --quick, -q Run quick build'); }