UNPKG

nanolith

Version:

Multi-threading in no time with seamless TypeScript support.

1 lines 1.16 kB
import{parentPort,workerData,threadId}from"worker_threads";import{applyMessengerTransferObjects}from"./utilities.js";import{Messenger}from"../messenger/index.js";export async function serviceWorkerHandler(e){process.prependListener("uncaughtException",(e=>{const t={type:6,data:e};parentPort.postMessage(t)})),process.on("exit",(e=>{const t={type:8,code:e};parentPort?.postMessage(t)})),parentPort.on("message",(async t=>{try{switch(t?.type){case 1:{const{name:s,params:r,key:a}=t;if(!e?.[s]||"function"!=typeof e[s])throw new Error(`A task with the name ${s} doesn't exist!`);await(e.__beforeTask?.({name:s,inService:!0}));const n=await e[s](...r);await(e.__afterTask?.({name:s,inService:!0}));const o={type:3,key:a,data:n};parentPort.postMessage(o);break}case 3:{const{data:e}=t;workerData.messengers[e.__messengerID]=new Messenger(e);const s={type:5,data:t.data.__messengerID};parentPort?.postMessage(s);break}default:return}}catch(e){const s={type:4,key:t.key,data:e};parentPort.postMessage(s)}}));const{messengerTransfers:t}=workerData;t.length&&applyMessengerTransferObjects(t),await(e.__initializeService?.(threadId)),parentPort.postMessage({type:7})}