-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart-production.cjs
More file actions
122 lines (101 loc) · 4.15 KB
/
start-production.cjs
File metadata and controls
122 lines (101 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const { spawn } = require('child_process');
const path = require('path');
const colors = {
reset: "\x1b[0m",
green: "\x1b[32m",
cyan: "\x1b[36m",
yellow: "\x1b[33m",
red: "\x1b[31m",
magenta: "\x1b[35m"
};
const log = (service, msg, color = colors.reset) => {
const timestamp = new Date().toLocaleTimeString();
console.log(`${color}[${timestamp}] [${service}] ${msg}${colors.reset}`);
};
async function main() {
console.clear();
console.log(`${colors.cyan}
╔════════════════════════════════════════════════════════════════╗
║ 🚀 SOMA PRODUCTION LAUNCHER ║
║ ║
║ • SOMA Core Backend (Port 3001) ║
║ • Electron Window (Production Build) ║
╚════════════════════════════════════════════════════════════════╝
${colors.reset}`);
const processes = [];
// 1. Start SOMA Backend
log('SYSTEM', '📡 Starting SOMA Core Backend...', colors.yellow);
const backend = spawn('node', ['launcher_ULTRA.mjs'], {
cwd: __dirname,
shell: true,
stdio: 'pipe',
env: { ...process.env, PORT: 3001 }
});
backend.stdout.on('data', (data) => {
const lines = data.toString().trim().split('\n');
lines.forEach(line => {
if (line.trim()) console.log(`${colors.green}[BACKEND] ${line}${colors.reset}`);
});
});
backend.stderr.on('data', (data) => {
const lines = data.toString().trim().split('\n');
lines.forEach(line => {
if (line.trim()) console.error(`${colors.red}[BACKEND ERR] ${line}${colors.reset}`);
});
});
processes.push(backend);
// Wait for backend to be ready (5 seconds)
log('SYSTEM', 'Waiting for backend to initialize...', colors.cyan);
await new Promise(resolve => setTimeout(resolve, 5000));
// 2. Launch Electron (Production mode - loads from dist/)
log('SYSTEM', '🖥️ Launching Electron in PRODUCTION mode...', colors.magenta);
const electronProc = spawn('npx', ['electron', '.'], {
cwd: __dirname,
shell: true,
stdio: 'pipe',
env: {
...process.env,
ELECTRON_RUN_AS_NODE: undefined,
VITE_DEV_SERVER_URL: undefined // No dev server URL = load from dist/
}
});
electronProc.stdout.on('data', (data) => {
console.log(`${colors.magenta}[ELECTRON] ${data.toString().trim()}${colors.reset}`);
});
electronProc.stderr.on('data', (data) => {
console.error(`${colors.red}[ELECTRON ERR] ${data.toString().trim()}${colors.reset}`);
});
electronProc.on('close', (code) => {
log('SYSTEM', `Electron window closed`, colors.yellow);
});
processes.push(electronProc);
console.log(`
${colors.green}╔════════════════════════════════════════════════════════════════╗
║ ✅ SOMA PRODUCTION ONLINE ║
╚════════════════════════════════════════════════════════════════╝${colors.reset}
${colors.cyan}📡 BACKEND:${colors.reset}
• SOMA Core: http://localhost:3001
${colors.magenta}🖥️ ELECTRON:${colors.reset}
• Loading from: dist/ (production build)
• Connected to: Backend on port 3001
${colors.green}🚀 Production app ready!${colors.reset}
`);
// Handle shutdown
const shutdown = () => {
console.log(`\n${colors.red}🛑 Shutting down...${colors.reset}`);
processes.forEach(proc => {
try {
proc.kill();
} catch (e) {
// Ignore
}
});
process.exit(0);
};
process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);
}
main().catch(err => {
console.error(`${colors.red}Fatal error:${colors.reset}`, err);
process.exit(1);
});