build(deps-dev): apply updates
[poolifier.git] / src / pools / worker.ts
CommitLineData
f06e48d8 1import type { CircularArray } from '../circular-array'
29ee7e9a 2import type { Queue } from '../queue'
f06e48d8 3
bdaf31cd
JB
4/**
5 * Callback invoked if the worker has received a message.
6 */
50e66724
JB
7export type MessageHandler<Worker extends IWorker> = (
8 this: Worker,
9 m: unknown
10) => void
bdaf31cd
JB
11
12/**
13 * Callback invoked if the worker raised an error.
14 */
50e66724
JB
15export type ErrorHandler<Worker extends IWorker> = (
16 this: Worker,
17 e: Error
18) => void
bdaf31cd
JB
19
20/**
21 * Callback invoked when the worker has started successfully.
22 */
50e66724 23export type OnlineHandler<Worker extends IWorker> = (this: Worker) => void
bdaf31cd
JB
24
25/**
26 * Callback invoked when the worker exits successfully.
27 */
50e66724
JB
28export type ExitHandler<Worker extends IWorker> = (
29 this: Worker,
30 code: number
31) => void
bdaf31cd
JB
32
33/**
02706357 34 * Message object that is passed as a task between main worker and worker.
c319c66b
JB
35 *
36 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
37 * @internal
bdaf31cd 38 */
f06e48d8 39export interface Task<Data = unknown> {
a86b6df1
JB
40 /**
41 * Task name.
42 */
43 readonly name?: string
0274ce2d 44 /**
d29bce7c 45 * Task input data that will be passed to the worker.
0274ce2d 46 */
02706357 47 readonly data?: Data
0274ce2d 48 /**
70a4f5ea 49 * Message UUID.
0274ce2d 50 */
02706357 51 readonly id?: string
f06e48d8
JB
52}
53
54/**
55 * Worker tasks usage statistics.
f9b4bbf8
JB
56 *
57 * @internal
f06e48d8
JB
58 */
59export interface TasksUsage {
02706357
JB
60 /**
61 * Number of tasks executed.
62 */
f06e48d8 63 run: number
02706357
JB
64 /**
65 * Number of tasks running.
66 */
f06e48d8 67 running: number
02706357
JB
68 /**
69 * Tasks runtime.
70 */
f06e48d8 71 runTime: number
02706357
JB
72 /**
73 * Tasks runtime history.
74 */
f06e48d8 75 runTimeHistory: CircularArray<number>
02706357
JB
76 /**
77 * Average tasks runtime.
78 */
f06e48d8 79 avgRunTime: number
02706357
JB
80 /**
81 * Median tasks runtime.
82 */
f06e48d8 83 medRunTime: number
02706357
JB
84 /**
85 * Number of tasks errored.
86 */
f06e48d8
JB
87 error: number
88}
89
90/**
91 * Worker interface.
92 */
93export interface IWorker {
bdaf31cd 94 /**
78cea37e 95 * Register an event listener.
bdaf31cd 96 *
38e795c1 97 * @param event - The event.
48ef9107 98 * @param handler - The event handler.
bdaf31cd 99 */
78cea37e
JB
100 on: ((event: 'message', handler: MessageHandler<this>) => void) &
101 ((event: 'error', handler: ErrorHandler<this>) => void) &
102 ((event: 'online', handler: OnlineHandler<this>) => void) &
103 ((event: 'exit', handler: ExitHandler<this>) => void)
bdaf31cd 104 /**
7d6b5ad2 105 * Register a listener to the exit event that will only be performed once.
bdaf31cd 106 *
38e795c1
JB
107 * @param event - `'exit'`.
108 * @param handler - The exit handler.
bdaf31cd 109 */
78cea37e 110 once: (event: 'exit', handler: ExitHandler<this>) => void
bdaf31cd 111}
f06e48d8
JB
112
113/**
114 * Worker node interface.
c319c66b
JB
115 *
116 * @typeParam Worker - Type of worker.
117 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
118 * @internal
f06e48d8
JB
119 */
120export interface WorkerNode<Worker extends IWorker, Data = unknown> {
c319c66b
JB
121 /**
122 * Worker node worker.
123 */
02706357 124 readonly worker: Worker
c319c66b
JB
125 /**
126 * Worker node tasks usage statistics.
127 */
f06e48d8 128 tasksUsage: TasksUsage
c319c66b
JB
129 /**
130 * Worker node tasks queue.
131 */
29ee7e9a 132 readonly tasksQueue: Queue<Task<Data>>
f06e48d8 133}