From 9e4f2352a7dd8c93f4f833757c6672d70640cc9f Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 31 Jan 2023 09:57:38 -0500 Subject: [PATCH] Fix type error via DRY Signed-off-by: Sebastian Malton --- ...essage-channel-listener-injection-token.ts | 19 +++++++++++++++++ ...ist-message-channel-listener.injectable.ts | 21 ++----------------- ...ist-message-channel-listener.injectable.ts | 21 ++----------------- 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts index bd9f6ca010..b7fff879a8 100644 --- a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts +++ b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts @@ -11,3 +11,22 @@ export type EnlistMessageChannelListener = (listener: MessageChannelListener< export const enlistMessageChannelListenerInjectionToken = getInjectionToken({ id: "enlist-message-channel-listener", }); + +export interface MessageChannelEmitter { + on(channel: string, listener: (event: Event, ...args: any[]) => void): void; + off(channel: string, listener: (event: Event, ...args: any[]) => void): void; +} + +export const enlistMessageChannelListenerFor = (emitter: MessageChannelEmitter) => ( + ({ channel, handler }: MessageChannelListener>) => { + const nativeOnCallback = (_: Event, message: T) => { + handler(message); + }; + + emitter.on(channel.id, nativeOnCallback); + + return () => { + emitter.off(channel.id, nativeOnCallback); + }; + } +); diff --git a/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts index db6435ea56..704ba588a1 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts @@ -3,29 +3,12 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { IpcMainEvent } from "electron"; -import { enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; +import { enlistMessageChannelListenerFor, enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; const enlistMessageChannelListenerInjectable = getInjectable({ id: "enlist-message-channel-listener-for-main", - - instantiate: (di) => { - const ipcMain = di.inject(ipcMainInjectionToken); - - return ({ channel, handler }) => { - const nativeOnCallback = (_: IpcMainEvent, message: unknown) => { - handler(message); - }; - - ipcMain.on(channel.id, nativeOnCallback); - - return () => { - ipcMain.off(channel.id, nativeOnCallback); - }; - }; - }, - + instantiate: (di) => enlistMessageChannelListenerFor(di.inject(ipcMainInjectionToken)), injectionToken: enlistMessageChannelListenerInjectionToken, }); diff --git a/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts b/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts index 1e5b14bb40..b4141fa5ab 100644 --- a/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts +++ b/packages/core/src/renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts @@ -4,28 +4,11 @@ */ import ipcRendererInjectable from "../ipc-renderer.injectable"; import { getInjectable } from "@ogre-tools/injectable"; -import type { IpcRendererEvent } from "electron"; -import { enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; +import { enlistMessageChannelListenerFor, enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; const enlistMessageChannelListenerInjectable = getInjectable({ id: "enlist-message-channel-listener-for-renderer", - - instantiate: (di) => { - const ipcRenderer = di.inject(ipcRendererInjectable); - - return ({ channel, handler }) => { - const nativeCallback = (_: IpcRendererEvent, message: unknown) => { - handler(message); - }; - - ipcRenderer.on(channel.id, nativeCallback); - - return () => { - ipcRenderer.off(channel.id, nativeCallback); - }; - }; - }, - + instantiate: (di) => enlistMessageChannelListenerFor(di.inject(ipcRendererInjectable)), injectionToken: enlistMessageChannelListenerInjectionToken, });