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