// src/main/index.ts — 앱 진입점 import { app } from 'electron' import { bootstrap } from './bootstrap' import { setupLifecycle } from './lifecycle' import { getMainWindow } from './windows/WindowManager' // EPIPE 에러 방지: electron-log가 stdout/stderr에 쓸 때 파이프가 끊기면 크래시 방지 process.stdout?.on?.('error', () => { /* ignore EPIPE */ }) process.stderr?.on?.('error', () => { /* ignore EPIPE */ }) process.on('uncaughtException', (err) => { if (err.message?.includes('EPIPE')) return // EPIPE는 무시 // 기타 예외는 로그만 try { require('electron-log').default?.error?.('Uncaught:', err) } catch { /* noop */ } }) // 단일 인스턴스 잠금 const gotTheLock = app.requestSingleInstanceLock() if (!gotTheLock) { app.quit() } else { app.on('second-instance', () => { // 기존 인스턴스의 메인 윈도우를 활성화 const mainWindow = getMainWindow() if (mainWindow) { if (mainWindow.isMinimized()) mainWindow.restore() mainWindow.focus() } }) app.whenReady().then(async () => { await bootstrap() setupLifecycle() }) app.on('window-all-closed', () => { // Windows에서는 모든 윈도우 닫아도 앱 유지 (트레이) if (process.platform !== 'darwin') { // closeToTray 설정 확인은 lifecycle에서 처리 } }) }