import type { IPoolInternal } from '../pool-internal'
import type { IPoolWorker } from '../pool-worker'
import { FairShareWorkerChoiceStrategy } from './fair-share-worker-choice-strategy'
+import { LessBusyWorkerChoiceStrategy } from './less-busy-worker-choice-strategy'
import { LessUsedWorkerChoiceStrategy } from './less-used-worker-choice-strategy'
import { RoundRobinWorkerChoiceStrategy } from './round-robin-worker-choice-strategy'
import type {
> (
pool: IPoolInternal<Worker, Data, Response>,
workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
-): IWorkerChoiceStrategy<Worker> {
+): IWorkerChoiceStrategy {
switch (workerChoiceStrategy) {
case WorkerChoiceStrategies.ROUND_ROBIN:
- return new RoundRobinWorkerChoiceStrategy(pool)
+ return new RoundRobinWorkerChoiceStrategy<Worker, Data, Response>(pool)
case WorkerChoiceStrategies.LESS_USED:
- return new LessUsedWorkerChoiceStrategy(pool)
+ return new LessUsedWorkerChoiceStrategy<Worker, Data, Response>(pool)
+ case WorkerChoiceStrategies.LESS_BUSY:
+ return new LessBusyWorkerChoiceStrategy<Worker, Data, Response>(pool)
case WorkerChoiceStrategies.FAIR_SHARE:
- return new FairShareWorkerChoiceStrategy(pool)
+ return new FairShareWorkerChoiceStrategy<Worker, Data, Response>(pool)
case WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN:
- return new WeightedRoundRobinWorkerChoiceStrategy(pool)
+ return new WeightedRoundRobinWorkerChoiceStrategy<Worker, Data, Response>(
+ pool
+ )
default:
throw new Error(
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions