app/aws-lsp-codewhisperer-runtimes/scripts/dev-server.js (82 lines of code) (raw):

const spawn = require('cross-spawn') const fs = require('fs') const path = require('path') const PID_FILE = path.join(__dirname, 'dev-server.pid') const serverPort = 8080 function startDevServer() { if (fs.existsSync(PID_FILE)) { console.log( 'Server is already running (found temporary file dev-server.pid with server process id). Use `npm run stop` to stop it.' ) return } try { const serverProcess = spawn('npx', ['webpack', 'serve'], { stdio: 'inherit', shell: true, }) console.log(`Dev server started on port ${serverPort} (PID: ${serverProcess.pid})`) fs.writeFileSync(PID_FILE, serverProcess.pid.toString()) serverProcess.on('error', err => { console.error('Failed to start server:', err) if (fs.existsSync(PID_FILE)) { fs.unlinkSync(PID_FILE) } }) serverProcess.on('exit', code => { if (fs.existsSync(PID_FILE)) { fs.unlinkSync(PID_FILE) } if (code !== 0) { console.log(`Server process exited with code ${code}`) } }) } catch (error) { console.error('Failed to spawn server process:', error) if (fs.existsSync(PID_FILE)) { fs.unlinkSync(PID_FILE) } } } function stopDevServer() { if (!fs.existsSync(PID_FILE)) { console.log('No running server found.') return } const pid = parseInt(fs.readFileSync(PID_FILE, 'utf8'), 10) if (isNaN(pid)) { console.error('Invalid PID file. Deleting it.') fs.unlinkSync(PID_FILE) return } console.log(`Stopping dev server (PID: ${pid})...`) if (process.platform === 'win32') { spawn('taskkill', ['/PID', pid], { stdio: 'inherit', shell: true, }).on('exit', code => { if (code === 0) { console.log('Dev server stopped.') fs.unlinkSync(PID_FILE) } else { console.error(`Error stopping server: exit code ${code}`) } }) } else { try { process.kill(pid) console.log('Dev server stopped.') fs.unlinkSync(PID_FILE) } catch (error) { console.error(`Failed to stop server: ${error.message}`) } } } // CLI handling const command = process.argv[2] if (command === 'start') { startDevServer() } else if (command === 'stop') { stopDevServer() } else { console.log('Usage: node scripts/dev-server.js [start|stop]') }