File size: 778 Bytes
88cc829
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
"use client";

import { useState } from "react";

export interface MessageEventHandler {
    (event: MessageEvent): void;
}

export function useWorker(messageEventHandler: MessageEventHandler): Worker | any {
    // Create new worker once and never again
    const [worker] = useState(() => createWorker(messageEventHandler));

    return worker;
}


function createWorker(messageEventHandler: MessageEventHandler): Worker | null {
    if (typeof window === 'undefined') {
        // We're running in a non-browser environment (like the server side of Next.js)
        return null;
    }

    const worker = new Worker(new URL("../worker.js", import.meta.url), {
        type: "module",
    });

    worker.addEventListener("message", messageEventHandler);
    return worker;
}