UNPKG

comlink-electron-endpoint

Version:

Use Comlink to communicate between main and renderer.

26 lines (22 loc) 906 B
import { Endpoint, expose, transferHandlers, wrap } from "comlink"; import { MessageChannelMain } from "electron"; import type { MessagePortMain } from "electron"; import { electronEndpoint as rendererEndpoint } from "./renderer"; export function electronEndpoint(port: MessagePortMain): Endpoint { (port as any).addEventListener = port.on.bind(port); (port as any).removeEventListener = port.off.bind(port); return rendererEndpoint(port as any); } const handler = transferHandlers.get("proxy"); if (handler) { handler.serialize = (obj: unknown) => { const { port1, port2 } = new MessageChannelMain(); expose(obj, electronEndpoint(port1)); return [port2, [port2 as unknown as Transferable]]; }; handler.deserialize = (port: MessagePortMain) => { port.start(); return wrap(electronEndpoint(port)); }; transferHandlers.set("proxy", handler); }