message-port-api
Version:
A simple package that allows you to simplify the use of `MessagePort API` more easily (Worker, IFrame...)
39 lines (36 loc) • 1.96 kB
TypeScript
interface Sender {
addEventListener: (name: "message", handler: (event: MessageEvent<unknown>) => void) => void;
removeEventListener: (name: "message", handler: (event: MessageEvent<unknown>) => void) => void;
}
interface Receiver {
postMessage: (data: any, targetOrigin?: string | WindowPostMessageOptions) => void;
}
interface IRequest {
id: string;
name: string;
arguments: unknown[];
}
interface IResponseResult {
id: string;
name: string;
result: unknown;
}
interface IResponseError {
id: string;
name: string;
error: string;
}
interface Receive {
<Controllers extends Record<string, (...args: any[]) => any>>(controllers: Controllers, targetOrigin?: string): Controllers;
<Controllers extends Record<string, (...args: any[]) => any>>(controllers: Controllers, optionsTargetOrigin?: WindowPostMessageOptions): Controllers;
cancel(): void;
}
declare function useReceive(sender: Sender & Receiver, receiver?: Receiver): Receive;
declare function useReceive(sender: Sender, receiver: Receiver): Receive;
interface Send {
<Controllers extends Record<string, (...args: any[]) => any>, Name extends keyof Controllers = keyof Controllers>(name: Name, args: Controllers[Name] extends (...args: infer A) => any ? A : unknown[], targetOrigin?: string): Promise<Awaited<ReturnType<Controllers[Name]>>>;
<Controllers extends Record<string, (...args: any[]) => any>, Name extends keyof Controllers = keyof Controllers>(name: Name, args: Controllers[Name] extends (...args: infer A) => any ? A : unknown[], postMessageOptions?: WindowPostMessageOptions): Promise<Awaited<ReturnType<Controllers[Name]>>>;
}
declare function useSend(sender: Sender & Receiver, receiver?: Receiver, timeout?: false | number): Send;
declare function useSend(sender: Sender, receiver: Receiver, timeout?: false | number): Send;
export { IRequest, IResponseError, IResponseResult, Receiver, Sender, useReceive, useSend };