refactor: cleanup some eslint rules disablement
[poolifier.git] / src / pools / pool.ts
index 581adc952c1e5a1a1b7e1f11c033283dc5df5fa5..3aa9feb70b04d8ea3b321777dd053d9823d994b0 100644 (file)
@@ -1,6 +1,7 @@
-import type { TransferListItem } from 'node:worker_threads'
+import type { TransferListItem, WorkerOptions } from 'node:worker_threads'
 import type { EventEmitterAsyncResource } from 'node:events'
-import type { TaskFunction } from '../worker/task-functions'
+import type { ClusterSettings } from 'node:cluster'
+import type { TaskFunction } from '../worker/task-functions.js'
 import type {
   ErrorHandler,
   ExitHandler,
@@ -9,11 +10,11 @@ import type {
   MessageHandler,
   OnlineHandler,
   WorkerType
-} from './worker'
+} from './worker.js'
 import type {
   WorkerChoiceStrategy,
   WorkerChoiceStrategyOptions
-} from './selection-strategies/selection-strategies-types'
+} from './selection-strategies/selection-strategies-types.js'
 
 /**
  * Enumeration of pool types.
@@ -68,6 +69,8 @@ export interface PoolInfo {
   readonly utilization?: number
   /** Pool total worker nodes. */
   readonly workerNodes: number
+  /** Pool stealing worker nodes. */
+  readonly stealingWorkerNodes?: number
   /** Pool idle worker nodes. */
   readonly idleWorkerNodes: number
   /** Pool busy worker nodes. */
@@ -110,7 +113,7 @@ export interface TasksQueueOptions {
    */
   readonly concurrency?: number
   /**
-   * Whether to enable task stealing on empty queue.
+   * Whether to enable task stealing on idle.
    *
    * @defaultValue true
    */
@@ -121,6 +124,12 @@ export interface TasksQueueOptions {
    * @defaultValue true
    */
   readonly tasksStealingOnBackPressure?: boolean
+  /**
+   * Queued tasks finished timeout in milliseconds at worker node termination.
+   *
+   * @defaultValue 2000
+   */
+  readonly tasksFinishedTimeout?: number
 }
 
 /**
@@ -189,6 +198,24 @@ export interface PoolOptions<Worker extends IWorker> {
    * Pool worker node tasks queue options.
    */
   tasksQueueOptions?: TasksQueueOptions
+  /**
+   * Worker options.
+   *
+   * @see https://nodejs.org/api/worker_threads.html#new-workerfilename-options
+   */
+  workerOptions?: WorkerOptions
+  /**
+   * Key/value pairs to add to worker process environment.
+   *
+   * @see https://nodejs.org/api/cluster.html#cluster_cluster_fork_env
+   */
+  env?: Record<string, unknown>
+  /**
+   * Cluster settings.
+   *
+   * @see https://nodejs.org/api/cluster.html#cluster_cluster_settings
+   */
+  settings?: ClusterSettings
 }
 
 /**
@@ -213,14 +240,6 @@ export interface IPool<
    * @internal
    */
   readonly workerNodes: Array<IWorkerNode<Worker, Data>>
-  /**
-   * Whether the worker node has back pressure (i.e. its tasks queue is full).
-   *
-   * @param workerNodeKey - The worker node key.
-   * @returns `true` if the worker node has back pressure, `false` otherwise.
-   * @internal
-   */
-  readonly hasWorkerNodeBackPressure: (workerNodeKey: number) => boolean
   /**
    * Event emitter integrated with async resource on which events can be listened to.
    * The async tracking tooling identifier is `poolifier:<PoolType>-<WorkerType>-pool`.