Apply dependencies update (#485)
[poolifier.git] / src / pools / pool-internal.ts
CommitLineData
a35560ba 1import EventEmitter from 'events'
a35560ba
S
2import type { IWorker } from './abstract-pool'
3import type { IPool } from './pool'
4
7c0ba920
JB
5/**
6 * Pool types.
7 */
8export enum PoolType {
9 FIXED = 'fixed',
10 DYNAMIC = 'dynamic'
11}
12
a35560ba
S
13/**
14 * Internal poolifier pool emitter.
15 */
16export class PoolEmitter extends EventEmitter {}
17
18/**
19 * Internal contract definition for a poolifier pool.
20 *
21 * @template Worker Type of worker which manages this pool.
22 * @template Data Type of data sent to the worker.
23 * @template Response Type of response of execution.
24 */
25export interface IPoolInternal<
26 Worker extends IWorker,
27 Data = unknown,
28 Response = unknown
29> extends IPool<Data, Response> {
30 /**
31 * List of currently available workers.
32 */
33 readonly workers: Worker[]
34
35 /**
36 * The tasks map.
37 *
38 * - `key`: The `Worker`
39 * - `value`: Number of tasks currently in progress on the worker.
40 */
41 readonly tasks: Map<Worker, number>
42
43 /**
44 * Emitter on which events can be listened to.
45 *
46 * Events that can currently be listened to:
47 *
330c983e 48 * - `'busy'`
a35560ba 49 */
7c0ba920 50 readonly emitter?: PoolEmitter
a35560ba 51
a35560ba 52 /**
7c0ba920 53 * Pool type.
a35560ba 54 *
7c0ba920 55 * If it is `'dynamic'`, it provides the `max` property.
a35560ba 56 */
7c0ba920 57 readonly type: PoolType
ff5e76e1
JB
58
59 /**
60 * Maximum number of workers that can be created by this pool.
61 */
62 readonly max?: number
7c0ba920
JB
63
64 /**
65 * Whether the pool is busy or not.
66 *
67 * The pool busyness boolean status.
68 */
69 readonly busy: boolean
70
71 /**
72 * Number of tasks currently concurrently running.
73 */
74 readonly numberOfRunningTasks: number
75
76 /**
77 * Find a tasks map entry with a free worker based on the number of tasks the worker has applied.
78 *
79 * If an entry is found with a worker that has `0` tasks, it is detected as free.
80 *
81 * If no tasks map entry with a free worker was found, `false` will be returned.
82 *
83 * @returns A tasks map entry with a free worker if there was one, otherwise `false`.
84 */
85 findFreeTasksMapEntry(): [Worker, number] | false
a35560ba 86}