narraleaf
Version:
Create your visual novel with Electron and React
46 lines (45 loc) • 1.36 kB
TypeScript
export declare enum IPCType {
Host = "host",
Client = "client"
}
export declare enum IPCMessageType {
message = "message",
request = "request"
}
export declare enum SubNamespace {
Reply = "reply"
}
export type IPCConfiguration = {
type: IPCMessageType.message;
consumer: IPCType;
data: Record<any, any>;
response: never;
} | {
type: IPCMessageType.request;
consumer: IPCType;
data: Record<any, any>;
response: Record<any, any>;
};
type Opposite<T extends IPCType> = T extends IPCType.Host ? IPCType.Client : IPCType.Host;
export type OnlyMessage<T extends Record<any, IPCConfiguration>, U extends IPCType> = {
[K in keyof T]: T[K] extends {
consumer: Opposite<U>;
} ? T[K] extends {
type: IPCMessageType.message;
} ? K : never : never;
};
export type OnlyRequest<T extends Record<any, IPCConfiguration>, U extends IPCType> = {
[K in keyof T]: T[K] extends {
consumer: Opposite<U>;
} ? T[K] extends {
type: IPCMessageType.request;
response: Record<any, any>;
} ? K : never : never;
};
export declare class IPC<T extends Record<any, IPCConfiguration>, U extends IPCType> {
type: U;
namespace: string;
protected constructor(type: U, namespace: string);
protected getEventName(key: keyof T, sub?: SubNamespace): string;
}
export {};