comctx
Version:
Cross-context RPC solution with type safety and flexible adapters.
20 lines (18 loc) • 634 B
text/typescript
import { Adapter, SendMessage, OnMessage, Message } from 'comctx'
export default class InjectAdapter implements Adapter {
worker: SharedWorker
constructor(path: string | URL) {
this.worker = new SharedWorker(path, { type: 'module' })
this.worker.port.start()
}
sendMessage: SendMessage = (message) => {
this.worker.port.postMessage(message)
}
onMessage: OnMessage = (callback) => {
const handler = (event: MessageEvent<Message>) => callback(event.data)
this.worker.port.addEventListener('message', handler)
return () => {
this.worker.port.removeEventListener('message', handler)
}
}
}