UNPKG

@yakies/electron-ipc

Version:

A easier way to use Electron's contextBridge API

48 lines 2.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.create = void 0; const tslib_1 = require("tslib"); const electron_1 = require("electron"); const debug_1 = (0, tslib_1.__importDefault)(require("debug")); const logger = (0, debug_1.default)('electron-ipc'); const create = (name, sendWhitelist = [], receiveWhitelist = []) => { const sendWL = sendWhitelist || []; const recWL = receiveWhitelist || []; const api = { ipc: { name: name, whitelists: { send: sendWL, receive: recWL, }, send: (channel, data) => { const chan = (channel || '').trim(); if (!sendWL.includes(chan)) { console.error(`Renderer failed to send data. The specified send channel [${chan}] is not whitelisted.`); return; } logger(`Renderer sending data [${data || 'null'}] on channel [${chan}]`, data); electron_1.ipcRenderer.send(chan, data); }, receive: (channel, fn) => { if (typeof fn !== 'function') { throw new Error(`Failed received data on the specified channel (${channel}). The specified function paramter is not a function.`); } const chan = (channel || '').trim(); if (!recWL.includes(chan)) { console.error(`Renderer failed to receive data. The specified receive channel [${chan}] is not whitelisted.`); return; } electron_1.ipcRenderer.on(chan, (event, ...args) => { logger(`Renderer receiving data on channel '${chan}'`, args); fn(event, ...args); }); }, }, }; electron_1.contextBridge.exposeInMainWorld(name, api); logger(`An API bridge named '${name}' has been established between the main and render processes!`, api); return api; }; exports.create = create; //# sourceMappingURL=index.js.map