1 import type { Worker
as ClusterWorker
} from
'node:cluster'
2 import type { MessagePort
} from
'node:worker_threads'
3 import type { KillBehavior
} from
'./worker/worker-options'
4 import type { IWorker
, Task
} from
'./pools/worker'
7 * Make all properties in T non-readonly.
9 * @typeParam T - Type in which properties will be non-readonly.
11 export type Draft
<T
> = { -readonly [P
in keyof T
]?: T
[P
] }
14 * Message object that is passed between main worker and worker.
16 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
17 * @typeParam MainWorker - Type of main worker.
20 export interface MessageValue
<
22 MainWorker
extends ClusterWorker
| MessagePort
| unknown
= unknown
23 > extends Task
<Data
> {
27 readonly kill
?: KillBehavior
| 1
31 readonly error
?: string
35 readonly runTime
?: number
37 * Reference to main worker.
39 readonly parent?: MainWorker
43 * Worker synchronous function that can be executed.
45 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
46 * @typeParam Response - Type of execution response. This can only be serializable data.
48 export type WorkerSyncFunction
<Data
= unknown
, Response
= unknown
> = (
52 * Worker asynchronous function that can be executed.
53 * This function must return a promise.
55 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
56 * @typeParam Response - Type of execution response. This can only be serializable data.
58 export type WorkerAsyncFunction
<Data
= unknown
, Response
= unknown
> = (
60 ) => Promise
<Response
>
62 * Worker function that can be executed.
63 * This function can be synchronous or asynchronous.
65 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
66 * @typeParam Response - Type of execution response. This can only be serializable data.
68 export type WorkerFunction
<Data
= unknown
, Response
= unknown
> =
69 | WorkerSyncFunction
<Data
, Response
>
70 | WorkerAsyncFunction
<Data
, Response
>
72 * Worker functions object that can be executed.
73 * This object can contain synchronous or asynchronous functions.
74 * The key is the name of the function.
75 * The value is the function itself.
77 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
78 * @typeParam Response - Type of execution response. This can only be serializable data.
80 export type TaskFunctions
<Data
= unknown
, Response
= unknown
> = Record
<
82 WorkerFunction
<Data
, Response
>
86 * An object holding the execution response promise resolve/reject callbacks.
88 * @typeParam Worker - Type of worker.
89 * @typeParam Response - Type of execution response. This can only be serializable data.
92 export interface PromiseResponseWrapper
<
93 Worker
extends IWorker
,
97 * Resolve callback to fulfill the promise.
99 readonly resolve
: (value
: Response
) => void
101 * Reject callback to reject the promise.
103 readonly reject
: (reason
?: string) => void
105 * The worker handling the execution.
107 readonly worker
: Worker