@zlepper/rpc
Version:
Allows RPC from the main thread to a background worker thread (Of any kind), using ES6 classes.
26 lines (25 loc) • 1.21 kB
TypeScript
export type FunctionArguments<TProperty> = TProperty extends (...args: infer TArgs) => any ? TArgs : `Property is not a function`[];
export interface CrossInvocation<T extends object = any, TPropertyName extends keyof T = any> {
readonly refId: number;
readonly propertyName: TPropertyName;
readonly args: FunctionArguments<T[TPropertyName]>;
}
export interface FailedCrossInvocationResult {
kind: 'message';
readonly refId: number;
readonly success: false;
readonly error: any;
}
export interface SuccessfulCrossInvocationResult<T extends object, TPropertyName extends keyof T> {
kind: 'message';
readonly refId: number;
readonly success: true;
readonly result: T[TPropertyName];
}
export interface CrossEvent<TEvent extends object, TEventName extends keyof TEvent> {
kind: 'event';
readonly refId: -1;
readonly type: TEventName;
readonly data: TEvent[TEventName];
}
export type CrossInvocationResult<T extends object = any, TPropertyName extends keyof T = any, TEvent extends object = any, TEventName extends keyof TEvent = any> = FailedCrossInvocationResult | SuccessfulCrossInvocationResult<T, TPropertyName> | CrossEvent<TEvent, TEventName>;