UNPKG

z-ipc

Version:

Z-IPC is an easy-to-use, extensible and fully type-safe IPC solution for JavaScript environments.

69 lines (66 loc) 1.98 kB
// src/adapters/electron.ts import { BrowserWindow } from "electron"; import { ipcMain, ipcRenderer } from "electron"; // src/core/adapter.ts function defineAdapter(adapter) { return adapter; } // src/adapters/electron.ts var electronIpcChannel = "ipc::message"; var electronIpcWindowChannel = [electronIpcChannel, "window-id"].join("::"); if (ipcMain) { ipcMain.on(electronIpcWindowChannel, (event) => { event.returnValue = BrowserWindow.fromWebContents(event.sender).id; }); } function createRendererThreadAdapter(window) { const wrappedSubscribers = /* @__PURE__ */ new Map(); const channel = [electronIpcChannel, window.id].join("::"); return defineAdapter({ publish: (message) => { window.webContents.send(channel, message); }, subscribe: (callback) => { const wrappedCallback = (_, message) => callback(message); ipcMain.on(channel, wrappedCallback); wrappedSubscribers.set(callback, wrappedCallback); }, unsubscribe: (callback) => { const wrappedCallback = wrappedSubscribers.get(callback); if (!wrappedCallback) { return; } ipcMain.off(channel, wrappedCallback); } }); } function createMainThreadAdapter() { const wrappedSubscribers = /* @__PURE__ */ new Map(); const channel = [ electronIpcChannel, ipcRenderer.sendSync(electronIpcWindowChannel) ].join("::"); return defineAdapter({ publish: (message) => { ipcRenderer.send(channel, message); }, subscribe: (callback) => { const wrappedCallback = (_, message) => callback(message); ipcRenderer.on(channel, wrappedCallback); wrappedSubscribers.set(callback, wrappedCallback); }, unsubscribe: (callback) => { const wrappedCallback = wrappedSubscribers.get(callback); if (!wrappedCallback) { return; } ipcRenderer.off(channel, wrappedCallback); } }); } export { createMainThreadAdapter, createRendererThreadAdapter };