chore: migrate to eslint 9
[poolifier.git] / src / pools / pool.ts
index a025f3ced9568eb872957b98d060ce66ef27ad10..c2d5498753c61a385fa43bb2a68163b305ad03a2 100644 (file)
@@ -5,11 +5,11 @@ import type { TransferListItem, WorkerOptions } from 'node:worker_threads'
 import type { TaskFunctionProperties } from '../utility-types.js'
 import type {
   TaskFunction,
-  TaskFunctionObject
+  TaskFunctionObject,
 } from '../worker/task-functions.js'
 import type {
   WorkerChoiceStrategy,
-  WorkerChoiceStrategyOptions
+  WorkerChoiceStrategyOptions,
 } from './selection-strategies/selection-strategies-types.js'
 import type {
   ErrorHandler,
@@ -18,7 +18,7 @@ import type {
   IWorkerNode,
   MessageHandler,
   OnlineHandler,
-  WorkerType
+  WorkerType,
 } from './worker.js'
 
 /**
@@ -35,7 +35,7 @@ export const PoolTypes: Readonly<{
   /**
    * Dynamic pool type.
    */
-  dynamic: 'dynamic'
+  dynamic: 'dynamic',
 } as const)
 
 /**
@@ -63,7 +63,7 @@ export const PoolEvents: Readonly<{
   destroy: 'destroy',
   error: 'error',
   taskError: 'taskError',
-  backPressure: 'backPressure'
+  backPressure: 'backPressure',
 } as const)
 
 /**
@@ -139,31 +139,26 @@ export interface PoolInfo {
 export interface TasksQueueOptions {
   /**
    * Maximum tasks queue size per worker node flagging it as back pressured.
-   *
    * @defaultValue (pool maximum size)^2
    */
   readonly size?: number
   /**
    * Maximum number of tasks that can be executed concurrently on a worker node.
-   *
    * @defaultValue 1
    */
   readonly concurrency?: number
   /**
    * Whether to enable task stealing on idle.
-   *
    * @defaultValue true
    */
   readonly taskStealing?: boolean
   /**
    * Whether to enable tasks stealing under back pressure.
-   *
    * @defaultValue false
    */
   readonly tasksStealingOnBackPressure?: boolean
   /**
    * Queued tasks finished timeout in milliseconds at worker node termination.
-   *
    * @defaultValue 2000
    */
   readonly tasksFinishedTimeout?: number
