const { spawn } = require('child_process'); const path = require('path'); const exocoreWebDir = path.join(__dirname, 'exocore-web'); function runProcess(command, args, options = {}) { const mergedOptions = { stdio: 'inherit', shell: true, ...options }; const child = spawn(command, args, mergedOptions); child.on('error', (err) => { console.error(`Error starting process "${command} ${args.join(' ')}":`, err); }); child.on('exit', (code, signal) => { if (code !== null && code !== 0) { console.error(`Process "${command} ${args.join(' ')}" exited with code ${code} and signal ${signal}`); } }); return child; } async function startServices() { try { console.log('Running update check...'); const updateProcess = runProcess('node', ['updates']); await new Promise(resolve => updateProcess.on('exit', resolve)); const buildProcess = runProcess('node', [ '--trace-warnings', '--async-stack-traces', 'build.js' ], { cwd: exocoreWebDir }); const serverProcess = runProcess('node', [ '--trace-warnings', '--async-stack-traces', '-r', 'ts-node/register', 'index.js' ], { cwd: exocoreWebDir }); process.on('SIGINT', () => { console.log('\nShutting down Exocore Web services...'); buildProcess.kill('SIGINT'); serverProcess.kill('SIGINT'); process.exit(0); }); process.on('SIGTERM', () => { console.log('\nShutting down Exocore Web services...'); buildProcess.kill('SIGTERM'); serverProcess.kill('SIGTERM'); process.exit(0); }); } catch (error) { console.error('An error occurred during service startup:', error); process.exit(1); } } startServices();