Commit | Line | Data |
---|---|---|
f06e48d8 | 1 | import type { CircularArray } from '../circular-array' |
29ee7e9a | 2 | import type { Queue } from '../queue' |
f06e48d8 | 3 | |
bdaf31cd JB |
4 | /** |
5 | * Callback invoked if the worker has received a message. | |
6 | */ | |
50e66724 JB |
7 | export 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 |
15 | export 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 | 23 | export type OnlineHandler<Worker extends IWorker> = (this: Worker) => void |
bdaf31cd JB |
24 | |
25 | /** | |
26 | * Callback invoked when the worker exits successfully. | |
27 | */ | |
50e66724 JB |
28 | export 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 | 39 | export 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 | */ |
59 | export 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 | */ | |
93 | export 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 | */ |
120 | export 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 | } |