@@ -171,43 +166,36 @@ export interface TasksQueueOptions {
 
 /**
  * Options for a poolifier pool.
- *
  * @typeParam Worker - Type of worker.
  */
 export interface PoolOptions<Worker extends IWorker> {
   /**
    * A function that will listen for online event on each worker.
-   *
    * @defaultValue `() => {}`
    */
   onlineHandler?: OnlineHandler<Worker>
   /**
    * A function that will listen for message event on each worker.
-   *
    * @defaultValue `() => {}`
    */
   messageHandler?: MessageHandler<Worker>
   /**
    * A function that will listen for error event on each worker.
-   *
    * @defaultValue `() => {}`
    */
   errorHandler?: ErrorHandler<Worker>
   /**
    * A function that will listen for exit event on each worker.
-   *
    * @defaultValue `() => {}`
    */
   exitHandler?: ExitHandler<Worker>
   /**
    * Whether to start the minimum number of workers at pool initialization.
-   *
    * @defaultValue true
    */
   startWorkers?: boolean
   /**
    * The default worker choice strategy to use in this pool.
-   *
    * @defaultValue WorkerChoiceStrategies.ROUND_ROBIN
    */
   workerChoiceStrategy?: WorkerChoiceStrategy
@@ -221,13 +209,11 @@ export interface PoolOptions<Worker extends IWorker> {
   restartWorkerOnError?: boolean
   /**
    * Pool events integrated with async resource emission.
-   *
    * @defaultValue true
    */
   enableEvents?: boolean
   /**
    * Pool worker node tasks queue.
-   *
    * @defaultValue false
    */
   enableTasksQueue?: boolean
@@ -237,19 +223,16 @@ export interface PoolOptions<Worker extends IWorker> {
   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
@@ -257,7 +240,6 @@ export interface PoolOptions<Worker extends IWorker> {
 
 /**
  * Contract definition for a poolifier pool.
- *
  * @typeParam Worker - Type of worker which manages this pool.
  * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
  * @typeParam Response - Type of execution response. This can only be structured-cloneable data.
@@ -273,10 +255,9 @@ export interface IPool<
   readonly info: PoolInfo
   /**
    * Pool worker nodes.
-   *
    * @internal
    */
-  readonly workerNodes: Array<IWorkerNode<Worker, Data>>
+  readonly workerNodes: IWorkerNode<Worker, Data>[]
   /**
    * Pool event emitter integrated with async resource.
    * The async tracking tooling identifier is `poolifier:<PoolType>-<WorkerType>-pool`.
@@ -295,7 +276,6 @@ export interface IPool<
   readonly emitter?: EventEmitterAsyncResource
   /**
    * Executes the specified function in the worker constructor with the task data input parameter.
-   *
    * @param data - The optional task input data for the specified task function. This can only be structured-cloneable data.
    * @param name - The optional name of the task function to execute. If not specified, the default task function will be executed.
    * @param transferList - An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.
@@ -316,7 +296,6 @@ export interface IPool<
   readonly destroy: () => Promise<void>
   /**
    * Whether the specified task function exists in this pool.
-   *
    * @param name - The name of the task function.
    * @returns `true` if the task function exists, `false` otherwise.
    */
@@ -324,7 +303,6 @@ export interface IPool<
   /**
    * Adds a task function to this pool.
    * If a task function with the same name already exists, it will be overwritten.
-   *
    * @param name - The name of the task function.
    * @param fn - The task function.
    * @returns `true` if the task function was added, `false` otherwise.
@@ -337,27 +315,23 @@ export interface IPool<
   ) => Promise<boolean>
   /**
    * Removes a task function from this pool.
-   *
    * @param name - The name of the task function.
    * @returns `true` if the task function was removed, `false` otherwise.
    */
   readonly removeTaskFunction: (name: string) => Promise<boolean>
   /**
    * Lists the properties of task functions available in this pool.
-   *
    * @returns The properties of task functions available in this pool.
    */
   readonly listTaskFunctionsProperties: () => TaskFunctionProperties[]
   /**
    * Sets the default task function in this pool.
-   *
    * @param name - The name of the task function.
    * @returns `true` if the default task function was set, `false` otherwise.
    */
   readonly setDefaultTaskFunction: (name: string) => Promise<boolean>
   /**
    * Sets the default worker choice strategy in this pool.
-   *
    * @param workerChoiceStrategy - The default worker choice strategy.
    * @param workerChoiceStrategyOptions - The worker choice strategy options.
    */
@@ -367,7 +341,6 @@ export interface IPool<
   ) => void
   /**
    * Sets the worker choice strategy options in this pool.
-   *
    * @param workerChoiceStrategyOptions - The worker choice strategy options.
    * @returns `true` if the worker choice strategy options were set, `false` otherwise.
    */
@@ -376,7 +349,6 @@ export interface IPool<
   ) => boolean
   /**
    * Enables/disables the worker node tasks queue in this pool.
-   *
    * @param enable - Whether to enable or disable the worker node tasks queue.
    * @param tasksQueueOptions - The worker node tasks queue options.
    */
@@ -386,7 +358,6 @@ export interface IPool<
   ) => void
   /**
    * Sets the worker node tasks queue options in this pool.
-   *
    * @param tasksQueueOptions - The worker node tasks queue options.
    */
   readonly setTasksQueueOptions: (tasksQueueOptions: TasksQueueOptions) => void