c89205ac93582b3dff2c1123285f09790edfb509
[poolifier.git] / src / pools / pool-worker.ts
1 import type { Worker as ClusterWorker } from 'cluster'
2 import type { Worker as WorkerThread } from 'worker_threads'
3 import type { Draft } from '../utility-types'
4
5 /**
6 * Poolifier supported worker type.
7 */
8 export type WorkerType = WorkerThread & ClusterWorker & Draft<MessageChannel>
9
10 /**
11 * Callback invoked if the worker has received a message.
12 */
13 export type MessageHandler<Worker> = (this: Worker, m: unknown) => void
14
15 /**
16 * Callback invoked if the worker raised an error.
17 */
18 export type ErrorHandler<Worker> = (this: Worker, e: Error) => void
19
20 /**
21 * Callback invoked when the worker has started successfully.
22 */
23 export type OnlineHandler<Worker> = (this: Worker) => void
24
25 /**
26 * Callback invoked when the worker exits successfully.
27 */
28 export type ExitHandler<Worker> = (this: Worker, code: number) => void
29
30 /**
31 * Interface that describes the minimum required implementation of listener events for a pool worker.
32 */
33 export interface IPoolWorker {
34 /**
35 * Register a listener to the message event.
36 *
37 * @param event `'message'`.
38 * @param handler The message handler.
39 */
40 on(event: 'message', handler: MessageHandler<this>): void
41 /**
42 * Register a listener to the error event.
43 *
44 * @param event `'error'`.
45 * @param handler The error handler.
46 */
47 on(event: 'error', handler: ErrorHandler<this>): void
48 /**
49 * Register a listener to the online event.
50 *
51 * @param event `'online'`.
52 * @param handler The online handler.
53 */
54 on(event: 'online', handler: OnlineHandler<this>): void
55 /**
56 * Register a listener to the exit event.
57 *
58 * @param event `'exit'`.
59 * @param handler The exit handler.
60 */
61 on(event: 'exit', handler: ExitHandler<this>): void
62 /**
63 * Register a listener to the exit event that will only performed once.
64 *
65 * @param event `'exit'`.
66 * @param handler The exit handler.
67 */
68 once(event: 'exit', handler: ExitHandler<this>): void
69 }