UNPKG

@evolu/web

Version:
43 lines (42 loc) 1.12 kB
/** * Typed wrapper for Web Worker * * While Comlink DX is nice, there are still memory leaks and unresolved bugs. * Use plain Web Worker with a typed wrapper if maximum performance and * reliability are required. * * @module */ import { constVoid } from "@evolu/common"; /** * Wraps a Web Worker to provide a typed interface for sending and receiving * messages. */ export const wrapWebWorker = (createWebWorker) => { // Server. if (typeof document === "undefined") return { postMessage: constVoid, onMessage: constVoid, }; const webWorker = createWebWorker(); const worker = { postMessage: (message) => { webWorker.postMessage(message); }, onMessage: (callback) => { webWorker.onmessage = (event) => { callback(event.data); }; }, }; return worker; }; export const wrapWebWorkerSelf = (worker) => { worker.onMessage((message) => { postMessage(message); }); self.onmessage = (event) => { worker.postMessage(event.data); }; };