electron/lib/renderer/ipc-renderer-internal-utils.ts
Samuel Attard b87b501161
build: update eslint + eslint plugins (#22777)
* build: run eslint --fix

* chore: manually fix all hasOwnProperty errors

* chore: manually fix all void 0 vs undefined errors

* chore: manually fix all async-in-promise errors

* chore: manually fix lexical declaration in case block
2020-03-20 11:12:18 -04:00

24 lines
760 B
TypeScript

import { ipcRendererInternal } from '@electron/internal/renderer/ipc-renderer-internal'
type IPCHandler = (event: Electron.IpcRendererEvent, ...args: any[]) => any
export const handle = function <T extends IPCHandler> (channel: string, handler: T) {
ipcRendererInternal.on(channel, async (event, requestId, ...args) => {
const replyChannel = `${channel}_RESPONSE_${requestId}`
try {
event.sender.send(replyChannel, null, await handler(event, ...args))
} catch (error) {
event.sender.send(replyChannel, error)
}
})
}
export function invokeSync<T> (command: string, ...args: any[]): T {
const [error, result] = ipcRendererInternal.sendSync(command, ...args)
if (error) {
throw error
} else {
return result
}
}