]> git.codecow.com Git - libnemo.git/commitdiff
Enable worker communications in node environment.
authorChris Duncan <chris@zoso.dev>
Fri, 18 Jul 2025 21:25:58 +0000 (14:25 -0700)
committerChris Duncan <chris@zoso.dev>
Fri, 18 Jul 2025 21:25:58 +0000 (14:25 -0700)
src/lib/workers/worker-interface.ts

index c9157608c62f04b8dec240c68a7cd55e9a19adc5..13e722d4e501c4b3b03ffc91e7189ce8b5ec9f7d 100644 (file)
@@ -20,6 +20,7 @@ import { Data, Headers } from '#types'
 * `work()` function. See the documentation of those functions for details.
 */
 export abstract class WorkerInterface {
+       static parentPort: any
        /**
        * Processes data through a worker.
        *
@@ -32,6 +33,7 @@ export abstract class WorkerInterface {
        * @returns Promise for processed data
        */
        static async work (headers: Headers | null, data?: Data): Promise<any> {
+               NODE: this.parentPort = (await import('node:worker_threads')).parentPort
                return new Promise(async (resolve, reject): Promise<void> => {
                        try {
                                let x, y = new ArrayBuffer(0)
@@ -77,7 +79,7 @@ export abstract class WorkerInterface {
        * ```
        */
        static listen (): void {
-               addEventListener('message', (message: MessageEvent<any>): void => {
+               const listener = (message: MessageEvent<any>): void => {
                        const { name, headers, data } = message.data
                        if (name === 'STOP') {
                                close()
@@ -85,6 +87,8 @@ export abstract class WorkerInterface {
                        } else {
                                this.work(headers, data).then(this.report).catch(this.report)
                        }
-               })
+               }
+               BROWSER: addEventListener('message', listener)
+               NODE: this.parentPort?.on('message', listener)
        }
 }