62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import { app, BrowserWindow } from 'electron'
|
|
import { AppMessageType, MessageType, TestIPCMessage } from '../../../../test/TestIpcMessage'
|
|
import { isTesting } from '../Utils/Utils'
|
|
|
|
const messageHandlers: {
|
|
[key in MessageType]?: (...args: any) => unknown
|
|
} = {}
|
|
|
|
export function handleTestMessage(type: MessageType, handler: (...args: any) => unknown): void {
|
|
if (!isTesting()) {
|
|
throw Error('Tried to invoke test handler in non-test build.')
|
|
}
|
|
|
|
messageHandlers[type] = handler
|
|
}
|
|
|
|
export function send(type: AppMessageType, data?: unknown): void {
|
|
if (!isTesting()) {
|
|
return
|
|
}
|
|
|
|
process.send!({ type, data })
|
|
}
|
|
|
|
export function setupTesting(): void {
|
|
process.on('message', async (message: TestIPCMessage) => {
|
|
const handler = messageHandlers[message.type]
|
|
|
|
if (!handler) {
|
|
process.send!({
|
|
id: message.id,
|
|
reject: `No handler registered for message type ${MessageType[message.type]}`,
|
|
})
|
|
return
|
|
}
|
|
|
|
try {
|
|
let returnValue = handler(...message.args)
|
|
if (returnValue instanceof Promise) {
|
|
returnValue = await returnValue
|
|
}
|
|
process.send!({
|
|
id: message.id,
|
|
resolve: returnValue,
|
|
})
|
|
} catch (error: any) {
|
|
process.send!({
|
|
id: message.id,
|
|
reject: error.toString(),
|
|
})
|
|
}
|
|
})
|
|
|
|
handleTestMessage(MessageType.WindowCount, () => BrowserWindow.getAllWindows().length)
|
|
|
|
app.on('ready', () => {
|
|
setTimeout(() => {
|
|
send(AppMessageType.Ready)
|
|
}, 200)
|
|
})
|
|
}
|