import { ElectronMessagePortPolyfill } from '../interfaces/polyfill.interface.cjs'; interface BetterMessagePortOptions { additionalMessagePayload?: Record; } interface BetterMessagePortResult { name: string; type: 'result'; error?: boolean; result?: unknown; errorMessage?: string; } interface BetterMessagePortSend { name: string; type: 'send'; args: unknown[]; isSync?: boolean; messageId?: string; } type BetterMessagePayload = BetterMessagePortSend | BetterMessagePortResult; type FuncType = (...args: any) => any; type MessagePortType = MessagePort | ElectronMessagePortPolyfill; type ExtractParams = T[K] extends FuncType ? Parameters : T[K] extends Array ? T[K] : [T[K]]; type ExtractReturnType = T[K] extends FuncType ? ReturnType : void; interface NormalizeMessagePort { postMessage: MessagePortType['postMessage']; onMessage(callback: (event: { data: T; }) => void): void; offMessage(callback: (event: { data: T; }) => void): void; } type PostMessageFunc = (data: unknown) => void; interface BetterMessagePortAsyncOptions { eventTimeoutMs?: number; } declare class BetterMessagePortAsync { private postMessage; private options?; private messages; private listeners; constructor(postMessage: PostMessageFunc, options?: BetterMessagePortAsyncOptions | undefined); messageHandler(data: BetterMessagePayload): Promise; on>(name: K, callback: (...args: ExtractParams) => Promise>): () => boolean; off(name: K): void; sendMessage(name: K | { name: K; messageId: string; }, ...args: ExtractParams): Promise>; destroy(): void; } declare class BetterMessagePortSync { private postMessage; private listeners; constructor(postMessage: PostMessageFunc); messageHandler(data: BetterMessagePayload): void; on(name: K, callback: (...args: ExtractParams) => void): () => void; off(name: K, callback: (...args: ExtractParams) => void): void; sendMessage(name: K, ...args: ExtractParams): void; destroy(): void; } declare class BetterMessagePort { private messagePort; sync: BetterMessagePortSync; async: BetterMessagePortAsync; private nomalizedMessagePort; constructor(messagePort: MessagePortType, options?: BetterMessagePortAsyncOptions); private onMessage; destroy(): void; static normalizeMessagePort(messagePort: MessagePortType): NormalizeMessagePort; static createStandalone(type: 'async', port: MessagePortType): BetterMessagePortAsync; static createStandalone(type: 'sync', port: MessagePortType): BetterMessagePortSync; } export { type BetterMessagePayload, BetterMessagePortAsync, type BetterMessagePortAsyncOptions, type BetterMessagePortOptions, type BetterMessagePortResult, type BetterMessagePortSend, BetterMessagePortSync, type NormalizeMessagePort, BetterMessagePort as default };