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 export type Draft
<T
> = { -readonly [P
in keyof T
]?: T
[P
] }
12 * Message object that is passed between main worker and worker.
14 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
15 * @typeParam MainWorker - Type of main worker.
18 export interface MessageValue
<
20 MainWorker
extends ClusterWorker
| MessagePort
| unknown
= unknown
21 > extends Task
<Data
> {
25 readonly kill
?: KillBehavior
| 1
29 readonly error
?: string
33 readonly runTime
?: number
35 * Reference to main worker.
37 * Only for internal use.
40 readonly parent?: MainWorker
44 * An object holding the execution response promise resolve/reject callbacks.
46 * @typeParam Worker - Type of worker.
47 * @typeParam Response - Type of execution response. This can only be serializable data.
50 export interface PromiseResponseWrapper
<
51 Worker
extends IWorker
,
55 * Resolve callback to fulfill the promise.
57 readonly resolve
: (value
: Response
) => void
59 * Reject callback to reject the promise.
61 readonly reject
: (reason
?: string) => void
63 * The worker handling the execution.
65 readonly worker
: Worker