UNPKG

worker-factory

Version:

A little factory function to create a JSON-RPC based Web Worker implementation.

28 lines (22 loc) 1.26 kB
import { createMessageHandler } from './helpers/create-message-handler'; import { extendWorkerImplementation } from './helpers/extend-worker-implementation'; import { isSupportingTransferables } from './helpers/is-supporting-transferables'; import { IReceiver, IWorkerDefinition } from './interfaces'; import { TDestroyWorkerFunction, TWorkerImplementation } from './types'; /* * @todo Explicitly referencing the barrel file seems to be necessary when enabling the * isolatedModules compiler option. */ export * from './interfaces/index'; export * from './types/index'; export const createWorker = <WorkerDefinition extends IWorkerDefinition>( receiver: IReceiver, workerImplementation: TWorkerImplementation<WorkerDefinition>, isSupportedFunction: () => boolean | Promise<boolean> = () => true ): TDestroyWorkerFunction => { const fullWorkerImplementation = extendWorkerImplementation<WorkerDefinition>(createWorker, workerImplementation, isSupportedFunction); const messageHandler = createMessageHandler(receiver, fullWorkerImplementation); receiver.addEventListener('message', messageHandler); return () => receiver.removeEventListener('message', messageHandler); }; export { isSupportingTransferables as isSupported };