UNPKG

@electron-toolkit/typed-ipc

Version:
41 lines (38 loc) 1.54 kB
type IpcListenEventMap = { [key: string]: [...args: any[]]; }; type IpcHandleEventMap = { [key: string]: (...args: any[]) => any; }; type IpcEventMap = IpcListenEventMap | IpcHandleEventMap; type ExtractArgs<T> = T extends IpcListenEventMap ? T : never; type ExtractHandler<T> = T extends IpcHandleEventMap ? T : never; /** * Typed listener for Electron `ipcMain`. */ declare class IpcListener<T extends IpcEventMap> { private listeners; private handlers; /** * Listen to `channel`. */ on<E extends keyof ExtractArgs<T>>(channel: Extract<E, string>, listener: (e: Electron.IpcMainEvent, ...args: ExtractArgs<T>[E]) => void | Promise<void>): void; /** * Handle a renderer invoke request. */ handle<E extends keyof ExtractHandler<T>>(channel: Extract<E, string>, listener: (e: Electron.IpcMainInvokeEvent, ...args: Parameters<ExtractHandler<T>[E]>) => ReturnType<ExtractHandler<T>[E]> | Promise<ReturnType<ExtractHandler<T>[E]>>): void; /** * Dispose all listeners and handlers. */ dispose(): void; } /** * Typed emitter for sending an asynchronous message to the renderer process. */ declare class IpcEmitter<T extends IpcListenEventMap> { /** * Send an asynchronous message to the renderer process. */ send<E extends keyof T>(sender: Electron.WebContents, channel: Extract<E, string>, ...args: T[E]): void; } export { type ExtractArgs, type ExtractHandler, IpcEmitter, type IpcEventMap, type IpcHandleEventMap, type IpcListenEventMap, IpcListener };