docs: enhance error message
[poolifier.git] / src / pools / worker.ts
CommitLineData
f06e48d8
JB
1import type { CircularArray } from '../circular-array'
2
bdaf31cd
JB
3/**
4 * Callback invoked if the worker has received a message.
5 */
50e66724
JB
6export 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
14export 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 22export type OnlineHandler<Worker extends IWorker> = (this: Worker) => void
bdaf31cd
JB
23
24/**
25 * Callback invoked when the worker exits successfully.
26 */
50e66724
JB
27export type ExitHandler<Worker extends IWorker> = (
28 this: Worker,
29 code: number
30) => void
bdaf31cd
JB
31
32/**
f06e48d8 33 * Worker task interface.
bdaf31cd 34 */
f06e48d8
JB
35export interface Task<Data = unknown> {
36 data: Data
37 id: string
38}
39
40/**
41 * Worker tasks usage statistics.
42 */
43export interface TasksUsage {
44 run: number
45 running: number
46 runTime: number
47 runTimeHistory: CircularArray<number>
48 avgRunTime: number
49 medRunTime: number
50 error: number
51}
52
53/**
54 * Worker interface.
55 */
56export interface IWorker {
bdaf31cd 57 /**
78cea37e 58 * Register an event listener.
bdaf31cd 59 *
38e795c1
JB
60 * @param event - The event.
61 * @param handler - The event listener.
bdaf31cd 62 */
78cea37e
JB
63 on: ((event: 'message', handler: MessageHandler<this>) => void) &
64 ((event: 'error', handler: ErrorHandler<this>) => void) &
65 ((event: 'online', handler: OnlineHandler<this>) => void) &
66 ((event: 'exit', handler: ExitHandler<this>) => void)
bdaf31cd
JB
67 /**
68 * Register a listener to the exit event that will only performed once.
69 *
38e795c1
JB
70 * @param event - `'exit'`.
71 * @param handler - The exit handler.
bdaf31cd 72 */
78cea37e 73 once: (event: 'exit', handler: ExitHandler<this>) => void
bdaf31cd 74}
f06e48d8
JB
75
76/**
77 * Worker node interface.
78 */
79export interface WorkerNode<Worker extends IWorker, Data = unknown> {
80 worker: Worker
81 tasksUsage: TasksUsage
82 tasksQueue: Array<Task<Data>>
83}