#!/usr/bin/env node /** * Development server with hot reload for SmartSolTech * Uses nodemon for automatic server restart on file changes */ const path = require('path'); const { spawn } = require('child_process'); // Configuration const SERVER_FILE = path.join(__dirname, '..', 'server.js'); const NODEMON_CONFIG = { script: SERVER_FILE, ext: 'js,json,ejs', ignore: ['node_modules/', 'public/', '.git/'], watch: ['models/', 'routes/', 'views/', 'server.js'], env: { NODE_ENV: 'development', DEBUG: 'app:*' }, delay: 1000 }; function startDevelopmentServer() { console.log('šŸš€ Starting SmartSolTech development server...'); console.log('šŸ“ Watching files for changes...'); console.log('šŸ”„ Server will automatically restart on file changes'); console.log(''); const nodemonArgs = [ '--script', NODEMON_CONFIG.script, '--ext', NODEMON_CONFIG.ext, '--ignore', NODEMON_CONFIG.ignore.join(','), '--watch', NODEMON_CONFIG.watch.join(','), '--delay', NODEMON_CONFIG.delay.toString() ]; const nodemon = spawn('npx', ['nodemon', ...nodemonArgs], { stdio: 'inherit', env: { ...process.env, ...NODEMON_CONFIG.env } }); nodemon.on('close', (code) => { console.log(`\nšŸ›‘ Development server exited with code ${code}`); process.exit(code); }); nodemon.on('error', (error) => { console.error('āŒ Error starting development server:', error); process.exit(1); }); // Handle graceful shutdown process.on('SIGINT', () => { console.log('\nšŸ›‘ Shutting down development server...'); nodemon.kill('SIGINT'); }); process.on('SIGTERM', () => { console.log('\nšŸ›‘ Shutting down development server...'); nodemon.kill('SIGTERM'); }); } if (require.main === module) { startDevelopmentServer(); } module.exports = { startDevelopmentServer };