-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpreload.ts
46 lines (36 loc) · 1.15 KB
/
preload.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import { ipcRenderer, IpcRendererEvent } from "electron";
import { MessageToRenderer, MessageToMain } from "_t/IpcMessages";
export class Preload {
isStarted = false;
private isMessageFromRenderer = (data: any): data is MessageToMain =>
data.source === "@orange/renderer";
private handleWindowMessage = (event: MessageEvent) => {
const { data } = event;
/* istanbul ignore else */
if (this.isMessageFromRenderer(data) && data.nonce === __NONCE__) {
ipcRenderer.send("message-to-main", data);
}
};
private handleMessageToRenderer = (
_event: IpcRendererEvent,
data: MessageToRenderer,
) => {
window.postMessage(data, "*");
};
start = () => {
/* istanbul ignore if */
if (this.isStarted) {
throw new Error(
"`startPreloadProcess` is meant to be called only once per Node.js process",
);
}
this.isStarted = true;
ipcRenderer.on("message-to-renderer", this.handleMessageToRenderer);
window.addEventListener("message", this.handleWindowMessage);
};
}
/* istanbul ignore if */
if (process.env.NODE_ENV !== "test") {
const preload = new Preload();
preload.start();
}