vite-plugin-sharedworker
Version:
Make SharedWorker works like Remote Procedure Call easily
49 lines (44 loc) • 1.69 kB
TypeScript
type MessageCallback<T> = (this: Event, data: T) => void | Promise<void>;
interface SharedWorkerServer {
ports(): MessagePort[];
addMessageListener<T>(fn: MessageCallback<T>): void;
dispatch(port: MessagePort, data: any): void;
broadcast(data: any): void;
}
interface SharedWorkerClient {
addMessageListener<T>(fn: MessageCallback<T>): void;
dispatch(data: any): void;
}
interface RpcPayload {
id: string;
name: string;
args: any;
}
type Payload = {
command: 'rpc';
data: RpcPayload;
} | {
command: 'broadcast';
data: any;
} | {
command: 'ping';
};
declare function makeRpcPayload(id: string, name: string, args: any): Payload;
declare function makeBroadcastPayload(data: any): Payload;
declare function makePingPayload(): Payload;
declare function parsePayload(payload: Payload): Payload | undefined;
/// <reference lib="dom" />
/// <reference lib="webworker" />
type _SharedWorkerServer = SharedWorkerServer;
type _SharedWorkerClient = SharedWorkerClient;
declare global {
export type SharedWorkerServer = _SharedWorkerServer;
export type SharedWorkerClient = _SharedWorkerClient;
}
type Fn = (...args: any[]) => any;
declare function defineSharedWorker(self: SharedWorkerGlobalScope, fns: Fn[]): SharedWorkerServer;
declare function defineClientFactory(worker: SharedWorker): {
defineFunction(name: string): (...args: any[]) => Promise<unknown>;
defineClient(): SharedWorkerClient;
};
export { type MessageCallback, type Payload, type RpcPayload, type SharedWorkerClient, type SharedWorkerServer, defineClientFactory, defineSharedWorker, makeBroadcastPayload, makePingPayload, makeRpcPayload, parsePayload };