UNPKG

vite-plugin-sharedworker

Version:

Make SharedWorker works like Remote Procedure Call easily

49 lines (44 loc) 1.69 kB
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 };