/* * Copyright (c) 2022 Nordic Semiconductor ASA * * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause */ import { ipcMain, ipcRenderer, type WebContents } from 'electron'; // Send export const send = void>(channel: string) => (...args: Parameters) => ipcRenderer.send(channel, ...args); export const on = void>(channel: string) => (handler: T) => ipcMain.on(channel, (_event, ...args: unknown[]) => handler(...(args as Parameters)), ); // Invoke export const invoke = unknown>(channel: string) => (...args: Parameters) => ipcRenderer.invoke(channel, ...args) as Promise>; export const handle = unknown>(channel: string) => ( handler: | ((...args: Parameters) => ReturnType) | ((...args: Parameters) => Promise>), ) => ipcMain.handle(channel, (_event, ...args: unknown[]) => handler(...(args as Parameters)), ); export const handleWithSender = unknown>(channel: string) => ( handler: | ((sender: WebContents, ...args: Parameters) => ReturnType) | (( sender: WebContents, ...args: Parameters ) => Promise>), ) => ipcMain.handle(channel, ({ sender }, ...args: unknown[]) => handler(sender, ...(args as Parameters)), );