electron-typescript-ipc
Version:
Library for type-safe use of contextBridge in Electron
53 lines • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.contextBridge = exports.createIpcMain = exports.createIpcRenderer = void 0;
/* eslint-disable @typescript-eslint/no-explicit-any */
const electron_1 = require("electron");
const createIpcRenderer = () => electron_1.ipcRenderer;
exports.createIpcRenderer = createIpcRenderer;
const createIpcMain = () => (Object.assign(Object.assign({}, electron_1.ipcMain), { send(window, channel, ...args) {
window.webContents.send(channel, ...args);
} }));
exports.createIpcMain = createIpcMain;
/**
* @example
* import { contextBridge, createIpcRenderer, GetApiType } from 'electron-typescript-ipc';
*
* const ipcRenderer = createIpcRenderer<Api>();
*
* export type Api = GetApiType<
* {
* getDataFromStore: (str: string) => Promise<string>;
* },
* {
* showAlert: (text: string, num: number) => Promise<void>;
* }
* >;
*
* const api: Api = {
* invoke: {
* getDataFromStore: async (key: string) => {
* return await ipcRenderer.invoke('getDataFromStore', key);
* },
* },
* on: {
* showAlert: (listener) => {
* ipcRenderer.on('showAlert', listener);
* },
* },
* };
*
* contextBridge.exposeInMainWorld('myAPI', api);
*
* declare global {
* interface Window {
* myAPI: Api;
* }
* }
*/
exports.contextBridge = {
exposeInMainWorld: (apiKey, api) => {
electron_1.contextBridge.exposeInMainWorld(apiKey, api);
},
};
//# sourceMappingURL=index.js.map