Files
gdt-tool/src/preload/index.ts
T

64 lines
2.0 KiB
TypeScript

import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron'
// Whitelist of valid channels used for IPC communication (Send message from Renderer to Main)
const mainAvailChannels: string[] = [
'msgRequestGetVersion',
'msgOpenExternalLink',
'msgOpenFile'
]
const rendererAvailChannels: string[] = []
contextBridge.exposeInMainWorld('mainApi', {
send: (channel: string, ...data: any[]): void => {
if (mainAvailChannels.includes(channel)) {
ipcRenderer.send.apply(null, [channel, ...data])
if (process.env.NODE_ENV === 'development') {
console.log({ type: 'send', channel, request: data })
}
} else {
throw new Error(`Unknown ipc channel name: ${channel}`)
}
},
on: (
channel: string,
listener: (event: IpcRendererEvent, ...args: any[]) => void
): void => {
if (rendererAvailChannels.includes(channel)) {
ipcRenderer.on(channel, listener)
} else {
throw new Error(`Unknown ipc channel name: ${channel}`)
}
},
once: (
channel: string,
listener: (event: IpcRendererEvent, ...args: any[]) => void
): void => {
if (rendererAvailChannels.includes(channel)) {
ipcRenderer.once(channel, listener)
} else {
throw new Error(`Unknown ipc channel name: ${channel}`)
}
},
off: (
channel: string,
listener: (event: IpcRendererEvent, ...args: any[]) => void
): void => {
if (rendererAvailChannels.includes(channel)) {
ipcRenderer.off(channel, listener)
} else {
throw new Error(`Unknown ipc channel name: ${channel}`)
}
},
invoke: async (channel: string, ...data: any[]): Promise<any> => {
if (mainAvailChannels.includes(channel)) {
const result = await ipcRenderer.invoke.apply(null, [channel, ...data])
if (process.env.NODE_ENV === 'development') {
console.log({ type: 'invoke', channel, request: data, result })
}
return result
}
throw new Error(`Unknown ipc channel name: ${channel}`)
}
})