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

Cleaning up some IPC types

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-06-08 15:31:10 -04:00
parent 99b1f20d17
commit a98b3e5705
4 changed files with 14 additions and 33 deletions

View File

@ -5,10 +5,6 @@
import { getInjectionToken } from "@ogre-tools/injectable";
import type { Route } from "./front-end-route-injection-token";
type InferParametersFrom<TRoute> = TRoute extends Route<infer TParameters>
? TParameters
: never;
type RequiredKeys<T> = Exclude<
{
[K in keyof T]: T extends Record<K, T[K]> ? K : never;
@ -30,22 +26,21 @@ type ObjectContainsNoRequired<T> = T extends ObjectContainingNoRequired<T>
// - Navigating to route without parameters, with parameters
// - Navigating to route with required parameters, without parameters
type Parameters<TParameters> = TParameters extends void
? {}
? { parameters?: never }
: ObjectContainsNoRequired<TParameters> extends true
? { parameters?: TParameters }
: { parameters: TParameters };
? { parameters?: TParameters }
: { parameters: TParameters };
export type NavigateToRouteOptions<TRoute> = Parameters<
InferParametersFrom<TRoute>
> & {
export type NavigateToRouteOptions<TParameter> = Parameters<TParameter> & {
query?: Record<string, string>;
fragment?: string;
withoutAffectingBackButton?: boolean;
};
export type NavigateToRoute = <TRoute extends Route<unknown>>(
export type NavigateToRoute = <TRoute extends Route<TParameter>, TParameter extends object>(
route: TRoute,
options?: NavigateToRouteOptions<TRoute>) => void;
options?: NavigateToRouteOptions<TParameter>,
) => void;
export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>(
{ id: "navigate-to-route-injection-token" },

View File

@ -13,15 +13,14 @@ const navigateToRouteInjectable = getInjectable({
instantiate: (di) => {
const navigateToUrl = di.inject(navigateToUrlInjectionToken);
return async (route, options) => {
return (route, options) => {
const url = buildURL(route.path, {
// TODO: enhance typing
params: options?.parameters as any,
params: options?.parameters,
query: options?.query,
fragment: options?.fragment,
});
await navigateToUrl(url, options);
navigateToUrl(url, options);
};
},

View File

@ -33,12 +33,6 @@ export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => {
);
}
if (data.length > 1) {
throw new Error(
`Tried to send message to channel "${channelId}" with more than one argument which is not supported in MessageChannelListener yet.`,
);
}
if (listeners.size === 0) {
throw new Error(
`Tried to send message to channel "${channelId}" but there where no listeners. Current channels with listeners: "${[
@ -47,7 +41,7 @@ export const overrideMessagingFromMainToWindow = (mainDi: DiContainer) => {
);
}
listeners.forEach((listener) => listener.handler(data[0]));
listeners.forEach((listener) => listener.handler(data));
},
);

View File

@ -4,14 +4,14 @@
*/
import type { DiContainer } from "@ogre-tools/injectable";
import type { RequestChannel } from "../../common/utils/channel/request-channel-injection-token";
import type { RequestChannelHandlerDescriptor } from "../../common/utils/channel/request-channel-listener-injection-token";
import type { RequestChannelHandler } from "../../common/utils/channel/request-channel-listener-injection-token";
import enlistRequestChannelListenerInjectableInMain from "../../main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable";
import requestFromChannelInjectable from "../../renderer/utils/channel/request-from-channel.injectable";
export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
const requestChannelListenerFakesForMain = new Map<
string,
RequestChannelHandlerDescriptor<RequestChannel<any, any>>
RequestChannelHandler<RequestChannel<any, any>>
>();
mainDi.override(
@ -24,14 +24,7 @@ export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
);
}
requestChannelListenerFakesForMain.set(
listener.channel.id,
// TODO: Figure out typing
listener as unknown as RequestChannelHandlerDescriptor<
RequestChannel<any, any>
>,
);
requestChannelListenerFakesForMain.set(listener.channel.id, listener);
return () => {
requestChannelListenerFakesForMain.delete(listener.channel.id);