stagehand
Version:
A type-safe library for communicating between JS processes, workers, or other message-passing boundaries.
26 lines (25 loc) • 1.05 kB
TypeScript
import FunctionHandleRegistry from './function-handle-registry';
import { MessageEndpoint } from '.';
/**
* Coordinates command/response pairs across a given `MessageEndpoint`, returning
* a promise for each outgoing command and dispatching incoming ones to a given
* executor.
*/
export default class CommandCoordinator<Commands> {
private endpoint;
private handleRegistry;
private executor;
private nextSeq;
private pendingCommands;
constructor(endpoint: MessageEndpoint, handleRegistry: FunctionHandleRegistry, executor: Commands);
sendCommand<Name extends keyof Commands>(name: Name, ...args: CommandParams<Commands[Name]>): Promise<CommandReturn<Commands[Name]>>;
private messageReceived;
private dispatchResponse;
private dispatchCommand;
private sendMessage;
private isResponse;
private isCommand;
}
type CommandParams<T> = T extends (...params: infer Params) => any ? Params : never;
type CommandReturn<T> = T extends (...params: any[]) => infer Return ? Return : never;
export {};