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:
parent
99b1f20d17
commit
a98b3e5705
@ -5,10 +5,6 @@
|
|||||||
import { getInjectionToken } from "@ogre-tools/injectable";
|
import { getInjectionToken } from "@ogre-tools/injectable";
|
||||||
import type { Route } from "./front-end-route-injection-token";
|
import type { Route } from "./front-end-route-injection-token";
|
||||||
|
|
||||||
type InferParametersFrom<TRoute> = TRoute extends Route<infer TParameters>
|
|
||||||
? TParameters
|
|
||||||
: never;
|
|
||||||
|
|
||||||
type RequiredKeys<T> = Exclude<
|
type RequiredKeys<T> = Exclude<
|
||||||
{
|
{
|
||||||
[K in keyof T]: T extends Record<K, T[K]> ? K : never;
|
[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 without parameters, with parameters
|
||||||
// - Navigating to route with required parameters, without parameters
|
// - Navigating to route with required parameters, without parameters
|
||||||
type Parameters<TParameters> = TParameters extends void
|
type Parameters<TParameters> = TParameters extends void
|
||||||
? {}
|
? { parameters?: never }
|
||||||
: ObjectContainsNoRequired<TParameters> extends true
|
: ObjectContainsNoRequired<TParameters> extends true
|
||||||
? { parameters?: TParameters }
|
? { parameters?: TParameters }
|
||||||
: { parameters: TParameters };
|
: { parameters: TParameters };
|
||||||
|
|
||||||
export type NavigateToRouteOptions<TRoute> = Parameters<
|
export type NavigateToRouteOptions<TParameter> = Parameters<TParameter> & {
|
||||||
InferParametersFrom<TRoute>
|
|
||||||
> & {
|
|
||||||
query?: Record<string, string>;
|
query?: Record<string, string>;
|
||||||
fragment?: string;
|
fragment?: string;
|
||||||
withoutAffectingBackButton?: boolean;
|
withoutAffectingBackButton?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type NavigateToRoute = <TRoute extends Route<unknown>>(
|
export type NavigateToRoute = <TRoute extends Route<TParameter>, TParameter extends object>(
|
||||||
route: TRoute,
|
route: TRoute,
|
||||||
options?: NavigateToRouteOptions<TRoute>) => void;
|
options?: NavigateToRouteOptions<TParameter>,
|
||||||
|
) => void;
|
||||||
|
|
||||||
export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>(
|
export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>(
|
||||||
{ id: "navigate-to-route-injection-token" },
|
{ id: "navigate-to-route-injection-token" },
|
||||||
|
|||||||
@ -13,15 +13,14 @@ const navigateToRouteInjectable = getInjectable({
|
|||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const navigateToUrl = di.inject(navigateToUrlInjectionToken);
|
const navigateToUrl = di.inject(navigateToUrlInjectionToken);
|
||||||
|
|
||||||
return async (route, options) => {
|
return (route, options) => {
|
||||||
const url = buildURL(route.path, {
|
const url = buildURL(route.path, {
|
||||||
// TODO: enhance typing
|
params: options?.parameters,
|
||||||
params: options?.parameters as any,
|
|
||||||
query: options?.query,
|
query: options?.query,
|
||||||
fragment: options?.fragment,
|
fragment: options?.fragment,
|
||||||
});
|
});
|
||||||
|
|
||||||
await navigateToUrl(url, options);
|
navigateToUrl(url, options);
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
if (listeners.size === 0) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Tried to send message to channel "${channelId}" but there where no listeners. Current channels with listeners: "${[
|
`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));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -4,14 +4,14 @@
|
|||||||
*/
|
*/
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import type { RequestChannel } from "../../common/utils/channel/request-channel-injection-token";
|
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 enlistRequestChannelListenerInjectableInMain from "../../main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable";
|
||||||
import requestFromChannelInjectable from "../../renderer/utils/channel/request-from-channel.injectable";
|
import requestFromChannelInjectable from "../../renderer/utils/channel/request-from-channel.injectable";
|
||||||
|
|
||||||
export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
|
export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
|
||||||
const requestChannelListenerFakesForMain = new Map<
|
const requestChannelListenerFakesForMain = new Map<
|
||||||
string,
|
string,
|
||||||
RequestChannelHandlerDescriptor<RequestChannel<any, any>>
|
RequestChannelHandler<RequestChannel<any, any>>
|
||||||
>();
|
>();
|
||||||
|
|
||||||
mainDi.override(
|
mainDi.override(
|
||||||
@ -24,14 +24,7 @@ export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
requestChannelListenerFakesForMain.set(
|
requestChannelListenerFakesForMain.set(listener.channel.id, listener);
|
||||||
listener.channel.id,
|
|
||||||
|
|
||||||
// TODO: Figure out typing
|
|
||||||
listener as unknown as RequestChannelHandlerDescriptor<
|
|
||||||
RequestChannel<any, any>
|
|
||||||
>,
|
|
||||||
);
|
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
requestChannelListenerFakesForMain.delete(listener.channel.id);
|
requestChannelListenerFakesForMain.delete(listener.channel.id);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user