1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Cleanup @k8slens/messaging and friends

- To fix type errors

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-03-21 12:36:22 -04:00
parent ea7a24d016
commit a445fdd20d
5 changed files with 46 additions and 38 deletions

View File

@ -1,5 +0,0 @@
export interface Channel<MessageTemplate = void, ReturnTemplate = void> {
id: string;
_messageTemplate?: MessageTemplate;
_returnTemplate?: ReturnTemplate;
}

View File

@ -6,8 +6,6 @@ export { getMessageChannel } from "./message/get-message-channel";
export { requestFromChannelInjectionToken } from "./request/request-from-channel-injection-token"; export { requestFromChannelInjectionToken } from "./request/request-from-channel-injection-token";
export type { Channel } from "./channel.no-coverage";
export { sendMessageToChannelInjectionToken } from "./message/message-to-channel-injection-token"; export { sendMessageToChannelInjectionToken } from "./message/message-to-channel-injection-token";
export type { SendMessageToChannel } from "./message/message-to-channel-injection-token"; export type { SendMessageToChannel } from "./message/message-to-channel-injection-token";

View File

@ -6,17 +6,24 @@ import { getStartableStoppable, StartableStoppable } from "@k8slens/startable-st
import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
import { IComputedValue, reaction } from "mobx"; import { IComputedValue, reaction } from "mobx";
import { messageChannelListenerInjectionToken } from "../message/message-channel-listener-injection-token"; import {
import { requestChannelListenerInjectionToken } from "../request/request-channel-listener-injection-token"; MessageChannel,
messageChannelListenerInjectionToken,
} from "../message/message-channel-listener-injection-token";
import {
RequestChannel,
requestChannelListenerInjectionToken,
} from "../request/request-channel-listener-injection-token";
import { enlistRequestChannelListenerInjectionToken } from "../request/enlist-request-channel-listener-injection-token"; import { enlistRequestChannelListenerInjectionToken } from "../request/enlist-request-channel-listener-injection-token";
import type { Channel } from "../channel.no-coverage";
export type ListeningOfChannels = StartableStoppable; export type ListeningOfChannels = StartableStoppable;
export const listeningOfChannelsInjectionToken = getInjectionToken<ListeningOfChannels>({ export const listeningOfChannelsInjectionToken = getInjectionToken<ListeningOfChannels>({
id: "listening-of-channels-injection-token", id: "listening-of-channels-injection-token",
}); });
const listening = <T extends { id: string; channel: Channel<unknown> }>( const listening = <
T extends { id: string; channel: MessageChannel<any> | RequestChannel<any, any> },
>(
channelListeners: IComputedValue<T[]>, channelListeners: IComputedValue<T[]>,
enlistChannelListener: (listener: T) => () => void, enlistChannelListener: (listener: T) => () => void,
getId: (listener: T) => string, getId: (listener: T) => string,

View File

@ -1,3 +1,4 @@
import type { Disposer } from "@k8slens/utilities/index";
import { getInjectionToken } from "@ogre-tools/injectable"; import { getInjectionToken } from "@ogre-tools/injectable";
import type { import type {
@ -5,9 +6,9 @@ import type {
RequestChannelListener, RequestChannelListener,
} from "./request-channel-listener-injection-token"; } from "./request-channel-listener-injection-token";
export type EnlistRequestChannelListener = ( export type EnlistRequestChannelListener = <Request, Response>(
listener: RequestChannelListener<RequestChannel<unknown, unknown>>, listener: RequestChannelListener<RequestChannel<Request, Response>>,
) => () => void; ) => Disposer;
export const enlistRequestChannelListenerInjectionToken = export const enlistRequestChannelListenerInjectionToken =
getInjectionToken<EnlistRequestChannelListener>({ getInjectionToken<EnlistRequestChannelListener>({

View File

@ -1,5 +1,11 @@
import type { DiContainer } from "@ogre-tools/injectable"; import type { DiContainer } from "@ogre-tools/injectable";
import type { Channel, MessageChannelHandler, RequestChannelHandler } from "@k8slens/messaging"; import type {
MessageChannel,
MessageChannelHandler,
MessageChannelListener,
RequestChannel,
RequestChannelHandler,
} from "@k8slens/messaging";
import { import {
enlistMessageChannelListenerInjectionToken, enlistMessageChannelListenerInjectionToken,
@ -20,6 +26,8 @@ export type MessageBridgeFake = {
setAsync: (value: boolean) => void; setAsync: (value: boolean) => void;
}; };
type MessageHandlers = Set<MessageChannelHandler<MessageChannel<any>>>;
const overrideMessaging = ({ const overrideMessaging = ({
di, di,
messageListenersByDi, messageListenersByDi,
@ -28,13 +36,13 @@ const overrideMessaging = ({
}: { }: {
di: DiContainer; di: DiContainer;
messageListenersByDi: Map<DiContainer, Map<string, Set<MessageChannelHandler<Channel>>>>; messageListenersByDi: Map<DiContainer, Map<string, MessageHandlers>>;
messagePropagationBuffer: Set<{ resolve: () => Promise<void> }>; messagePropagationBuffer: Set<{ resolve: () => Promise<void> }>;
getAsyncModeStatus: () => boolean; getAsyncModeStatus: () => boolean;
}) => { }) => {
const messageHandlersByChannel = new Map<string, Set<MessageChannelHandler<Channel>>>(); const messageHandlersByChannel = new Map<string, MessageHandlers>();
messageListenersByDi.set(di, messageHandlersByChannel); messageListenersByDi.set(di, messageHandlersByChannel);
@ -64,7 +72,10 @@ const overrideMessaging = ({
}); });
}); });
di.override(enlistMessageChannelListenerInjectionToken, () => (listener) => { di.override(
enlistMessageChannelListenerInjectionToken,
() =>
<T>(listener: MessageChannelListener<MessageChannel<T>>) => {
if (!messageHandlersByChannel.has(listener.channel.id)) { if (!messageHandlersByChannel.has(listener.channel.id)) {
messageHandlersByChannel.set(listener.channel.id, new Set()); messageHandlersByChannel.set(listener.channel.id, new Set());
} }
@ -76,18 +87,21 @@ const overrideMessaging = ({
return () => { return () => {
handlerSet?.delete(listener.handler); handlerSet?.delete(listener.handler);
}; };
}); },
);
}; };
type RequestHandlers = Set<RequestChannelHandler<RequestChannel<any, any>>>;
const overrideRequesting = ({ const overrideRequesting = ({
di, di,
requestListenersByDi, requestListenersByDi,
}: { }: {
di: DiContainer; di: DiContainer;
requestListenersByDi: Map<DiContainer, Map<string, Set<RequestChannelHandler<Channel>>>>; requestListenersByDi: Map<DiContainer, Map<string, RequestHandlers>>;
}) => { }) => {
const requestHandlersByChannel = new Map<string, Set<RequestChannelHandler<Channel>>>(); const requestHandlersByChannel = new Map<string, RequestHandlers>();
requestListenersByDi.set(di, requestHandlersByChannel); requestListenersByDi.set(di, requestHandlersByChannel);
@ -141,15 +155,8 @@ const overrideRequesting = ({
}; };
export const getMessageBridgeFake = (): MessageBridgeFake => { export const getMessageBridgeFake = (): MessageBridgeFake => {
const messageListenersByDi = new Map< const messageListenersByDi = new Map<DiContainer, Map<string, MessageHandlers>>();
DiContainer, const requestListenersByDi = new Map<DiContainer, Map<string, RequestHandlers>>();
Map<string, Set<MessageChannelHandler<Channel>>>
>();
const requestListenersByDi = new Map<
DiContainer,
Map<string, Set<RequestChannelHandler<Channel>>>
>();
const messagePropagationBuffer = new Set<AsyncFnMock<() => void>>(); const messagePropagationBuffer = new Set<AsyncFnMock<() => void>>();