@yakies/electron-ipc
Version:
A easier way to use Electron's contextBridge API
48 lines • 2.11 kB
JavaScript
;
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