Skip to main content

ipc-development

IPC 채널 추가/수정 시 안전 규칙과 절차

معلومات المصدر

المستودع
BangDori/prowl
آخر نشاط في المصدر
٢ مارس ٢٠٢٦ في ١٤:١٨
لغة SKILL.md المكتشفة
الكورية
النجوم
١٠
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
ipc-development
description
IPC 채널 추가/수정 시 안전 규칙과 절차
user-invocable
false
# IPC Development Guide ## Single Source of Truth 모든 IPC 채널은 `src/shared/ipc-schema.ts`에 정의. 이 스키마에서 타입이 자동 추론되므로 별도 타입 정의 불필요. ## 채널 추가 절차 새 IPC 채널 추가 시 **3곳 수정**: 1. `src/shared/ipc-schema.ts` — 채널 + params + return 타입 정의 2. `src/main/ipc.ts` — `handleIpc()` 핸들러 추가 3. `src/preload/index.ts` — `invokeIpc()` 메서드 추가 → Renderer 타입은 자동 반영 ## 반환 타입 규칙 | 채널 유형 | 반환 타입 | 예시 | |-----------|----------|------| | 데이터 조회 | 구체적 타입 | `LaunchdJob[]`, `AppSettings` | | 데이터 변경 (mutation) | `IpcResult` | `{ success: true }` | | Fire-and-forget | `void` | quit, resize, navigate | ## 에러 처리 `handleIpc` 래퍼가 try/catch 자동 적용: - 성공 → 핸들러 결과 반환 - 실패 → 에러 로깅 + mutation은 `{ success: false, error: message }` 반환 ## 직렬화 - **Date 객체는 IPC를 통과하지 않음** — ISO 8601 문자열(`string`) 사용 - 서비스에서 `.toISOString()` 호출 후 전달 - Renderer에서 `new Date(isoString)` 으로 파싱 ## 채널 네이밍 형식: `{domain}:{action}` (액션은 kebab-case) ``` jobs:list # 조회 jobs:toggle # 액션 settings:get # 단일 조회 calendar:add-local-event # 복합 액션 ``` ## Renderer에서 사용 **컴포넌트에서 `window.electronAPI` 직접 호출 금지.** 반드시 hooks를 통해 접근: ```typescript // Bad const jobs = await window.electronAPI.listJobs(); // Good const { jobs } = useLaunchdJobs(); ``` ## plist 파싱 외부 데이터(plist)는 Zod `safeParse`로 런타임 검증: ```typescript // Bad const data = plist.parse(content) as PlistData; // Good const result = PlistDataSchema.safeParse(plist.parse(content)); if (!result.success) { /* handle error */ } ```
عرض على GitHub