import { MessageChannel } from 'node:worker_threads'
+import { EventEmitter } from 'node:events'
import { CircularArray } from '../circular-array'
import type { Task } from '../utility-types'
import { DEFAULT_TASK_NAME, getWorkerId, getWorkerType } from '../utils'
type IWorkerNode,
type StrategyData,
type WorkerInfo,
- type WorkerNodeEventDetail,
type WorkerType,
WorkerTypes,
type WorkerUsage
* @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
*/
export class WorkerNode<Worker extends IWorker, Data = unknown>
- extends EventTarget
+ extends EventEmitter
implements IWorkerNode<Worker, Data> {
/** @inheritdoc */
public readonly worker: Worker
const tasksQueueSize = this.tasksQueue.push(task)
if (this.hasBackPressure() && !this.onBackPressureStarted) {
this.onBackPressureStarted = true
- this.dispatchEvent(
- new CustomEvent<WorkerNodeEventDetail>('backPressure', {
- detail: { workerId: this.info.id as number }
- })
- )
+ this.emit('backPressure', { workerId: this.info.id as number })
this.onBackPressureStarted = false
}
return tasksQueueSize
const tasksQueueSize = this.tasksQueue.unshift(task)
if (this.hasBackPressure() && !this.onBackPressureStarted) {
this.onBackPressureStarted = true
- this.dispatchEvent(
- new CustomEvent<WorkerNodeEventDetail>('backPressure', {
- detail: { workerId: this.info.id as number }
- })
- )
+ this.emit('backPressure', { workerId: this.info.id as number })
this.onBackPressureStarted = false
}
return tasksQueueSize