+ OnlineHandler,
+ WorkerNode
+} from './worker'
+import type {
+ WorkerChoiceStrategy,
+ WorkerChoiceStrategyOptions
+} from './selection-strategies/selection-strategies-types'
+
+/**
+ * Enumeration of pool types.
+ */
+export const PoolTypes = Object.freeze({
+ /**
+ * Fixed pool type.
+ */
+ fixed: 'fixed',
+ /**
+ * Dynamic pool type.
+ */
+ dynamic: 'dynamic'
+} as const)
+
+/**
+ * Pool type.
+ */
+export type PoolType = keyof typeof PoolTypes
+
+/**
+ * Enumeration of worker types.
+ */
+export const WorkerTypes = Object.freeze({
+ cluster: 'cluster',
+ thread: 'thread'
+} as const)
+
+/**
+ * Worker type.
+ */
+export type WorkerType = keyof typeof WorkerTypes
+
+/**
+ * Pool events emitter.
+ */
+export class PoolEmitter extends EventEmitterAsyncResource {}
+
+/**
+ * Enumeration of pool events.
+ */
+export const PoolEvents = Object.freeze({
+ full: 'full',
+ busy: 'busy',
+ error: 'error',
+ taskError: 'taskError'
+} as const)
+
+/**
+ * Pool event.
+ */
+export type PoolEvent = keyof typeof PoolEvents
+
+/**
+ * Pool information.
+ */
+export interface PoolInfo {
+ type: PoolType
+ worker: WorkerType
+ minSize: number
+ maxSize: number
+ /** Pool utilization ratio. */
+ utilization: number
+ /** Pool total worker nodes */
+ workerNodes: number
+ /** Pool idle worker nodes */
+ idleWorkerNodes: number
+ /** Pool busy worker nodes */
+ busyWorkerNodes: number
+ executedTasks: number
+ executingTasks: number
+ queuedTasks: number
+ maxQueuedTasks: number
+ failedTasks: number
+}
+
+/**
+ * Worker tasks queue options.
+ */
+export interface TasksQueueOptions {
+ /**
+ * Maximum number of tasks that can be executed concurrently on a worker.
+ *
+ * @defaultValue 1
+ */
+ readonly concurrency?: number
+}