+ *
+ * @typeParam Worker - Type of worker.
+ * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
+ * @internal
+ */
+export interface IWorkerNode<Worker extends IWorker, Data = unknown>
+ extends EventEmitter {
+ /**
+ * Worker.
+ */
+ readonly worker: Worker
+ /**
+ * Worker info.
+ */
+ readonly info: WorkerInfo
+ /**
+ * Worker usage statistics.
+ */
+ readonly usage: WorkerUsage
+ /**
+ * Worker choice strategy data.
+ * This is used to store data that are specific to the worker choice strategy.
+ */
+ strategyData?: StrategyData
+ /**
+ * Message channel (worker thread only).
+ */
+ readonly messageChannel?: MessageChannel
+ /**
+ * Tasks queue back pressure size.
+ * This is the number of tasks that can be enqueued before the worker node has back pressure.
+ */
+ tasksQueueBackPressureSize: number
+ /**
+ * Tasks queue size.
+ *
+ * @returns The tasks queue size.
+ */
+ readonly tasksQueueSize: () => number
+ /**
+ * Enqueue task.
+ *
+ * @param task - The task to queue.
+ * @returns The tasks queue size.
+ */
+ readonly enqueueTask: (task: Task<Data>) => number
+ /**
+ * Dequeue task.
+ *
+ * @param bucket - The prioritized bucket to dequeue from. @defaultValue 0
+ * @returns The dequeued task.
+ */
+ readonly dequeueTask: (bucket?: number) => Task<Data> | undefined
+ /**
+ * Dequeue last prioritized task.
+ *
+ * @returns The dequeued task.
+ */
+ readonly dequeueLastPrioritizedTask: () => Task<Data> | undefined
+ /**
+ * Clears tasks queue.
+ */
+ readonly clearTasksQueue: () => void
+ /**
+ * Whether the worker node has back pressure (i.e. its tasks queue is full).
+ *
+ * @returns `true` if the worker node has back pressure, `false` otherwise.
+ */
+ readonly hasBackPressure: () => boolean
+ /**
+ * Terminates the worker node.
+ */
+ readonly terminate: () => Promise<void>
+ /**
+ * Registers a worker event handler.
+ *
+ * @param event - The event.
+ * @param handler - The event handler.
+ */
+ readonly registerWorkerEventHandler: (
+ event: string,
+ handler: EventHandler<Worker>
+ ) => void
+ /**
+ * Registers once a worker event handler.
+ *
+ * @param event - The event.
+ * @param handler - The event handler.
+ */
+ readonly registerOnceWorkerEventHandler: (
+ event: string,
+ handler: EventHandler<Worker>
+ ) => void
+ /**
+ * Gets task function worker usage statistics.
+ *
+ * @param name - The task function name.
+ * @returns The task function worker usage statistics if the task function worker usage statistics are initialized, `undefined` otherwise.
+ */
+ readonly getTaskFunctionWorkerUsage: (name: string) => WorkerUsage | undefined
+ /**
+ * Deletes task function worker usage statistics.
+ *
+ * @param name - The task function name.
+ * @returns `true` if the task function worker usage statistics were deleted, `false` otherwise.
+ */
+ readonly deleteTaskFunctionWorkerUsage: (name: string) => boolean
+}
+
+/**
+ * Worker node event detail.
+ *
+ * @internal