@electron-toolkit/typed-ipc
Version:
Type-safe Electron IPC, best practices in TypeScript.
52 lines (48 loc) • 1.23 kB
JavaScript
;
var electron = require('electron');
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* Typed listener for Electron `ipcMain`.
*/
class IpcListener {
constructor() {
this.listeners = [];
this.handlers = [];
}
/**
* Listen to `channel`.
*/
on(channel, listener) {
this.listeners.push(channel);
electron.ipcMain.on(channel, listener);
}
/**
* Handle a renderer invoke request.
*/
handle(channel, listener) {
this.handlers.push(channel);
electron.ipcMain.handle(channel, listener);
}
/**
* Dispose all listeners and handlers.
*/
dispose() {
this.listeners.forEach(c => electron.ipcMain.removeAllListeners(c));
this.listeners = [];
this.handlers.forEach(c => electron.ipcMain.removeHandler(c));
this.handlers = [];
}
}
/**
* Typed emitter for sending an asynchronous message to the renderer process.
*/
class IpcEmitter {
/**
* Send an asynchronous message to the renderer process.
*/
send(sender, channel, ...args) {
sender.send(channel, ...args);
}
}
exports.IpcEmitter = IpcEmitter;
exports.IpcListener = IpcListener;