declare module 'postmsg-rpc' { export type ClientMessageData = { sender: 'postmsg-rpc/client'; id: string; func: string; args?: unknown[] | string; }; export type ServerMessageData = { sender: 'postmsg-rpc/server'; id: string; res: unknown | string; }; export type MessageData = ClientMessageData | ServerMessageData; export type PostmsgRpcOptions = { addListener(name: 'message', fn: Function): void; removeListener(name: 'message', fn: Function): void; postMessage(data: MessageData): void; getMessageData(message: unknown): unknown; }; export function expose( funcName: string, func: Function, opts: PostmsgRpcOptions ): { close: () => void }; type AsyncFn = (...args: unknown[]) => Promise; export function caller( funcName: string, opts: PostmsgRpcOptions ): T extends (...args: infer Args) => Promise ? (...args: Args) => CancelablePromise : never; } declare module 'inline-entry-loader!*' { const entry: string; export default entry; } declare type CancelablePromise = Promise & { cancel(): void }; declare type CancelableMethods = { [k in keyof T]: T[k] extends (...args: infer Args) => infer ReturnVal ? ( ...args: Args ) => ReturnVal extends Promise ? CancelablePromise : CancelablePromise : T[k]; };