Skip to content

Commit 3956252

Browse files
committed
xo: Fix unicorn/prefer-event-target.
Signed-off-by: Anders Kaseorg <[email protected]>
1 parent 5eccd49 commit 3956252

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

app/renderer/js/electron-bridge.ts

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {EventEmitter} from "node:events";
1+
import * as z from "zod";
22

33
import {
44
type ClipboardDecrypter,
@@ -7,11 +7,11 @@ import {
77
import {type NotificationData, newNotification} from "./notification/index.ts";
88
import {ipcRenderer} from "./typed-ipc-renderer.ts";
99

10-
type ListenerType = (...arguments_: any[]) => void;
10+
type ListenerType = (...arguments_: unknown[]) => void;
1111

1212
/* eslint-disable @typescript-eslint/naming-convention */
1313
export type ElectronBridge = {
14-
send_event: (eventName: string | symbol, ...arguments_: unknown[]) => boolean;
14+
send_event: (eventName: string, ...arguments_: unknown[]) => boolean;
1515
on_event: (eventName: string, listener: ListenerType) => void;
1616
new_notification: (
1717
title: string,
@@ -32,15 +32,26 @@ let idle = false;
3232
// Indicates the time at which user was last active
3333
let lastActive = Date.now();
3434

35-
export const bridgeEvents = new EventEmitter(); // eslint-disable-line unicorn/prefer-event-target
35+
export const bridgeEvents = new EventTarget();
36+
37+
export class BridgeEvent extends Event {
38+
constructor(
39+
type: string,
40+
public readonly arguments_: unknown[] = [],
41+
) {
42+
super(type);
43+
}
44+
}
3645

3746
/* eslint-disable @typescript-eslint/naming-convention */
3847
const electron_bridge: ElectronBridge = {
39-
send_event: (eventName: string | symbol, ...arguments_: unknown[]): boolean =>
40-
bridgeEvents.emit(eventName, ...arguments_),
48+
send_event: (eventName: string, ...arguments_: unknown[]): boolean =>
49+
bridgeEvents.dispatchEvent(new BridgeEvent(eventName, arguments_)),
4150

4251
on_event(eventName: string, listener: ListenerType): void {
43-
bridgeEvents.on(eventName, listener);
52+
bridgeEvents.addEventListener(eventName, (event) => {
53+
listener(...z.instanceof(BridgeEvent).parse(event).arguments_);
54+
});
4455
},
4556

4657
new_notification: (
@@ -65,28 +76,25 @@ const electron_bridge: ElectronBridge = {
6576
};
6677
/* eslint-enable @typescript-eslint/naming-convention */
6778

68-
bridgeEvents.on("total_unread_count", (unreadCount: unknown) => {
69-
if (typeof unreadCount !== "number") {
70-
throw new TypeError("Expected string for unreadCount");
71-
}
72-
79+
bridgeEvents.addEventListener("total_unread_count", (event) => {
80+
const [unreadCount] = z
81+
.tuple([z.number()])
82+
.parse(z.instanceof(BridgeEvent).parse(event).arguments_);
7383
ipcRenderer.send("unread-count", unreadCount);
7484
});
7585

76-
bridgeEvents.on("realm_name", (realmName: unknown) => {
77-
if (typeof realmName !== "string") {
78-
throw new TypeError("Expected string for realmName");
79-
}
80-
86+
bridgeEvents.addEventListener("realm_name", (event) => {
87+
const [realmName] = z
88+
.tuple([z.string()])
89+
.parse(z.instanceof(BridgeEvent).parse(event).arguments_);
8190
const serverUrl = location.origin;
8291
ipcRenderer.send("realm-name-changed", serverUrl, realmName);
8392
});
8493

85-
bridgeEvents.on("realm_icon_url", (iconUrl: unknown) => {
86-
if (typeof iconUrl !== "string") {
87-
throw new TypeError("Expected string for iconUrl");
88-
}
89-
94+
bridgeEvents.addEventListener("realm_icon_url", (event) => {
95+
const [iconUrl] = z
96+
.tuple([z.string()])
97+
.parse(z.instanceof(BridgeEvent).parse(event).arguments_);
9098
const serverUrl = location.origin;
9199
ipcRenderer.send(
92100
"realm-icon-changed",

app/renderer/js/preload.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import {contextBridge} from "electron/renderer";
22

3-
import electron_bridge, {bridgeEvents} from "./electron-bridge.ts";
3+
import electron_bridge, {BridgeEvent, bridgeEvents} from "./electron-bridge.ts";
44
import * as NetworkError from "./pages/network.ts";
55
import {ipcRenderer} from "./typed-ipc-renderer.ts";
66

77
contextBridge.exposeInMainWorld("electron_bridge", electron_bridge);
88

99
ipcRenderer.on("logout", () => {
10-
bridgeEvents.emit("logout");
10+
bridgeEvents.dispatchEvent(new BridgeEvent("logout"));
1111
});
1212

1313
ipcRenderer.on("show-keyboard-shortcuts", () => {
14-
bridgeEvents.emit("show-keyboard-shortcuts");
14+
bridgeEvents.dispatchEvent(new BridgeEvent("show-keyboard-shortcuts"));
1515
});
1616

1717
ipcRenderer.on("show-notification-settings", () => {
18-
bridgeEvents.emit("show-notification-settings");
18+
bridgeEvents.dispatchEvent(new BridgeEvent("show-notification-settings"));
1919
});
2020

2121
window.addEventListener("load", () => {

0 commit comments

Comments
 (0)