/* * Copyright (c) 2022 Nordic Semiconductor ASA * * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause */ import { type BrowserWindow, ipcRenderer, type WebContents } from 'electron'; let launcherWindow: BrowserWindow | undefined; export const registerLauncherWindowFromMain = (window: BrowserWindow) => { launcherWindow = window; }; export const removeLauncherWindowFromMain = () => { launcherWindow = undefined; }; export const send = void>(channel: string) => (...args: Parameters) => launcherWindow?.webContents.send(channel, ...args); export const on = void>(channel: string) => (handler: T) => ipcRenderer.on(channel, (_event, ...args: unknown[]) => handler(...(args as Parameters)), ); // Broadcast with a subchannel export const broadcast = void>(channel: string) => ( subChannel: string, targets: Pick[] = [], ...args: Parameters ) => targets.forEach(target => { target.send(`${channel}_${subChannel}`, ...args); }); export const onBroadcasted = void>( channel: string, subChannel: string, ) => (handler: T) => ipcRenderer.on( `${channel}_${subChannel}`, (_event, ...args: unknown[]) => handler(...(args as Parameters)), );